Stefan Dösinger : wined3d: Always load glFinish and glFlush from opengl32.dll.
Alexandre Julliard
julliard at winehq.org
Mon Aug 4 08:53:41 CDT 2008
Module: wine
Branch: master
Commit: e9827cc916d09b7dba7ee11cb77ab50f24ff7a3b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e9827cc916d09b7dba7ee11cb77ab50f24ff7a3b
Author: Stefan Dösinger <stefan at codeweavers.com>
Date: Wed Jul 30 10:53:33 2008 -0500
wined3d: Always load glFinish and glFlush from opengl32.dll.
---
dlls/wined3d/directx.c | 14 +++++++++++++-
include/wine/wined3d_gl.h | 10 ++++++----
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 9101ba8..5474a45 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3971,7 +3971,7 @@ void fillGLAttribFuncs(WineD3D_GL_Info *gl_info) {
#define PUSH1(att) attribs[nAttribs++] = (att);
BOOL InitAdapters(void) {
- static HMODULE mod_gl;
+ static HMODULE mod_gl, mod_win32gl;
BOOL ret;
int ps_selected_mode, vs_selected_mode;
@@ -3990,10 +3990,16 @@ BOOL InitAdapters(void) {
ERR("Can't load opengl32.dll!\n");
goto nogl_adapter;
}
+ mod_win32gl = mod_gl;
#else
#define USE_GL_FUNC(pfn) pfn = (void*)pwglGetProcAddress(#pfn);
/* To bypass the opengl32 thunks load wglGetProcAddress from gdi32 (glXGetProcAddress wrapper) instead of opengl32's */
mod_gl = GetModuleHandleA("gdi32.dll");
+ mod_win32gl = LoadLibraryA("opengl32.dll");
+ if(!mod_win32gl) {
+ ERR("Can't load opengl32.dll!\n");
+ goto nogl_adapter;
+ }
#endif
}
@@ -4011,6 +4017,12 @@ BOOL InitAdapters(void) {
GL_FUNCS_GEN;
#undef USE_GL_FUNC
+ /* Load glFinish and glFlush from opengl32.dll even if we're not using WIN32 opengl
+ * otherwise because we have to use winex11.drv's override
+ */
+ glFinish = (void*)GetProcAddress(mod_win32gl, "glFinish");
+ glFlush = (void*)GetProcAddress(mod_win32gl, "glFlush");
+
/* For now only one default adapter */
{
int iPixelFormat;
diff --git a/include/wine/wined3d_gl.h b/include/wine/wined3d_gl.h
index ac4967d..7f0b640 100644
--- a/include/wine/wined3d_gl.h
+++ b/include/wine/wined3d_gl.h
@@ -890,8 +890,6 @@ void (WINE_GLAPI *glEvalMesh2) (GLenum mode, GLint i1, GLint i2, GLint j1, GLint
void (WINE_GLAPI *glEvalPoint1) (GLint i);
void (WINE_GLAPI *glEvalPoint2) (GLint i, GLint j);
void (WINE_GLAPI *glFeedbackBuffer) (GLsizei size, GLenum type, GLfloat* buffer);
-void (WINE_GLAPI *glFinish) ();
-void (WINE_GLAPI *glFlush) ();
void (WINE_GLAPI *glFogf) (GLenum pname, GLfloat param);
void (WINE_GLAPI *glFogfv) (GLenum pname, const GLfloat* params);
void (WINE_GLAPI *glFogi) (GLenum pname, GLint param);
@@ -1139,6 +1137,12 @@ void (WINE_GLAPI *glVertexPointer) (GLint size, GLenum type, GLsizei stride, con
void (WINE_GLAPI *glViewport) (GLint x, GLint y, GLsizei width, GLsizei height);
void (WINE_GLAPI *glPointParameterfv) (GLenum pname, const GLfloat *params);
+/* glFinish and glFlush are always loaded from opengl32.dll, thus they always have
+ * __stdcall calling convention
+ */
+void (__stdcall *glFinish) ();
+void (__stdcall *glFlush) ();
+
/* WGL functions */
HGLRC (WINAPI *pwglCreateContext)(HDC);
BOOL (WINAPI *pwglDeleteContext)(HGLRC);
@@ -1238,8 +1242,6 @@ BOOL (WINAPI *pwglShareLists)(HGLRC,HGLRC);
USE_GL_FUNC(glEvalPoint1) \
USE_GL_FUNC(glEvalPoint2) \
USE_GL_FUNC(glFeedbackBuffer) \
- USE_GL_FUNC(glFinish) \
- USE_GL_FUNC(glFlush) \
USE_GL_FUNC(glFogf) \
USE_GL_FUNC(glFogfv) \
USE_GL_FUNC(glFogi) \
More information about the wine-cvs
mailing list