mirror of
https://github.com/aseprite/aseprite.git
synced 2025-01-30 15:32:38 +00:00
Fix crash disabling GPU acceleration on Skia/Win port
This commit is contained in:
parent
49ad91dd79
commit
a43f7cfa66
@ -23,7 +23,8 @@ SkiaDisplay::SkiaDisplay(int width, int height, int scale)
|
||||
, m_customSurface(false)
|
||||
, m_nativeCursor(kArrowCursor)
|
||||
{
|
||||
m_surface->create(width, height);
|
||||
m_surface->create(width / scale,
|
||||
height / scale);
|
||||
m_window.setScale(scale);
|
||||
m_window.setVisible(true);
|
||||
}
|
||||
@ -35,6 +36,19 @@ void SkiaDisplay::setSkiaSurface(SkiaSurface* surface)
|
||||
m_customSurface = true;
|
||||
}
|
||||
|
||||
void SkiaDisplay::resetSkiaSurface()
|
||||
{
|
||||
if (m_surface) {
|
||||
m_surface->dispose();
|
||||
m_surface = nullptr;
|
||||
}
|
||||
|
||||
gfx::Size size = m_window.clientSize() / m_window.scale();
|
||||
m_surface = new SkiaSurface;
|
||||
m_surface->create(size.w, size.h);
|
||||
m_customSurface = false;
|
||||
}
|
||||
|
||||
void SkiaDisplay::resize(const gfx::Size& size)
|
||||
{
|
||||
Event ev;
|
||||
|
@ -21,6 +21,7 @@ public:
|
||||
SkiaDisplay(int width, int height, int scale);
|
||||
|
||||
void setSkiaSurface(SkiaSurface* surface);
|
||||
void resetSkiaSurface();
|
||||
|
||||
void resize(const gfx::Size& size);
|
||||
void dispose() override;
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include "she/skia/skia_window_win.h"
|
||||
|
||||
#include "base/log.h"
|
||||
#include "she/event_queue.h"
|
||||
#include "she/skia/skia_display.h"
|
||||
#include "she/system.h"
|
||||
@ -157,7 +158,7 @@ bool SkiaWindow::attachGL()
|
||||
(GrBackendContext)m_glCtx->gl()));
|
||||
}
|
||||
catch (const std::exception& ex) {
|
||||
//LOG("Cannot create GL context: %s\n", ex.what());
|
||||
LOG("Cannot create GL context: %s\n", ex.what());
|
||||
detachGL();
|
||||
}
|
||||
}
|
||||
@ -179,6 +180,9 @@ bool SkiaWindow::attachANGLE()
|
||||
|
||||
void SkiaWindow::detachGL()
|
||||
{
|
||||
if (m_glCtx && m_display)
|
||||
m_display->resetSkiaSurface();
|
||||
|
||||
m_skSurfaceDirect.reset(nullptr);
|
||||
m_skSurface.reset(nullptr);
|
||||
m_grRenderTarget.reset(nullptr);
|
||||
|
Loading…
x
Reference in New Issue
Block a user