void SkiaWindow::resizeImpl(const gfx::Size& size) { bool gpu = instance()->gpuAcceleration(); (void)gpu; #if SK_SUPPORT_GPU #if SK_ANGLE if (gpu && attachANGLE()) { m_backend = Backend::ANGLE; } else #endif // SK_ANGLE if (gpu && attachGL()) { m_backend = Backend::GL; } else #endif // SK_SUPPORT_GPU { #if SK_SUPPORT_GPU detachGL(); #endif m_backend = Backend::NONE; } #if SK_SUPPORT_GPU if (m_glCtx) createRenderTarget(size); #endif m_display->resize(size); }
void SkOSWindow::release() { switch (fAttached) { case kNone_BackEndType: // nothing to do break; #if SK_SUPPORT_GPU case kNativeGL_BackEndType: detachGL(); break; #if SK_ANGLE case kANGLE_BackEndType: detachANGLE(); break; #endif // SK_ANGLE #if SK_COMMAND_BUFFER case kCommandBuffer_BackEndType: detachCommandBuffer(); break; #endif // SK_COMMAND_BUFFER #endif // SK_SUPPORT_GPU default: SkASSERT(false); break; } fAttached = kNone_BackEndType; }
SkiaWindow::~SkiaWindow() { switch (m_backend) { case Backend::NONE: // Do nothing break; #if SK_SUPPORT_GPU case Backend::GL: case Backend::ANGLE: detachGL(); break; #endif // SK_SUPPORT_GPU } }
void SkOSWindow::detach() { switch (fAttached) { case kNone_BackEndType: // nothing to do break; #if SK_SUPPORT_GPU case kNativeGL_BackEndType: detachGL(); break; #if SK_ANGLE case kANGLE_BackEndType: detachANGLE(); break; #endif // SK_ANGLE #endif // SK_SUPPORT_GPU default: SkASSERT(false); break; } fAttached = kNone_BackEndType; }
bool SkiaWindow::attachGL() { if (!m_glCtx) { try { auto ctx = new GLContextSkia<GLContextWGL>(handle()); m_stencilBits = ctx->getStencilBits(); m_sampleCount = ctx->getSampleCount(); m_glCtx.reset(ctx); m_grCtx.reset(GrContext::Create(kOpenGL_GrBackend, (GrBackendContext)m_glCtx->gl())); } catch (const std::exception& ex) { LOG("Cannot create GL context: %s\n", ex.what()); detachGL(); } } if (m_glCtx) return true; else return false; }