Index: include/gpu/GrContextFactory.h |
diff --git a/include/gpu/GrContextFactory.h b/include/gpu/GrContextFactory.h |
deleted file mode 100644 |
index 143ca31aad6c0f3f62c4704ec71a48a1e99a00a6..0000000000000000000000000000000000000000 |
--- a/include/gpu/GrContextFactory.h |
+++ /dev/null |
@@ -1,215 +0,0 @@ |
-/* |
- * Copyright 2012 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#ifndef GrContextFactory_DEFINED |
-#define GrContextFactory_DEFINED |
- |
-#if SK_ANGLE |
- #include "gl/SkANGLEGLContext.h" |
-#endif |
-#include "gl/SkDebugGLContext.h" |
-#if SK_MESA |
- #include "gl/SkMesaGLContext.h" |
-#endif |
-#include "gl/SkGLContext.h" |
-#include "gl/SkNullGLContext.h" |
- |
-#include "GrContext.h" |
-#include "SkTArray.h" |
- |
-/** |
- * This is a simple class that is useful in test apps that use different |
- * GrContexts backed by different types of GL contexts. It manages creating the |
- * GL context and a GrContext that uses it. The GL/Gr contexts persist until the |
- * factory is destroyed (though the caller can always grab a ref on the returned |
- * Gr and GL contexts to make them outlive the factory). |
- */ |
-class GrContextFactory : SkNoncopyable { |
-public: |
- /** |
- * Types of GL contexts supported. For historical and testing reasons the native GrContext will |
- * not use "GL_NV_path_rendering" even when the driver supports it. There is a separate context |
- * type that does not remove NVPR support and which will fail when the driver does not support |
- * the extension. |
- */ |
- enum GLContextType { |
- kNative_GLContextType, |
-#if SK_ANGLE |
- kANGLE_GLContextType, |
-#endif |
-#if SK_MESA |
- kMESA_GLContextType, |
-#endif |
- /** Similar to kNative but does not filter NVPR. It will fail if the GL driver does not |
- support NVPR */ |
- kNVPR_GLContextType, |
- kNull_GLContextType, |
- kDebug_GLContextType, |
- |
- kLastGLContextType = kDebug_GLContextType |
- }; |
- |
- static const int kGLContextTypeCnt = kLastGLContextType + 1; |
- |
- static bool IsRenderingGLContext(GLContextType type) { |
- switch (type) { |
- case kNull_GLContextType: |
- case kDebug_GLContextType: |
- return false; |
- default: |
- return true; |
- } |
- } |
- |
- static const char* GLContextTypeName(GLContextType type) { |
- switch (type) { |
- case kNative_GLContextType: |
- return "native"; |
- case kNull_GLContextType: |
- return "null"; |
-#if SK_ANGLE |
- case kANGLE_GLContextType: |
- return "angle"; |
-#endif |
-#if SK_MESA |
- case kMESA_GLContextType: |
- return "mesa"; |
-#endif |
- case kNVPR_GLContextType: |
- return "nvpr"; |
- case kDebug_GLContextType: |
- return "debug"; |
- default: |
- SkFAIL("Unknown GL Context type."); |
- } |
- } |
- |
- explicit GrContextFactory(const GrContext::Options& opts) : fGlobalOptions(opts) { } |
- GrContextFactory() { } |
- |
- ~GrContextFactory() { this->destroyContexts(); } |
- |
- void destroyContexts() { |
- for (int i = 0; i < fContexts.count(); ++i) { |
- if (fContexts[i].fGLContext) { // could be abandoned. |
- fContexts[i].fGLContext->makeCurrent(); |
- } |
- fContexts[i].fGrContext->unref(); |
- if (fContexts[i].fGLContext) { |
- fContexts[i].fGLContext->unref(); |
- } |
- } |
- fContexts.reset(); |
- } |
- |
- void abandonContexts() { |
- for (int i = 0; i < fContexts.count(); ++i) { |
- if (fContexts[i].fGLContext) { |
- fContexts[i].fGLContext->testAbandon(); |
- SkSafeSetNull(fContexts[i].fGLContext); |
- } |
- fContexts[i].fGrContext->abandonContext(); |
- } |
- } |
- |
- /** |
- * Get a GrContext initialized with a type of GL context. It also makes the GL context current. |
- */ |
- GrContext* get(GLContextType type, GrGLStandard forcedGpuAPI = kNone_GrGLStandard) { |
- for (int i = 0; i < fContexts.count(); ++i) { |
- if (forcedGpuAPI != kNone_GrGLStandard && |
- forcedGpuAPI != fContexts[i].fGLContext->gl()->fStandard) |
- continue; |
- |
- if (fContexts[i].fType == type) { |
- fContexts[i].fGLContext->makeCurrent(); |
- return fContexts[i].fGrContext; |
- } |
- } |
- SkAutoTUnref<SkGLContext> glCtx; |
- SkAutoTUnref<GrContext> grCtx; |
- switch (type) { |
- case kNVPR_GLContextType: // fallthru |
- case kNative_GLContextType: |
- glCtx.reset(SkCreatePlatformGLContext(forcedGpuAPI)); |
- break; |
-#ifdef SK_ANGLE |
- case kANGLE_GLContextType: |
- glCtx.reset(SkANGLEGLContext::Create(forcedGpuAPI)); |
- break; |
-#endif |
-#ifdef SK_MESA |
- case kMESA_GLContextType: |
- glCtx.reset(SkMesaGLContext::Create(forcedGpuAPI)); |
- break; |
-#endif |
- case kNull_GLContextType: |
- glCtx.reset(SkNullGLContext::Create(forcedGpuAPI)); |
- break; |
- case kDebug_GLContextType: |
- glCtx.reset(SkDebugGLContext::Create(forcedGpuAPI)); |
- break; |
- } |
- if (NULL == glCtx.get()) { |
- return NULL; |
- } |
- |
- SkASSERT(glCtx->isValid()); |
- |
- // Ensure NVPR is available for the NVPR type and block it from other types. |
- SkAutoTUnref<const GrGLInterface> glInterface(SkRef(glCtx->gl())); |
- if (kNVPR_GLContextType == type) { |
- if (!glInterface->hasExtension("GL_NV_path_rendering")) { |
- return NULL; |
- } |
- } else { |
- glInterface.reset(GrGLInterfaceRemoveNVPR(glInterface)); |
- if (!glInterface) { |
- return NULL; |
- } |
- } |
- |
- glCtx->makeCurrent(); |
- GrBackendContext p3dctx = reinterpret_cast<GrBackendContext>(glInterface.get()); |
- grCtx.reset(GrContext::Create(kOpenGL_GrBackend, p3dctx, &fGlobalOptions)); |
- if (!grCtx.get()) { |
- return NULL; |
- } |
- GPUContext& ctx = fContexts.push_back(); |
- ctx.fGLContext = glCtx.get(); |
- ctx.fGLContext->ref(); |
- ctx.fGrContext = grCtx.get(); |
- ctx.fGrContext->ref(); |
- ctx.fType = type; |
- return ctx.fGrContext; |
- } |
- |
- // Returns the GLContext of the given type. If it has not been created yet, |
- // NULL is returned instead. |
- SkGLContext* getGLContext(GLContextType type) { |
- for (int i = 0; i < fContexts.count(); ++i) { |
- if (fContexts[i].fType == type) { |
- return fContexts[i].fGLContext; |
- } |
- } |
- |
- return NULL; |
- } |
- |
- const GrContext::Options& getGlobalOptions() const { return fGlobalOptions; } |
- |
-private: |
- struct GPUContext { |
- GLContextType fType; |
- SkGLContext* fGLContext; |
- GrContext* fGrContext; |
- }; |
- SkTArray<GPUContext, true> fContexts; |
- const GrContext::Options fGlobalOptions; |
-}; |
- |
-#endif |