Index: include/utils/SkWGL.h |
diff --git a/include/utils/SkWGL.h b/include/utils/SkWGL.h |
index 5272f17c87088b58ef3148824c0ca82de962e8c9..d502eb0aa70259082c124177f8760a057f13182b 100644 |
--- a/include/utils/SkWGL.h |
+++ b/include/utils/SkWGL.h |
@@ -56,6 +56,8 @@ |
#define SK_ERROR_INVALID_VERSION 0x2095 |
#define SK_ERROR_INVALID_PROFILE 0x2096 |
+DECLARE_HANDLE(HPBUFFER); |
+ |
class SkWGLExtensions { |
public: |
SkWGLExtensions(); |
@@ -73,6 +75,13 @@ public: |
BOOL getPixelFormatAttribfv(HDC hdc, int, int, UINT, const int*, FLOAT*) const; |
HGLRC createContextAttribs(HDC, HGLRC, const int *) const; |
+ BOOL swapInterval(int interval) const; |
+ |
+ HPBUFFER createPbuffer(HDC, int , int, int, const int*) const; |
+ HDC getPbufferDC(HPBUFFER) const; |
+ int releasePbufferDC(HPBUFFER, HDC) const; |
+ BOOL destroyPbuffer(HPBUFFER) const; |
+ |
/** |
* WGL doesn't have precise rules for the ordering of formats returned |
* by wglChoosePixelFormat. This function helps choose among the set of |
@@ -89,19 +98,29 @@ public: |
int selectFormat(const int formats[], |
int formatCount, |
HDC dc, |
- int desiredSampleCount); |
+ int desiredSampleCount) const; |
private: |
- typedef const char* (WINAPI *GetExtensionsStringProc)(HDC hdc); |
- typedef BOOL (WINAPI *ChoosePixelFormatProc)(HDC hdc, const int *, const FLOAT *, UINT, int *, UINT *); |
+ typedef const char* (WINAPI *GetExtensionsStringProc)(HDC); |
+ typedef BOOL (WINAPI *ChoosePixelFormatProc)(HDC, const int *, const FLOAT *, UINT, int *, UINT *); |
typedef BOOL (WINAPI *GetPixelFormatAttribivProc)(HDC, int, int, UINT, const int*, int*); |
- typedef BOOL (WINAPI *GetPixelFormatAttribfvProc)(HDC hdc, int, int, UINT, const int*, FLOAT*); |
- typedef HGLRC (WINAPI *CreateContextAttribsProc)(HDC hDC, HGLRC, const int *); |
+ typedef BOOL (WINAPI *GetPixelFormatAttribfvProc)(HDC, int, int, UINT, const int*, FLOAT*); |
+ typedef HGLRC (WINAPI *CreateContextAttribsProc)(HDC, HGLRC, const int *); |
+ typedef BOOL (WINAPI* SwapIntervalProc)(int); |
+ typedef HPBUFFER (WINAPI* CreatePbufferProc)(HDC, int , int, int, const int*); |
+ typedef HDC (WINAPI* GetPbufferDCProc)(HPBUFFER); |
+ typedef int (WINAPI* ReleasePbufferDCProc)(HPBUFFER, HDC); |
+ typedef BOOL (WINAPI* DestroyPbufferProc)(HPBUFFER); |
GetExtensionsStringProc fGetExtensionsString; |
ChoosePixelFormatProc fChoosePixelFormat; |
GetPixelFormatAttribfvProc fGetPixelFormatAttribfv; |
GetPixelFormatAttribivProc fGetPixelFormatAttribiv; |
CreateContextAttribsProc fCreateContextAttribs; |
+ SwapIntervalProc fSwapInterval; |
+ CreatePbufferProc fCreatePbuffer; |
+ GetPbufferDCProc fGetPbufferDC; |
+ ReleasePbufferDCProc fReleasePbufferDC; |
+ DestroyPbufferProc fDestroyPbuffer; |
}; |
enum SkWGLContextRequest { |
@@ -122,4 +141,28 @@ enum SkWGLContextRequest { |
*/ |
HGLRC SkCreateWGLContext(HDC dc, int msaaSampleCount, SkWGLContextRequest context); |
+/** |
+ * Helper class for creating a pbuffer context and deleting all the handles when finished. This |
+ * requires that a device context has been created. However, the pbuffer gets its own device |
+ * context. The original device context can be released once the pbuffer context is created. |
+ */ |
+class SkWGLPbufferContext : public SkRefCnt { |
+public: |
+ static SkWGLPbufferContext* Create(HDC parentDC, int msaaSampleCount, |
+ SkWGLContextRequest contextType); |
+ |
+ virtual ~SkWGLPbufferContext(); |
+ |
+ HDC getDC() const { return fDC; } |
+ HGLRC getGLRC() const { return fGLRC; } |
+ |
+private: |
+ SkWGLPbufferContext(HPBUFFER pbuffer, HDC dc, HGLRC glrc); |
+ |
+ HPBUFFER fPbuffer; |
+ HDC fDC; |
+ HGLRC fGLRC; |
+ SkWGLExtensions fExtensions; |
+}; |
+ |
#endif |