summaryrefslogtreecommitdiffstats
path: root/gfx/gl/WGLLibrary.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/gl/WGLLibrary.h')
-rw-r--r--gfx/gl/WGLLibrary.h131
1 files changed, 131 insertions, 0 deletions
diff --git a/gfx/gl/WGLLibrary.h b/gfx/gl/WGLLibrary.h
new file mode 100644
index 000000000..3c261e10d
--- /dev/null
+++ b/gfx/gl/WGLLibrary.h
@@ -0,0 +1,131 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "GLContextTypes.h"
+#include <windows.h>
+
+struct PRLibrary;
+
+namespace mozilla {
+namespace gl {
+
+class WGLLibrary
+{
+public:
+ WGLLibrary()
+ : mInitialized(false)
+ , mOGLLibrary(nullptr)
+ , mHasRobustness(false)
+ , mHasDXInterop(false)
+ , mHasDXInterop2(false)
+ , mWindow (0)
+ , mWindowDC(0)
+ , mWindowGLContext(0)
+ , mWindowPixelFormat(0)
+ {}
+
+ typedef HGLRC (GLAPIENTRY * PFNWGLCREATECONTEXTPROC) (HDC);
+ PFNWGLCREATECONTEXTPROC fCreateContext;
+ typedef BOOL (GLAPIENTRY * PFNWGLDELETECONTEXTPROC) (HGLRC);
+ PFNWGLDELETECONTEXTPROC fDeleteContext;
+ typedef BOOL (GLAPIENTRY * PFNWGLMAKECURRENTPROC) (HDC, HGLRC);
+ PFNWGLMAKECURRENTPROC fMakeCurrent;
+ typedef PROC (GLAPIENTRY * PFNWGLGETPROCADDRESSPROC) (LPCSTR);
+ PFNWGLGETPROCADDRESSPROC fGetProcAddress;
+ typedef HGLRC (GLAPIENTRY * PFNWGLGETCURRENTCONTEXT) (void);
+ PFNWGLGETCURRENTCONTEXT fGetCurrentContext;
+ typedef HDC (GLAPIENTRY * PFNWGLGETCURRENTDC) (void);
+ PFNWGLGETCURRENTDC fGetCurrentDC;
+ typedef BOOL (GLAPIENTRY * PFNWGLSHARELISTS) (HGLRC oldContext, HGLRC newContext);
+ PFNWGLSHARELISTS fShareLists;
+
+ typedef HANDLE (WINAPI * PFNWGLCREATEPBUFFERPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList);
+ PFNWGLCREATEPBUFFERPROC fCreatePbuffer;
+ typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERPROC) (HANDLE hPbuffer);
+ PFNWGLDESTROYPBUFFERPROC fDestroyPbuffer;
+ typedef HDC (WINAPI * PFNWGLGETPBUFFERDCPROC) (HANDLE hPbuffer);
+ PFNWGLGETPBUFFERDCPROC fGetPbufferDC;
+
+ typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEPROC) (HANDLE hPbuffer, int iBuffer);
+ PFNWGLBINDTEXIMAGEPROC fBindTexImage;
+ typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEPROC) (HANDLE hPbuffer, int iBuffer);
+ PFNWGLRELEASETEXIMAGEPROC fReleaseTexImage;
+
+ typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATPROC) (HDC hdc, const int* piAttribIList, const FLOAT* pfAttribFList, UINT nMaxFormats, int* piFormats, UINT* nNumFormats);
+ PFNWGLCHOOSEPIXELFORMATPROC fChoosePixelFormat;
+ typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int* piValues);
+ PFNWGLGETPIXELFORMATATTRIBIVPROC fGetPixelFormatAttribiv;
+
+ typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGPROC) (HDC hdc);
+ PFNWGLGETEXTENSIONSSTRINGPROC fGetExtensionsString;
+
+ typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSPROC) (HDC hdc, HGLRC hShareContext, const int* attribList);
+ PFNWGLCREATECONTEXTATTRIBSPROC fCreateContextAttribs;
+
+ // WGL_NV_DX_interop:
+ // BOOL wglDXSetResourceShareHandleNV(void* dxObject, HANDLE shareHandle);
+ typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLEPROC) (void* dxObject, HANDLE shareHandle);
+ PFNWGLDXSETRESOURCESHAREHANDLEPROC fDXSetResourceShareHandle;
+
+ // HANDLE wglDXOpenDeviceNV(void* dxDevice);
+ typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICEPROC) (void* dxDevice);
+ PFNWGLDXOPENDEVICEPROC fDXOpenDevice;
+
+ // BOOL wglDXCloseDeviceNV(HANDLE hDevice);
+ typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICEPROC) (HANDLE hDevice);
+ PFNWGLDXCLOSEDEVICEPROC fDXCloseDevice;
+
+ // HANDLE wglDXRegisterObjectNV(HANDLE hDevice, void* dxObject, GLuint name, GLenum type, GLenum access);
+ typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTPROC) (HANDLE hDevice, void* dxObject, GLuint name, GLenum type, GLenum access);
+ PFNWGLDXREGISTEROBJECTPROC fDXRegisterObject;
+
+ // BOOL wglDXUnregisterObjectNV(HANDLE hDevice, HANDLE hObject);
+ typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECT) (HANDLE hDevice, HANDLE hObject);
+ PFNWGLDXUNREGISTEROBJECT fDXUnregisterObject;
+
+ // BOOL wglDXObjectAccessNV(HANDLE hObject, GLenum access);
+ typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSPROC) (HANDLE hObject, GLenum access);
+ PFNWGLDXOBJECTACCESSPROC fDXObjectAccess;
+
+ // BOOL wglDXLockObjectsNV(HANDLE hDevice, GLint count, HANDLE* hObjects);
+ typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSPROC) (HANDLE hDevice, GLint count, HANDLE* hObjects);
+ PFNWGLDXLOCKOBJECTSPROC fDXLockObjects;
+
+ // BOOL wglDXUnlockObjectsNV(HANDLE hDevice, GLint count, HANDLE* hObjects);
+ typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSPROC) (HANDLE hDevice, GLint count, HANDLE* hObjects);
+ PFNWGLDXUNLOCKOBJECTSPROC fDXUnlockObjects;
+
+ bool EnsureInitialized();
+ HWND CreateDummyWindow(HDC* aWindowDC = nullptr);
+
+ bool HasRobustness() const { return mHasRobustness; }
+ bool HasDXInterop() const { return mHasDXInterop; }
+ bool HasDXInterop2() const { return mHasDXInterop2; }
+ bool IsInitialized() const { return mInitialized; }
+ HWND GetWindow() const { return mWindow; }
+ HDC GetWindowDC() const {return mWindowDC; }
+ HGLRC GetWindowGLContext() const {return mWindowGLContext; }
+ int GetWindowPixelFormat() const { return mWindowPixelFormat; }
+ PRLibrary* GetOGLLibrary() { return mOGLLibrary; }
+
+private:
+ bool mInitialized;
+ PRLibrary* mOGLLibrary;
+ bool mHasRobustness;
+ bool mHasDXInterop;
+ bool mHasDXInterop2;
+
+ HWND mWindow;
+ HDC mWindowDC;
+ HGLRC mWindowGLContext;
+ int mWindowPixelFormat;
+
+};
+
+// a global WGLLibrary instance
+extern WGLLibrary sWGLLib;
+
+} /* namespace gl */
+} /* namespace mozilla */