Commit aff43af9 by Geoff Lang

Load all core WGL functions.

BUG=angle:879 Change-Id: If204156e69480cd7e1e7c43db8496dd150ac9e15 Reviewed-on: https://chromium-review.googlesource.com/251241Tested-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent ea8ae897
...@@ -26,12 +26,12 @@ namespace rx ...@@ -26,12 +26,12 @@ namespace rx
class FunctionsGLWindows : public FunctionsGL class FunctionsGLWindows : public FunctionsGL
{ {
public: public:
FunctionsGLWindows(HMODULE openGLModule) FunctionsGLWindows(HMODULE openGLModule, PFNWGLGETPROCADDRESSPROC getProcAddressWGL)
: mOpenGLModule(openGLModule) : mOpenGLModule(openGLModule),
, mGetProcAddressWGL(nullptr) mGetProcAddressWGL(getProcAddressWGL)
{ {
ASSERT(mOpenGLModule); ASSERT(mOpenGLModule);
mGetProcAddressWGL = reinterpret_cast<PFNWGLGETPROCADDRESSPROC>(GetProcAddress(mOpenGLModule, "wglGetProcAddress")); ASSERT(mGetProcAddressWGL);
} }
virtual ~FunctionsGLWindows() virtual ~FunctionsGLWindows()
...@@ -50,8 +50,6 @@ class FunctionsGLWindows : public FunctionsGL ...@@ -50,8 +50,6 @@ class FunctionsGLWindows : public FunctionsGL
} }
HMODULE mOpenGLModule; HMODULE mOpenGLModule;
typedef PROC(WINAPI *PFNWGLGETPROCADDRESSPROC)(LPCSTR);
PFNWGLGETPROCADDRESSPROC mGetProcAddressWGL; PFNWGLGETPROCADDRESSPROC mGetProcAddressWGL;
}; };
...@@ -310,7 +308,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display) ...@@ -310,7 +308,7 @@ egl::Error DisplayWGL::initialize(egl::Display *display)
mGLVersionMajor = versionString[0] - '0'; mGLVersionMajor = versionString[0] - '0';
mGLVersionMinor = versionString[2] - '0'; mGLVersionMinor = versionString[2] - '0';
mFunctionsGL = new FunctionsGLWindows(mOpenGLModule); mFunctionsGL = new FunctionsGLWindows(mOpenGLModule, mFunctionsWGL->getProcAddress);
mFunctionsGL->initialize(mGLVersionMajor, mGLVersionMinor); mFunctionsGL->initialize(mGLVersionMajor, mGLVersionMinor);
return DisplayGL::initialize(display); return DisplayGL::initialize(display);
......
...@@ -44,12 +44,30 @@ static void GetWGLExtensionProcAddress(HMODULE glModule, PFNWGLGETPROCADDRESSPRO ...@@ -44,12 +44,30 @@ static void GetWGLExtensionProcAddress(HMODULE glModule, PFNWGLGETPROCADDRESSPRO
} }
FunctionsWGL::FunctionsWGL() FunctionsWGL::FunctionsWGL()
: createContext(nullptr), : copyContext(nullptr),
createContext(nullptr),
createLayerContext(nullptr),
deleteContext(nullptr), deleteContext(nullptr),
makeCurrent(nullptr), getCurrentContext(nullptr),
getCurrentDC(nullptr),
getProcAddress(nullptr), getProcAddress(nullptr),
makeCurrent(nullptr),
shareLists(nullptr),
useFontBitmapsA(nullptr),
useFontBitmapsW(nullptr),
swapBuffers(nullptr),
useFontOutlinesA(nullptr),
useFontOutlinesW(nullptr),
describeLayerPlane(nullptr),
setLayerPaletteEntries(nullptr),
getLayerPaletteEntries(nullptr),
realizeLayerPalette(nullptr),
swapLayerBuffers(nullptr),
swapMultipleBuffers(nullptr),
createContextAttribsARB(nullptr), createContextAttribsARB(nullptr),
getPixelFormatAttribivARB(nullptr), getPixelFormatAttribivARB(nullptr),
getExtensionStringEXT(nullptr),
getExtensionStringARB(nullptr),
swapIntervalEXT(nullptr) swapIntervalEXT(nullptr)
{ {
} }
...@@ -60,15 +78,28 @@ void FunctionsWGL::intialize(HMODULE glModule, HDC context) ...@@ -60,15 +78,28 @@ void FunctionsWGL::intialize(HMODULE glModule, HDC context)
GetWGLProcAddress(glModule, nullptr, "wglGetProcAddress", &getProcAddress); GetWGLProcAddress(glModule, nullptr, "wglGetProcAddress", &getProcAddress);
// Load the core wgl functions // Load the core wgl functions
GetWGLProcAddress(glModule, getProcAddress, "wglCopyContext", &copyContext);
GetWGLProcAddress(glModule, getProcAddress, "wglCreateContext", &createContext); GetWGLProcAddress(glModule, getProcAddress, "wglCreateContext", &createContext);
GetWGLProcAddress(glModule, getProcAddress, "wglCreateLayerContext", &createLayerContext);
GetWGLProcAddress(glModule, getProcAddress, "wglDeleteContext", &deleteContext); GetWGLProcAddress(glModule, getProcAddress, "wglDeleteContext", &deleteContext);
GetWGLProcAddress(glModule, getProcAddress, "wglGetCurrentContext", &getCurrentContext);
GetWGLProcAddress(glModule, getProcAddress, "wglGetCurrentDC", &getCurrentDC);
GetWGLProcAddress(glModule, getProcAddress, "wglMakeCurrent", &makeCurrent); GetWGLProcAddress(glModule, getProcAddress, "wglMakeCurrent", &makeCurrent);
GetWGLProcAddress(glModule, getProcAddress, "wglShareLists", &shareLists);
GetWGLProcAddress(glModule, getProcAddress, "wglUseFontBitmapsA", &useFontBitmapsA);
GetWGLProcAddress(glModule, getProcAddress, "wglUseFontBitmapsW", &useFontBitmapsW);
swapBuffers = SwapBuffers; // SwapBuffers is statically linked from GDI
GetWGLProcAddress(glModule, getProcAddress, "wglUseFontOutlinesA", &useFontOutlinesA);
GetWGLProcAddress(glModule, getProcAddress, "wglUseFontOutlinesW", &useFontOutlinesW);
GetWGLProcAddress(glModule, getProcAddress, "wglDescribeLayerPlane", &describeLayerPlane);
GetWGLProcAddress(glModule, getProcAddress, "wglSetLayerPaletteEntries", &setLayerPaletteEntries);
GetWGLProcAddress(glModule, getProcAddress, "wglGetLayerPaletteEntries", &getLayerPaletteEntries);
GetWGLProcAddress(glModule, getProcAddress, "wglRealizeLayerPalette", &realizeLayerPalette);
GetWGLProcAddress(glModule, getProcAddress, "wglSwapLayerBuffers", &swapLayerBuffers);
GetWGLProcAddress(glModule, getProcAddress, "wglSwapMultipleBuffers", &swapMultipleBuffers);
// Load extension string getter functions // Load extension string getter functions
PFNWGLGETEXTENSIONSSTRINGEXTPROC getExtensionStringEXT = nullptr;
GetWGLProcAddress(glModule, getProcAddress, "wglGetExtensionsStringEXT", &getExtensionStringEXT); GetWGLProcAddress(glModule, getProcAddress, "wglGetExtensionsStringEXT", &getExtensionStringEXT);
PFNWGLGETEXTENSIONSSTRINGARBPROC getExtensionStringARB = nullptr;
GetWGLProcAddress(glModule, getProcAddress, "wglGetExtensionsStringARB", &getExtensionStringARB); GetWGLProcAddress(glModule, getProcAddress, "wglGetExtensionsStringARB", &getExtensionStringARB);
std::string extensions = ""; std::string extensions = "";
......
...@@ -6,20 +6,12 @@ ...@@ -6,20 +6,12 @@
// FunctionsWGL.h: Defines the FuntionsWGL class to contain loaded WGL functions // FunctionsWGL.h: Defines the FuntionsWGL class to contain loaded WGL functions
#include "common/debug.h" #include "common/angleutils.h"
#include "common/platform.h" #include "libANGLE/renderer/gl/wgl/functionswgl_typedefs.h"
#include "libANGLE/Error.h"
#include <GL/wglext.h>
namespace rx namespace rx
{ {
typedef HGLRC(WINAPI *PFNWGLCREATECONTEXTPROC)(HDC);
typedef BOOL(WINAPI *PFNWGLDELETECONTEXTPROC)(HGLRC);
typedef BOOL(WINAPI *PFNWGLMAKECURRENTPROC)(HDC, HGLRC);
typedef PROC(WINAPI *PFNWGLGETPROCADDRESSPROC)(LPCSTR);
class FunctionsWGL class FunctionsWGL
{ {
public: public:
...@@ -29,14 +21,32 @@ class FunctionsWGL ...@@ -29,14 +21,32 @@ class FunctionsWGL
void intialize(HMODULE glModule, HDC context); void intialize(HMODULE glModule, HDC context);
// Base WGL functions // Base WGL functions
PFNWGLCOPYCONTEXTPROC copyContext;
PFNWGLCREATECONTEXTPROC createContext; PFNWGLCREATECONTEXTPROC createContext;
PFNWGLCREATELAYERCONTEXTPROC createLayerContext;
PFNWGLDELETECONTEXTPROC deleteContext; PFNWGLDELETECONTEXTPROC deleteContext;
PFNWGLMAKECURRENTPROC makeCurrent; PFNWGLGETCURRENTCONTEXTPROC getCurrentContext;
PFNWGLGETCURRENTDCPROC getCurrentDC;
PFNWGLGETPROCADDRESSPROC getProcAddress; PFNWGLGETPROCADDRESSPROC getProcAddress;
PFNWGLMAKECURRENTPROC makeCurrent;
PFNWGLSHARELISTSPROC shareLists;
PFNWGLUSEFONTBITMAPSAPROC useFontBitmapsA;
PFNWGLUSEFONTBITMAPSWPROC useFontBitmapsW;
PFNSWAPBUFFERSPROC swapBuffers;
PFNWGLUSEFONTOUTLINESAPROC useFontOutlinesA;
PFNWGLUSEFONTOUTLINESWPROC useFontOutlinesW;
PFNWGLDESCRIBELAYERPLANEPROC describeLayerPlane;
PFNWGLSETLAYERPALETTEENTRIESPROC setLayerPaletteEntries;
PFNWGLGETLAYERPALETTEENTRIESPROC getLayerPaletteEntries;
PFNWGLREALIZELAYERPALETTEPROC realizeLayerPalette;
PFNWGLSWAPLAYERBUFFERSPROC swapLayerBuffers;
PFNWGLSWAPMULTIPLEBUFFERSPROC swapMultipleBuffers;
// Extension functions, may be NULL // Extension functions, may be NULL
PFNWGLCREATECONTEXTATTRIBSARBPROC createContextAttribsARB; PFNWGLCREATECONTEXTATTRIBSARBPROC createContextAttribsARB;
PFNWGLGETPIXELFORMATATTRIBIVARBPROC getPixelFormatAttribivARB; PFNWGLGETPIXELFORMATATTRIBIVARBPROC getPixelFormatAttribivARB;
PFNWGLGETEXTENSIONSSTRINGEXTPROC getExtensionStringEXT;
PFNWGLGETEXTENSIONSSTRINGARBPROC getExtensionStringARB;
PFNWGLSWAPINTERVALEXTPROC swapIntervalEXT; PFNWGLSWAPINTERVALEXTPROC swapIntervalEXT;
private: private:
......
...@@ -118,7 +118,7 @@ egl::Error SurfaceWGL::swap() ...@@ -118,7 +118,7 @@ egl::Error SurfaceWGL::swap()
return egl::Error(EGL_CONTEXT_LOST, "Failed to move the child window."); return egl::Error(EGL_CONTEXT_LOST, "Failed to move the child window.");
} }
if (!SwapBuffers(mChildDeviceContext)) if (!mFunctionsWGL->swapBuffers(mChildDeviceContext))
{ {
// TODO: What error type here? // TODO: What error type here?
return egl::Error(EGL_CONTEXT_LOST, "Failed to swap buffers on the child window."); return egl::Error(EGL_CONTEXT_LOST, "Failed to swap buffers on the child window.");
......
//
// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// functionswgl_typedefs.h: Typedefs of WGL functions.
#ifndef LIBANGLE_RENDERER_GL_WGL_FUNCTIONSWGLTYPEDEFS_H_
#define LIBANGLE_RENDERER_GL_WGL_FUNCTIONSWGLTYPEDEFS_H_
#include "common/platform.h"
#include <angle_gl.h>
#include <GL/wglext.h>
namespace rx
{
typedef BOOL(WINAPI *PFNWGLCOPYCONTEXTPROC)(HGLRC, HGLRC, UINT);
typedef HGLRC(WINAPI *PFNWGLCREATECONTEXTPROC)(HDC);
typedef HGLRC(WINAPI *PFNWGLCREATELAYERCONTEXTPROC)(HDC, int);
typedef BOOL(WINAPI *PFNWGLDELETECONTEXTPROC)(HGLRC);
typedef HGLRC(WINAPI *PFNWGLGETCURRENTCONTEXTPROC)(VOID);
typedef HDC(WINAPI *PFNWGLGETCURRENTDCPROC)(VOID);
typedef PROC(WINAPI *PFNWGLGETPROCADDRESSPROC)(LPCSTR);
typedef BOOL(WINAPI *PFNWGLMAKECURRENTPROC)(HDC, HGLRC);
typedef BOOL(WINAPI *PFNWGLSHARELISTSPROC)(HGLRC, HGLRC);
typedef BOOL(WINAPI *PFNWGLUSEFONTBITMAPSAPROC)(HDC, DWORD, DWORD, DWORD);
typedef BOOL(WINAPI *PFNWGLUSEFONTBITMAPSWPROC)(HDC, DWORD, DWORD, DWORD);
typedef BOOL(WINAPI *PFNSWAPBUFFERSPROC)(HDC);
typedef BOOL(WINAPI *PFNWGLUSEFONTOUTLINESAPROC)(HDC, DWORD, DWORD, DWORD, FLOAT, FLOAT, int, LPGLYPHMETRICSFLOAT);
typedef BOOL(WINAPI *PFNWGLUSEFONTOUTLINESWPROC)(HDC, DWORD, DWORD, DWORD, FLOAT, FLOAT, int, LPGLYPHMETRICSFLOAT);
typedef BOOL(WINAPI *PFNWGLDESCRIBELAYERPLANEPROC)(HDC, int, int, UINT, LPLAYERPLANEDESCRIPTOR);
typedef int(WINAPI *PFNWGLSETLAYERPALETTEENTRIESPROC)(HDC, int, int, int, CONST COLORREF *);
typedef int(WINAPI *PFNWGLGETLAYERPALETTEENTRIESPROC)(HDC, int, int, int, COLORREF *);
typedef BOOL(WINAPI *PFNWGLREALIZELAYERPALETTEPROC)(HDC, int, BOOL);
typedef BOOL(WINAPI *PFNWGLSWAPLAYERBUFFERSPROC)(HDC, UINT);
typedef DWORD(WINAPI *PFNWGLSWAPMULTIPLEBUFFERSPROC)(UINT, CONST WGLSWAP *);
}
#endif // LIBANGLE_RENDERER_GL_WGL_FUNCTIONSWGLTYPEDEFS_H_
...@@ -409,6 +409,7 @@ ...@@ -409,6 +409,7 @@
'libANGLE/renderer/gl/wgl/FunctionsWGL.h', 'libANGLE/renderer/gl/wgl/FunctionsWGL.h',
'libANGLE/renderer/gl/wgl/SurfaceWGL.cpp', 'libANGLE/renderer/gl/wgl/SurfaceWGL.cpp',
'libANGLE/renderer/gl/wgl/SurfaceWGL.h', 'libANGLE/renderer/gl/wgl/SurfaceWGL.h',
'libANGLE/renderer/gl/wgl/functionswgl_typedefs.h',
'libANGLE/renderer/gl/wgl/wgl_utils.cpp', 'libANGLE/renderer/gl/wgl/wgl_utils.cpp',
'libANGLE/renderer/gl/wgl/wgl_utils.h', 'libANGLE/renderer/gl/wgl/wgl_utils.h',
'third_party/khronos/GL/wglext.h', 'third_party/khronos/GL/wglext.h',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment