diff options
author | bsalomon <bsalomon@google.com> | 2014-10-08 04:45:09 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-08 04:45:10 -0700 |
commit | 10805961ce424868e8315e00f6dbeeaa62d466ac (patch) | |
tree | 87fbeec3c52176c1794c25ae639adb38c6bcfa60 /src/gpu | |
parent | a5ee45ce9daba663c28ba5f6634af93702aecd96 (diff) |
Revert of Make the Sk GL context class an abstract base class (patchset #4 id:60001 of https://codereview.chromium.org/630843002/)
Reason for revert:
nanobech failing on Android
Original issue's description:
> Make the Sk GL context class an abstract base class
>
> Make the Sk GL context class, SkGLNativeContext, an abstract base class. Before,
> it depended on ifdefs to implement the platform dependent polymorphism. Move
> the logic to subclasses of the various platform implementations.
>
> This a step to enable Skia embedders to compile dm and bench_pictures. The
> concrete goal is to support running these test apps with Chromium command buffer.
>
> With this change, Chromium can implement its own version of SkGLNativeContext
> that uses command buffer, and host the implementation in its own repository.
>
> Implements the above by renaming the SkGLContextHelper to SkGLContext and
> removing the unneeded SkGLNativeContext. Also removes
> SkGLNativeContext::AutoRestoreContext functionality, it appeared to be unused:
> no use in Skia code, and no tests.
>
> BUG=skia:2992
>
> Committed: https://skia.googlesource.com/skia/+/a90ed4e83897b45d6331ee4c54e1edd4054de9a8
TBR=kkinnunen@nvidia.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:2992
Review URL: https://codereview.chromium.org/639793002
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/gl/SkGLContextHelper.cpp (renamed from src/gpu/gl/SkGLContext.cpp) | 10 | ||||
-rw-r--r-- | src/gpu/gl/angle/SkANGLEGLContext.cpp | 15 | ||||
-rw-r--r-- | src/gpu/gl/debug/GrGLCreateDebugInterface.cpp | 2 | ||||
-rw-r--r-- | src/gpu/gl/egl/SkNativeGLContext_egl.cpp (renamed from src/gpu/gl/egl/SkCreatePlatformGLContext_egl.cpp) | 51 | ||||
-rw-r--r-- | src/gpu/gl/glx/SkNativeGLContext_glx.cpp (renamed from src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp) | 78 | ||||
-rw-r--r-- | src/gpu/gl/iOS/SkNativeGLContext_iOS.mm (renamed from src/gpu/gl/iOS/SkCreatePlatformGLContext_iOS.mm) | 50 | ||||
-rw-r--r-- | src/gpu/gl/mac/SkNativeGLContext_mac.cpp (renamed from src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp) | 43 | ||||
-rw-r--r-- | src/gpu/gl/mesa/SkMesaGLContext.cpp | 18 | ||||
-rw-r--r-- | src/gpu/gl/nacl/SkCreatePlatformGLContext_nacl.cpp | 60 | ||||
-rw-r--r-- | src/gpu/gl/nacl/SkNativeGLContext_nacl.cpp | 37 | ||||
-rw-r--r-- | src/gpu/gl/win/SkNativeGLContext_win.cpp (renamed from src/gpu/gl/win/SkCreatePlatformGLContext_win.cpp) | 54 |
11 files changed, 164 insertions, 254 deletions
diff --git a/src/gpu/gl/SkGLContext.cpp b/src/gpu/gl/SkGLContextHelper.cpp index 92f65cd924..03b70c38f7 100644 --- a/src/gpu/gl/SkGLContext.cpp +++ b/src/gpu/gl/SkGLContextHelper.cpp @@ -5,17 +5,17 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -#include "gl/SkGLContext.h" +#include "gl/SkGLContextHelper.h" #include "GrGLUtil.h" -SkGLContext::SkGLContext() +SkGLContextHelper::SkGLContextHelper() : fFBO(0) , fColorBufferID(0) , fDepthStencilBufferID(0) , fGL(NULL) { } -SkGLContext::~SkGLContext() { +SkGLContextHelper::~SkGLContextHelper() { if (fGL) { // TODO: determine why DeleteFramebuffers is generating a GL error in tests @@ -27,7 +27,7 @@ SkGLContext::~SkGLContext() { SkSafeUnref(fGL); } -bool SkGLContext::init(GrGLStandard forcedGpuAPI, int width, +bool SkGLContextHelper::init(GrGLStandard forcedGpuAPI, int width, int height) { if (fGL) { fGL->unref(); @@ -135,7 +135,7 @@ bool SkGLContext::init(GrGLStandard forcedGpuAPI, int width, return false; } -void SkGLContext::testAbandon() { +void SkGLContextHelper::testAbandon() { if (fGL) { fGL->abandon(); } diff --git a/src/gpu/gl/angle/SkANGLEGLContext.cpp b/src/gpu/gl/angle/SkANGLEGLContext.cpp index 4914ba5533..81fccebba0 100644 --- a/src/gpu/gl/angle/SkANGLEGLContext.cpp +++ b/src/gpu/gl/angle/SkANGLEGLContext.cpp @@ -8,6 +8,21 @@ #include "gl/SkANGLEGLContext.h" +SkANGLEGLContext::AutoContextRestore::AutoContextRestore() { + fOldEGLContext = eglGetCurrentContext(); + fOldDisplay = eglGetCurrentDisplay(); + fOldSurface = eglGetCurrentSurface(EGL_DRAW); + +} + +SkANGLEGLContext::AutoContextRestore::~AutoContextRestore() { + if (fOldDisplay) { + eglMakeCurrent(fOldDisplay, fOldSurface, fOldSurface, fOldEGLContext); + } +} + +/////////////////////////////////////////////////////////////////////////////// + SkANGLEGLContext::SkANGLEGLContext() : fContext(EGL_NO_CONTEXT) , fDisplay(EGL_NO_DISPLAY) diff --git a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp index 287a43fad0..4bd8f99e22 100644 --- a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp +++ b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp @@ -819,7 +819,7 @@ public: // The solution to this is probably to alter SkDebugGlContext's // "makeCurrent" method to make a call like "makeCurrent(this)" to // the debug GL interface (assuming that the application will create - // multiple SkGLContext's) to let it switch between the active + // multiple SkGLContextHelper's) to let it switch between the active // context. Everything in the GrDebugGL object would then need to be // moved to a GrContextObj and the GrDebugGL object would just switch // between them. Note that this approach would also require that diff --git a/src/gpu/gl/egl/SkCreatePlatformGLContext_egl.cpp b/src/gpu/gl/egl/SkNativeGLContext_egl.cpp index dac2d11f16..d4d7219b5b 100644 --- a/src/gpu/gl/egl/SkCreatePlatformGLContext_egl.cpp +++ b/src/gpu/gl/egl/SkNativeGLContext_egl.cpp @@ -5,42 +5,34 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -#include "gl/SkGLContext.h" +#include "gl/SkNativeGLContext.h" -#include <GLES2/gl2.h> -#include <EGL/egl.h> +SkNativeGLContext::AutoContextRestore::AutoContextRestore() { + fOldEGLContext = eglGetCurrentContext(); + fOldDisplay = eglGetCurrentDisplay(); + fOldSurface = eglGetCurrentSurface(EGL_DRAW); -namespace { - -class EGLGLContext : public SkGLContext { -public: - EGLGLContext(); - - virtual ~EGLGLContext(); +} - virtual void makeCurrent() const SK_OVERRIDE; - virtual void swapBuffers() const SK_OVERRIDE; -protected: - virtual const GrGLInterface* createGLContext(GrGLStandard forcedGpuAPI) SK_OVERRIDE; - virtual void destroyGLContext() SK_OVERRIDE; +SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { + if (fOldDisplay) { + eglMakeCurrent(fOldDisplay, fOldSurface, fOldSurface, fOldEGLContext); + } +} -private: - EGLContext fContext; - EGLDisplay fDisplay; - EGLSurface fSurface; -}; +/////////////////////////////////////////////////////////////////////////////// -EGLGLContext::EGLGLContext() +SkNativeGLContext::SkNativeGLContext() : fContext(EGL_NO_CONTEXT) , fDisplay(EGL_NO_DISPLAY) , fSurface(EGL_NO_SURFACE) { } -EGLGLContext::~EGLGLContext() { +SkNativeGLContext::~SkNativeGLContext() { this->destroyGLContext(); } -void EGLGLContext::destroyGLContext() { +void SkNativeGLContext::destroyGLContext() { if (fDisplay) { eglMakeCurrent(fDisplay, 0, 0, 0); @@ -59,7 +51,7 @@ void EGLGLContext::destroyGLContext() { } } -const GrGLInterface* EGLGLContext::createGLContext(GrGLStandard forcedGpuAPI) { +const GrGLInterface* SkNativeGLContext::createGLContext(GrGLStandard forcedGpuAPI) { static const EGLint kEGLContextAttribsForOpenGL[] = { EGL_NONE }; @@ -177,21 +169,14 @@ const GrGLInterface* EGLGLContext::createGLContext(GrGLStandard forcedGpuAPI) { return interface; } -void EGLGLContext::makeCurrent() const { +void SkNativeGLContext::makeCurrent() const { if (!eglMakeCurrent(fDisplay, fSurface, fSurface, fContext)) { SkDebugf("Could not set the context.\n"); } } -void EGLGLContext::swapBuffers() const { +void SkNativeGLContext::swapBuffers() const { if (!eglSwapBuffers(fDisplay, fSurface)) { SkDebugf("Could not complete eglSwapBuffers.\n"); } } - -} // anonymous namespace - -SkGLContext* CreatePlatformGLContext() { - return SkNEW(EGLGLContext); -} - diff --git a/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp b/src/gpu/gl/glx/SkNativeGLContext_glx.cpp index 794cdb6f03..bd130b545c 100644 --- a/src/gpu/gl/glx/SkCreatePlatformGLContext_glx.cpp +++ b/src/gpu/gl/glx/SkNativeGLContext_glx.cpp @@ -5,38 +5,25 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -#include "gl/SkGLContext.h" +#include "gl/SkNativeGLContext.h" -#include <X11/Xlib.h> -#include <GL/glx.h> #include <GL/glu.h> -namespace { - /* Note: Skia requires glx 1.3 or newer */ -/* This struct is taken from a mesa demo. Please update as required */ -static const struct { int major, minor; } gl_versions[] = { - {1, 0}, - {1, 1}, - {1, 2}, - {1, 3}, - {1, 4}, - {1, 5}, - {2, 0}, - {2, 1}, - {3, 0}, - {3, 1}, - {3, 2}, - {3, 3}, - {4, 0}, - {4, 1}, - {4, 2}, - {4, 3}, - {4, 4}, - {0, 0} /* end of list */ -}; -#define NUM_GL_VERSIONS SK_ARRAY_COUNT(gl_versions) +SkNativeGLContext::AutoContextRestore::AutoContextRestore() { + fOldGLXContext = glXGetCurrentContext(); + fOldDisplay = glXGetCurrentDisplay(); + fOldDrawable = glXGetCurrentDrawable(); +} + +SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { + if (fOldDisplay) { + glXMakeCurrent(fOldDisplay, fOldDrawable, fOldGLXContext); + } +} + +/////////////////////////////////////////////////////////////////////////////// static bool ctxErrorOccurred = false; static int ctxErrorHandler(Display *dpy, XErrorEvent *ev) { @@ -44,37 +31,18 @@ static int ctxErrorHandler(Display *dpy, XErrorEvent *ev) { return 0; } -class GLXGLContext : public SkGLContext { -public: - GLXGLContext(); - - virtual ~GLXGLContext(); - - virtual void makeCurrent() const SK_OVERRIDE; - virtual void swapBuffers() const SK_OVERRIDE; -protected: - virtual const GrGLInterface* createGLContext(GrGLStandard forcedGpuAPI) SK_OVERRIDE; - virtual void destroyGLContext() SK_OVERRIDE; - -private: - GLXContext fContext; - Display* fDisplay; - Pixmap fPixmap; - GLXPixmap fGlxPixmap; -}; - -GLXGLContext::GLXGLContext() +SkNativeGLContext::SkNativeGLContext() : fContext(NULL) , fDisplay(NULL) , fPixmap(0) , fGlxPixmap(0) { } -GLXGLContext::~GLXGLContext() { +SkNativeGLContext::~SkNativeGLContext() { this->destroyGLContext(); } -void GLXGLContext::destroyGLContext() { +void SkNativeGLContext::destroyGLContext() { if (fDisplay) { glXMakeCurrent(fDisplay, 0, 0); @@ -98,7 +66,7 @@ void GLXGLContext::destroyGLContext() { } } -const GrGLInterface* GLXGLContext::createGLContext(GrGLStandard forcedGpuAPI) { +const GrGLInterface* SkNativeGLContext::createGLContext(GrGLStandard forcedGpuAPI) { fDisplay = XOpenDisplay(0); if (!fDisplay) { @@ -309,18 +277,12 @@ const GrGLInterface* GLXGLContext::createGLContext(GrGLStandard forcedGpuAPI) { return interface; } -void GLXGLContext::makeCurrent() const { +void SkNativeGLContext::makeCurrent() const { if (!glXMakeCurrent(fDisplay, fGlxPixmap, fContext)) { SkDebugf("Could not set the context.\n"); } } -void GLXGLContext::swapBuffers() const { +void SkNativeGLContext::swapBuffers() const { glXSwapBuffers(fDisplay, fGlxPixmap); } - -} // anonymous namespace - -SkGLContext* SkCreatePlatformGLContext() { - return SkNEW(GLXGLContext); -} diff --git a/src/gpu/gl/iOS/SkCreatePlatformGLContext_iOS.mm b/src/gpu/gl/iOS/SkNativeGLContext_iOS.mm index ce44dd37ee..1bdaf70f1c 100644 --- a/src/gpu/gl/iOS/SkCreatePlatformGLContext_iOS.mm +++ b/src/gpu/gl/iOS/SkNativeGLContext_iOS.mm @@ -6,38 +6,36 @@ * found in the LICENSE file. */ -#include "gl/SkGLContext.h" +#include "gl/SkNativeGLContext.h" #import <OpenGLES/EAGL.h> #define EAGLCTX ((EAGLContext*)(fEAGLContext)) -namespace { - -class IOSNativeGLContext : public SkNativeGLContext { -public: - IOSNativeGLContext(); - - virtual ~IOSNativeGLContext(); +SkNativeGLContext::AutoContextRestore::AutoContextRestore() { + fEAGLContext = [EAGLContext currentContext]; + if (EAGLCTX) { + [EAGLCTX retain]; + } +} - virtual void makeCurrent() const SK_OVERRIDE; - virtual void swapBuffers() const SK_OVERRIDE; -protected: - virtual const GrGLInterface* createGLContext(GrGLStandard forcedGpuAPI) SK_OVERRIDE; - virtual void destroyGLContext() SK_OVERRIDE; +SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { + if (EAGLCTX) { + [EAGLContext setCurrentContext:EAGLCTX]; + [EAGLCTX release]; + } +} -private: - void* fEAGLContext; -}; +/////////////////////////////////////////////////////////////////////////////// -IOSNativeGLContext::IOSNativeGLContext() +SkNativeGLContext::SkNativeGLContext() : fEAGLContext(NULL) { } -IOSNativeGLContext::~IOSNativeGLContext() { +SkNativeGLContext::~SkNativeGLContext() { this->destroyGLContext(); } -void IOSNativeGLContext::destroyGLContext() { +void SkNativeGLContext::destroyGLContext() { if (fEAGLContext) { if ([EAGLContext currentContext] == EAGLCTX) { [EAGLContext setCurrentContext:nil]; @@ -47,7 +45,7 @@ void IOSNativeGLContext::destroyGLContext() { } } -const GrGLInterface* IOSNativeGLContext::createGLContext(GrGLStandard forcedGpuAPI) { +const GrGLInterface* SkNativeGLContext::createGLContext(GrGLStandard forcedGpuAPI) { if (kGL_GrGLStandard == forcedGpuAPI) { return NULL; } @@ -64,18 +62,10 @@ const GrGLInterface* IOSNativeGLContext::createGLContext(GrGLStandard forcedGpuA return interface; } -void IOSNativeGLContext::makeCurrent() const { +void SkNativeGLContext::makeCurrent() const { if (![EAGLContext setCurrentContext:EAGLCTX]) { SkDebugf("Could not set the context.\n"); } } -void IOSNativeGLContext::swapBuffers() const { } - -} // anonymous namespace - - -SkNativeGLContext* SkCreatePlatformGLContext() { - return SkNEW(IOSNativeGLContext); -} - +void SkNativeGLContext::swapBuffers() const { } diff --git a/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp b/src/gpu/gl/mac/SkNativeGLContext_mac.cpp index 35ec276296..f63471c16a 100644 --- a/src/gpu/gl/mac/SkCreatePlatformGLContext_mac.cpp +++ b/src/gpu/gl/mac/SkNativeGLContext_mac.cpp @@ -5,43 +5,34 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -#include "gl/SkGLContext.h" +#include "gl/SkNativeGLContext.h" #include "AvailabilityMacros.h" -#include <OpenGL/OpenGL.h> - -namespace { -class MacGLContext : public SkGLContext { -public: - MacGLContext(); - - virtual ~MacGLContext(); +SkNativeGLContext::AutoContextRestore::AutoContextRestore() { + fOldCGLContext = CGLGetCurrentContext(); +} - virtual void makeCurrent() const SK_OVERRIDE; - virtual void swapBuffers() const SK_OVERRIDE; -protected: - virtual const GrGLInterface* createGLContext(GrGLStandard forcedGpuAPI) SK_OVERRIDE; - virtual void destroyGLContext() SK_OVERRIDE; +SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { + CGLSetCurrentContext(fOldCGLContext); +} -private: - CGLContextObj fContext; -}; +/////////////////////////////////////////////////////////////////////////////// -MacGLContext::MacGLContext() +SkNativeGLContext::SkNativeGLContext() : fContext(NULL) { } -MacGLContext::~MacGLContext() { +SkNativeGLContext::~SkNativeGLContext() { this->destroyGLContext(); } -void MacGLContext::destroyGLContext() { +void SkNativeGLContext::destroyGLContext() { if (fContext) { CGLReleaseContext(fContext); } } -const GrGLInterface* MacGLContext::createGLContext(GrGLStandard forcedGpuAPI) { +const GrGLInterface* SkNativeGLContext::createGLContext(GrGLStandard forcedGpuAPI) { SkASSERT(NULL == fContext); if (kGLES_GrGLStandard == forcedGpuAPI) { return NULL; @@ -84,16 +75,10 @@ const GrGLInterface* MacGLContext::createGLContext(GrGLStandard forcedGpuAPI) { return interface; } -void MacGLContext::makeCurrent() const { +void SkNativeGLContext::makeCurrent() const { CGLSetCurrentContext(fContext); } -void MacGLContext::swapBuffers() const { +void SkNativeGLContext::swapBuffers() const { CGLFlushDrawable(fContext); } - -} // anonymous namespace - -SkGLContext* SkCreatePlatformGLContext() { - return SkNEW(MacGLContext); -} diff --git a/src/gpu/gl/mesa/SkMesaGLContext.cpp b/src/gpu/gl/mesa/SkMesaGLContext.cpp index 8c339c7fac..31402c5a3c 100644 --- a/src/gpu/gl/mesa/SkMesaGLContext.cpp +++ b/src/gpu/gl/mesa/SkMesaGLContext.cpp @@ -11,6 +11,24 @@ #include "gl/SkMesaGLContext.h" #include "gl/GrGLDefines.h" +SkMesaGLContext::AutoContextRestore::AutoContextRestore() { + fOldContext = (Context)OSMesaGetCurrentContext(); + if (fOldContext) { + OSMesaGetColorBuffer((OSMesaContext)fOldContext, + &fOldWidth, &fOldHeight, + &fOldFormat, &fOldImage); + } +} + +SkMesaGLContext::AutoContextRestore::~AutoContextRestore() { + if (fOldContext) { + OSMesaMakeCurrent((OSMesaContext)fOldContext, fOldImage, + fOldFormat, fOldWidth, fOldHeight); + } +} + +/////////////////////////////////////////////////////////////////////////////// + SkMesaGLContext::SkMesaGLContext() : fContext(static_cast<Context>(NULL)) , fImage(NULL) { diff --git a/src/gpu/gl/nacl/SkCreatePlatformGLContext_nacl.cpp b/src/gpu/gl/nacl/SkCreatePlatformGLContext_nacl.cpp deleted file mode 100644 index 5e4b2e4917..0000000000 --- a/src/gpu/gl/nacl/SkCreatePlatformGLContext_nacl.cpp +++ /dev/null @@ -1,60 +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. - */ -#include "gl/SkGLContext.h" - -#include <GLES2/gl2.h> -#include <EGL/egl.h> - -namespace { -class NACLGLContext : public SkGLContext { -public: - SkGLContextEGL(); - - virtual ~NACLGLContext(); - - virtual void makeCurrent() const SK_OVERRIDE; - virtual void swapBuffers() const SK_OVERRIDE; -protected: - virtual const GrGLInterface* createGLContext(GrGLStandard forcedGpuAPI) SK_OVERRIDE; - virtual void destroyGLContext() SK_OVERRIDE; - -private: - EGLContext fContext; - EGLDisplay fDisplay; - EGLSurface fSurface; -}; - -NACLGLContext::NACLGLContext() - : fContext(NULL) - , fDisplay(NULL) -{ -} - -NACLGLContext::~NACLGLContext() { - this->destroyGLContext(); -} - -void NACLGLContext::destroyGLContext() { -} - -const GrGLInterface* NACLGLContext::createGLContext(GrGLStandard forcedGpuAPI) { - return NULL; -} - -void NACLGLContext::makeCurrent() const { -} - -void NACLGLContext::swapBuffers() const { -} - -} // anonymous namespace - -NACLGLContext* SkCreatePlatformGLContext() { - return SkNEW(NACLGLContext); -} - diff --git a/src/gpu/gl/nacl/SkNativeGLContext_nacl.cpp b/src/gpu/gl/nacl/SkNativeGLContext_nacl.cpp new file mode 100644 index 0000000000..334be1d954 --- /dev/null +++ b/src/gpu/gl/nacl/SkNativeGLContext_nacl.cpp @@ -0,0 +1,37 @@ + +/* + * Copyright 2012 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "gl/SkNativeGLContext.h" + +SkNativeGLContext::AutoContextRestore::AutoContextRestore() { +} + +SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { +} + +SkNativeGLContext::SkNativeGLContext() + : fContext(NULL) + , fDisplay(NULL) +{ +} + +SkNativeGLContext::~SkNativeGLContext() { + this->destroyGLContext(); +} + +void SkNativeGLContext::destroyGLContext() { +} + +const GrGLInterface* SkNativeGLContext::createGLContext(GrGLStandard forcedGpuAPI) { + return NULL; +} + +void SkNativeGLContext::makeCurrent() const { +} + +void SkNativeGLContext::swapBuffers() const { +} diff --git a/src/gpu/gl/win/SkCreatePlatformGLContext_win.cpp b/src/gpu/gl/win/SkNativeGLContext_win.cpp index d362556a4e..ab66ba4d55 100644 --- a/src/gpu/gl/win/SkCreatePlatformGLContext_win.cpp +++ b/src/gpu/gl/win/SkNativeGLContext_win.cpp @@ -6,51 +6,36 @@ * found in the LICENSE file. */ -#include "gl/SkGLContext.h" - -#include <windows.h> -#include <GL/GL.h> -#include "SkWGL.h" +#include "gl/SkNativeGLContext.h" #define WIN32_LEAN_AND_MEAN #include <windows.h> -namespace { - -class WinGLContext : public SkGLContext { -public: - WinGLContext(); - - virtual ~WinGLContext(); +SkNativeGLContext::AutoContextRestore::AutoContextRestore() { + fOldHGLRC = wglGetCurrentContext(); + fOldHDC = wglGetCurrentDC(); +} - virtual void makeCurrent() const SK_OVERRIDE; - virtual void swapBuffers() const SK_OVERRIDE; -protected: - virtual const GrGLInterface* createGLContext(GrGLStandard forcedGpuAPI) SK_OVERRIDE; - virtual void destroyGLContext() SK_OVERRIDE; +SkNativeGLContext::AutoContextRestore::~AutoContextRestore() { + wglMakeCurrent(fOldHDC, fOldHGLRC); +} -private: - HWND fWindow; - HDC fDeviceContext; - HGLRC fGlRenderContext; - static ATOM gWC; - SkWGLPbufferContext* fPbufferContext; -}; +/////////////////////////////////////////////////////////////////////////////// -ATOM WinGLContext::gWC = 0; +ATOM SkNativeGLContext::gWC = 0; -WinGLContext::WinGLContext() +SkNativeGLContext::SkNativeGLContext() : fWindow(NULL) , fDeviceContext(NULL) , fGlRenderContext(0) , fPbufferContext(NULL) { } -WinGLContext::~WinGLContext() { +SkNativeGLContext::~SkNativeGLContext() { this->destroyGLContext(); } -void WinGLContext::destroyGLContext() { +void SkNativeGLContext::destroyGLContext() { SkSafeSetNull(fPbufferContext); if (fGlRenderContext) { wglDeleteContext(fGlRenderContext); @@ -66,7 +51,7 @@ void WinGLContext::destroyGLContext() { } } -const GrGLInterface* WinGLContext::createGLContext(GrGLStandard forcedGpuAPI) { +const GrGLInterface* SkNativeGLContext::createGLContext(GrGLStandard forcedGpuAPI) { HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL); if (!gWC) { @@ -149,7 +134,7 @@ const GrGLInterface* WinGLContext::createGLContext(GrGLStandard forcedGpuAPI) { return interface; } -void WinGLContext::makeCurrent() const { +void SkNativeGLContext::makeCurrent() const { HDC dc; HGLRC glrc; @@ -166,7 +151,7 @@ void WinGLContext::makeCurrent() const { } } -void WinGLContext::swapBuffers() const { +void SkNativeGLContext::swapBuffers() const { HDC dc; if (NULL == fPbufferContext) { @@ -178,10 +163,3 @@ void WinGLContext::swapBuffers() const { SkDebugf("Could not complete SwapBuffers.\n"); } } - -} // anonymous namespace - -SkGLContext* SkCreatePlatformGLContext() { - return SkNEW(WinGLContext); -} - |