diff options
author | bsalomon <bsalomon@google.com> | 2016-03-30 18:56:19 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-30 18:56:20 -0700 |
commit | 3724e574a744491b7cfb8187ac865a70ef3d4528 (patch) | |
tree | eb3dd729cbc0adef5ce2b4a2fa048fe21baeb35a /tools/gpu/GrContextFactory.h | |
parent | 2238c9dbca4b791edc512957728a18ce14d55912 (diff) |
Move SkGLContext and some GrGLInterface implementations to skgputest module
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1815823002
CQ_EXTRA_TRYBOTS=client.skia.compile:Build-Ubuntu-GCC-x86_64-Release-CMake-Trybot,Build-Mac-Clang-x86_64-Release-CMake-Trybot
Committed: https://skia.googlesource.com/skia/+/fe3456cb006110d045b26ff3f8681b893a757b58
Review URL: https://codereview.chromium.org/1815823002
Diffstat (limited to 'tools/gpu/GrContextFactory.h')
-rw-r--r-- | tools/gpu/GrContextFactory.h | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/tools/gpu/GrContextFactory.h b/tools/gpu/GrContextFactory.h new file mode 100644 index 0000000000..b17460819d --- /dev/null +++ b/tools/gpu/GrContextFactory.h @@ -0,0 +1,146 @@ +/* + * 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 + +#include "GrContext.h" +#include "GrContextOptions.h" + +#include "gl/GLContext.h" +#include "SkTArray.h" + +namespace sk_gpu_test { +/** + * 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: + enum GLContextType { + kNative_GLContextType, //! OpenGL or OpenGL ES context. + kGL_GLContextType, //! OpenGL context. + kGLES_GLContextType, //! OpenGL ES context. +#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. +#endif +#if SK_COMMAND_BUFFER + kCommandBuffer_GLContextType, //! Chromium command buffer OpenGL ES context. +#endif +#if SK_MESA + kMESA_GLContextType, //! MESA OpenGL context +#endif + kNull_GLContextType, //! Non-rendering OpenGL mock context. + kDebug_GLContextType, //! Non-rendering, state verifying OpenGL context. + kLastGLContextType = kDebug_GLContextType + }; + + static const int kGLContextTypeCnt = kLastGLContextType + 1; + + /** + * Options for GL context creation. For historical and testing reasons the options will default + * to not using GL_NV_path_rendering extension even when the driver supports it. + */ + enum GLContextOptions { + kNone_GLContextOptions = 0, + kEnableNVPR_GLContextOptions = 0x1, + kRequireSRGBSupport_GLContextOptions = 0x2, + }; + + 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 kGL_GLContextType: + return "gl"; + case kGLES_GLContextType: + return "gles"; +#if SK_ANGLE +#ifdef SK_BUILD_FOR_WIN + case kANGLE_GLContextType: + return "angle"; +#endif + case kANGLE_GL_GLContextType: + return "angle-gl"; +#endif +#if SK_COMMAND_BUFFER + case kCommandBuffer_GLContextType: + return "commandbuffer"; +#endif +#if SK_MESA + case kMESA_GLContextType: + return "mesa"; +#endif + case kNull_GLContextType: + return "null"; + case kDebug_GLContextType: + return "debug"; + default: + SkFAIL("Unknown GL Context type."); + } + } + + explicit GrContextFactory(const GrContextOptions& opts); + GrContextFactory(); + + ~GrContextFactory(); + + void destroyContexts(); + void abandonContexts(); + + struct ContextInfo { + ContextInfo() + : fGrContext(nullptr), fGLContext(nullptr) { } + ContextInfo(GrContext* grContext, GLContext* glContext) + : fGrContext(grContext), fGLContext(glContext) { } + GrContext* fGrContext; + GLContext* fGLContext; //! Valid until the factory destroys it via abandonContexts() or + //! destroyContexts(). + }; + + /** + * Get a context initialized with a type of GL context. It also makes the GL context current. + */ + ContextInfo getContextInfo(GLContextType type, + 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) { + return this->getContextInfo(type, options).fGrContext; + } + const GrContextOptions& getGlobalOptions() const { return fGlobalOptions; } + +private: + struct Context { + GLContextType fType; + GLContextOptions fOptions; + GLContext* fGLContext; + GrContext* fGrContext; + }; + SkTArray<Context, true> fContexts; + const GrContextOptions fGlobalOptions; +}; +} // namespace sk_gpu_test +#endif |