diff options
Diffstat (limited to 'gfx/gl/WGLLibrary.h')
-rw-r--r-- | gfx/gl/WGLLibrary.h | 131 |
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 */ |