aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-10-20 21:09:45 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-10-20 21:09:45 +0000
commitd47fafe05743d61958397bcf7a4b2bf66d778e1d (patch)
treefac9722ac2921f86840813c7d0792be28851a7ca /include/gpu
parentffa11bbbedd201899eb93bf05089c511f53d5c2a (diff)
Add test that validates GrGLInterfaces
Review URL: http://codereview.appspot.com/5304048/ git-svn-id: http://skia.googlecode.com/svn/trunk@2510 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/gpu')
-rw-r--r--include/gpu/GrGLInterface.h9
-rw-r--r--include/gpu/SkGLContext.h3
-rw-r--r--include/gpu/SkMesaGLContext.h19
-rw-r--r--include/gpu/SkNativeGLContext.h18
4 files changed, 47 insertions, 2 deletions
diff --git a/include/gpu/GrGLInterface.h b/include/gpu/GrGLInterface.h
index b3e0cf191b..20b74ab21a 100644
--- a/include/gpu/GrGLInterface.h
+++ b/include/gpu/GrGLInterface.h
@@ -69,8 +69,17 @@ struct GrGLInterface;
const GrGLInterface* GrGLDefaultInterface();
+/**
+ * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows,
+ * GLX on linux, AGL on Mac). On platforms that have context-specific function
+ * pointers for GL extensions (e.g. windows) the returned interface is only
+ * valid for the context that was current at creation.
+ */
const GrGLInterface* GrGLCreateNativeInterface();
+/**
+ * Creates a GrGLInterface for an OSMesa context.
+ */
const GrGLInterface* GrGLCreateMesaInterface();
typedef unsigned int GrGLenum;
diff --git a/include/gpu/SkGLContext.h b/include/gpu/SkGLContext.h
index d36a9f9d43..f92a7700c4 100644
--- a/include/gpu/SkGLContext.h
+++ b/include/gpu/SkGLContext.h
@@ -20,6 +20,9 @@ public:
SkGLContext();
virtual ~SkGLContext();
+ /**
+ * Initializes the context and makes it current.
+ */
bool init(const int width, const int height);
int getFBOID() const { return fFBO; }
diff --git a/include/gpu/SkMesaGLContext.h b/include/gpu/SkMesaGLContext.h
index 4351f66f33..b7578f367b 100644
--- a/include/gpu/SkMesaGLContext.h
+++ b/include/gpu/SkMesaGLContext.h
@@ -13,6 +13,9 @@
#if SK_MESA
class SkMesaGLContext : public SkGLContext {
+private:
+ typedef intptr_t Context;
+
public:
SkMesaGLContext();
@@ -20,16 +23,28 @@ public:
virtual void makeCurrent() const SK_OVERRIDE;
+ class AutoContextRestore {
+ public:
+ AutoContextRestore();
+ ~AutoContextRestore();
+
+ private:
+ Context fOldContext;
+ GLint fOldWidth;
+ GLint fOldHeight;
+ GLint fOldFormat;
+ void* fOldImage;
+ };
+
protected:
virtual const GrGLInterface* createGLContext() SK_OVERRIDE;
void destroyGLContext() SK_OVERRIDE;
private:
- typedef intptr_t Context;
Context fContext;
GrGLubyte *fImage;
};
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/include/gpu/SkNativeGLContext.h b/include/gpu/SkNativeGLContext.h
index 512e66a3ab..f2037cfb79 100644
--- a/include/gpu/SkNativeGLContext.h
+++ b/include/gpu/SkNativeGLContext.h
@@ -28,6 +28,24 @@ public:
virtual void makeCurrent() const SK_OVERRIDE;
+ class AutoContextRestore {
+ public:
+ AutoContextRestore();
+ ~AutoContextRestore();
+
+ private:
+ #if defined(SK_BUILD_FOR_MAC)
+ AGLContext fOldAGLContext;
+ #elif defined(SK_BUILD_FOR_UNIX)
+ GLXContext fOldGLXContext;
+ Display* fOldDisplay;
+ GLXDrawable fOldDrawable;
+ #elif defined(SK_BUILD_FOR_WIN32)
+ HDC fOldHDC;
+ HGLRC fOldHGLRC;
+ #endif
+ };
+
protected:
virtual const GrGLInterface* createGLContext() SK_OVERRIDE;
void destroyGLContext() SK_OVERRIDE;