diff options
Diffstat (limited to 'src/gpu')
-rwxr-xr-x | src/gpu/GrContextFactory.cpp | 33 | ||||
-rw-r--r-- | src/gpu/GrContextFactory.h | 35 | ||||
-rw-r--r-- | src/gpu/gl/SkNullGLContext.cpp | 5 | ||||
-rw-r--r-- | src/gpu/gl/angle/SkANGLEGLContext.cpp | 7 | ||||
-rw-r--r-- | src/gpu/gl/debug/SkDebugGLContext.h | 5 | ||||
-rw-r--r-- | src/gpu/gl/mesa/SkMesaGLContext.h | 5 |
6 files changed, 40 insertions, 50 deletions
diff --git a/src/gpu/GrContextFactory.cpp b/src/gpu/GrContextFactory.cpp index 4814e7870e..15af8162b1 100755 --- a/src/gpu/GrContextFactory.cpp +++ b/src/gpu/GrContextFactory.cpp @@ -24,10 +24,13 @@ #include "GrCaps.h" GrContextFactory::ContextInfo* GrContextFactory::getContextInfo(GLContextType type, + GrGLStandard forcedGpuAPI, GLContextOptions options) { for (int i = 0; i < fContexts.count(); ++i) { if (fContexts[i]->fType == type && - fContexts[i]->fOptions == options) { + fContexts[i]->fOptions == options && + (forcedGpuAPI == kNone_GrGLStandard || + forcedGpuAPI == fContexts[i]->fGLContext->gl()->fStandard)) { fContexts[i]->fGLContext->makeCurrent(); return fContexts[i]; } @@ -36,39 +39,31 @@ GrContextFactory::ContextInfo* GrContextFactory::getContextInfo(GLContextType ty SkAutoTUnref<GrContext> grCtx; switch (type) { case kNative_GLContextType: - glCtx.reset(SkCreatePlatformGLContext(kNone_GrGLStandard)); + glCtx.reset(SkCreatePlatformGLContext(forcedGpuAPI)); break; - case kGL_GLContextType: - glCtx.reset(SkCreatePlatformGLContext(kGL_GrGLStandard)); - break; - case kGLES_GLContextType: - glCtx.reset(SkCreatePlatformGLContext(kGLES_GrGLStandard)); - break; -#if SK_ANGLE -#ifdef SK_BUILD_FOR_WIN +#ifdef SK_ANGLE case kANGLE_GLContextType: - glCtx.reset(SkANGLEGLContext::CreateDirectX()); + glCtx.reset(SkANGLEGLContext::Create(forcedGpuAPI, false)); break; -#endif case kANGLE_GL_GLContextType: - glCtx.reset(SkANGLEGLContext::CreateOpenGL()); + glCtx.reset(SkANGLEGLContext::Create(forcedGpuAPI, true)); break; #endif -#if SK_COMMAND_BUFFER +#ifdef SK_COMMAND_BUFFER case kCommandBuffer_GLContextType: - glCtx.reset(SkCommandBufferGLContext::Create()); + glCtx.reset(SkCommandBufferGLContext::Create(forcedGpuAPI)); break; #endif -#if SK_MESA +#ifdef SK_MESA case kMESA_GLContextType: - glCtx.reset(SkMesaGLContext::Create()); + glCtx.reset(SkMesaGLContext::Create(forcedGpuAPI)); break; #endif case kNull_GLContextType: - glCtx.reset(SkNullGLContext::Create()); + glCtx.reset(SkNullGLContext::Create(forcedGpuAPI)); break; case kDebug_GLContextType: - glCtx.reset(SkDebugGLContext::Create()); + glCtx.reset(SkDebugGLContext::Create(forcedGpuAPI)); break; } if (nullptr == glCtx.get()) { diff --git a/src/gpu/GrContextFactory.h b/src/gpu/GrContextFactory.h index 1df99d6ff1..5097813817 100644 --- a/src/gpu/GrContextFactory.h +++ b/src/gpu/GrContextFactory.h @@ -24,23 +24,19 @@ class GrContextFactory : SkNoncopyable { public: enum GLContextType { - kNative_GLContextType, //! OpenGL or OpenGL ES context. - kGL_GLContextType, //! OpenGL context. - kGLES_GLContextType, //! OpenGL ES context. + kNative_GLContextType, #if SK_ANGLE -#ifdef SK_BUILD_FOR_WIN - kANGLE_GLContextType, //! ANGLE on DirectX OpenGL ES context. -#endif - kANGLE_GL_GLContextType, //! ANGLE on OpenGL OpenGL ES context. + kANGLE_GLContextType, + kANGLE_GL_GLContextType, #endif #if SK_COMMAND_BUFFER - kCommandBuffer_GLContextType, //! Chromium command buffer OpenGL ES context. + kCommandBuffer_GLContextType, #endif #if SK_MESA - kMESA_GLContextType, //! MESA OpenGL context + kMESA_GLContextType, #endif - kNull_GLContextType, //! Non-rendering OpenGL mock context. - kDebug_GLContextType, //! Non-rendering, state verifying OpenGL context. + kNull_GLContextType, + kDebug_GLContextType, kLastGLContextType = kDebug_GLContextType }; @@ -69,15 +65,11 @@ public: switch (type) { case kNative_GLContextType: return "native"; - case kGL_GLContextType: - return "gl"; - case kGLES_GLContextType: - return "gles"; + case kNull_GLContextType: + return "null"; #if SK_ANGLE -#ifdef SK_BUILD_FOR_WIN case kANGLE_GLContextType: return "angle"; -#endif case kANGLE_GL_GLContextType: return "angle-gl"; #endif @@ -89,8 +81,6 @@ public: case kMESA_GLContextType: return "mesa"; #endif - case kNull_GLContextType: - return "null"; case kDebug_GLContextType: return "debug"; default: @@ -134,14 +124,15 @@ public: * Get a context initialized with a type of GL context. It also makes the GL context current. * Pointer is valid until destroyContexts() is called. */ - ContextInfo* getContextInfo(GLContextType type, + ContextInfo* getContextInfo(GLContextType type, GrGLStandard forcedGpuAPI = kNone_GrGLStandard, GLContextOptions options = kNone_GLContextOptions); /** * Get a GrContext initialized with a type of GL context. It also makes the GL context current. */ - GrContext* get(GLContextType type, GLContextOptions options = kNone_GLContextOptions) { - if (ContextInfo* info = this->getContextInfo(type, options)) { + GrContext* get(GLContextType type, GrGLStandard forcedGpuAPI = kNone_GrGLStandard, + GLContextOptions options = kNone_GLContextOptions) { + if (ContextInfo* info = this->getContextInfo(type, forcedGpuAPI, options)) { return info->fGrContext; } return nullptr; diff --git a/src/gpu/gl/SkNullGLContext.cpp b/src/gpu/gl/SkNullGLContext.cpp index dafa1ef0bc..e7270c32c4 100644 --- a/src/gpu/gl/SkNullGLContext.cpp +++ b/src/gpu/gl/SkNullGLContext.cpp @@ -578,7 +578,10 @@ static void set_current_context_from_interface(const GrGLInterface* interface) { } #endif -SkNullGLContext* SkNullGLContext::Create() { +SkNullGLContext* SkNullGLContext::Create(GrGLStandard forcedGpuAPI) { + if (kGLES_GrGLStandard == forcedGpuAPI) { + return nullptr; + } SkNullGLContext* ctx = new SkNullGLContext; if (!ctx->isValid()) { delete ctx; diff --git a/src/gpu/gl/angle/SkANGLEGLContext.cpp b/src/gpu/gl/angle/SkANGLEGLContext.cpp index 2c9f38e1d9..54ef02d492 100644 --- a/src/gpu/gl/angle/SkANGLEGLContext.cpp +++ b/src/gpu/gl/angle/SkANGLEGLContext.cpp @@ -180,12 +180,7 @@ GrGLuint SkANGLEGLContext::eglImageToExternalTexture(GrEGLImage image) const { } SkGLContext* SkANGLEGLContext::createNew() const { -#ifdef SK_BUILD_FOR_WIN - SkGLContext* ctx = fIsGLBackend ? SkANGLEGLContext::CreateOpenGL() - : SkANGLEGLContext::CreateDirectX(); -#else - SkGLContext* ctx = SkANGLEGLContext::CreateOpenGL(); -#endif + SkGLContext* ctx = SkANGLEGLContext::Create(this->gl()->fStandard, fIsGLBackend); if (ctx) { ctx->makeCurrent(); } diff --git a/src/gpu/gl/debug/SkDebugGLContext.h b/src/gpu/gl/debug/SkDebugGLContext.h index 113a254e0b..abbcf559c5 100644 --- a/src/gpu/gl/debug/SkDebugGLContext.h +++ b/src/gpu/gl/debug/SkDebugGLContext.h @@ -14,7 +14,10 @@ class SkDebugGLContext : public SkGLContext { public: ~SkDebugGLContext() override; - static SkDebugGLContext* Create() { + static SkDebugGLContext* Create(GrGLStandard forcedGpuAPI) { + if (kGLES_GrGLStandard == forcedGpuAPI) { + return nullptr; + } return new SkDebugGLContext; } private: diff --git a/src/gpu/gl/mesa/SkMesaGLContext.h b/src/gpu/gl/mesa/SkMesaGLContext.h index a9c77a81da..a58f1c890e 100644 --- a/src/gpu/gl/mesa/SkMesaGLContext.h +++ b/src/gpu/gl/mesa/SkMesaGLContext.h @@ -19,7 +19,10 @@ private: public: ~SkMesaGLContext() override; - static SkMesaGLContext* Create() { + static SkMesaGLContext* Create(GrGLStandard forcedGpuAPI) { + if (kGLES_GrGLStandard == forcedGpuAPI) { + return nullptr; + } SkMesaGLContext* ctx = new SkMesaGLContext; if (!ctx->isValid()) { delete ctx; |