aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2014-10-08 04:45:09 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-10-08 04:45:10 -0700
commit10805961ce424868e8315e00f6dbeeaa62d466ac (patch)
tree87fbeec3c52176c1794c25ae639adb38c6bcfa60 /src/gpu
parenta5ee45ce9daba663c28ba5f6634af93702aecd96 (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.cpp15
-rw-r--r--src/gpu/gl/debug/GrGLCreateDebugInterface.cpp2
-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.cpp18
-rw-r--r--src/gpu/gl/nacl/SkCreatePlatformGLContext_nacl.cpp60
-rw-r--r--src/gpu/gl/nacl/SkNativeGLContext_nacl.cpp37
-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);
-}
-