wined3d: Dynamically load OpenGL.

oldstable
Roderick Colenbrander 2007-08-14 01:05:09 +02:00 committed by Alexandre Julliard
parent 261f02ca68
commit 4ad17c0c38
3 changed files with 1472 additions and 29 deletions

View File

@ -5,8 +5,7 @@ VPATH = @srcdir@
MODULE = wined3d.dll
IMPORTLIB = libwined3d.$(IMPLIBEXT)
IMPORTS = user32 gdi32 advapi32 kernel32
EXTRAINCL = @X_CFLAGS@
EXTRALIBS = -luuid @X_LIBS@ @X_PRE_LIBS@ @XLIB@ @X_EXTRA_LIBS@ @OPENGL_LIBS@
EXTRALIBS = -luuid
C_SRCS = \
arb_program_shader.c \

View File

@ -414,6 +414,24 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) {
TRACE_(d3d_caps)("(%p)\n", gl_info);
/* To bypass the opengl32 thunks load wglGetProcAddress from gdi32 (glXGetProcAddress wrapper) instead of opengl32's */
mod_gl = LoadLibraryA("gdi32.dll");
if(!mod_gl) {
ERR("Can't load gdi32.dll!\n");
return FALSE;
}
p_wglGetProcAddress = (void*)GetProcAddress(mod_gl, "wglGetProcAddress");
if(!p_wglGetProcAddress) {
ERR("Unable to load wglGetProcAddress!\n");
return FALSE;
}
/* Dynamicly load all GL core functions */
#define USE_GL_FUNC(pfn) pfn = (void*)p_wglGetProcAddress( (const char *) #pfn);
GL_FUNCS_GEN;
#undef USE_GL_FUNC
gl_string = (const char *) glGetString(GL_RENDERER);
if (NULL == gl_string)
gl_string = "None";
@ -579,20 +597,7 @@ BOOL IWineD3DImpl_FillGLCaps(WineD3D_GL_Info *gl_info) {
gl_info->vs_arb_constantsF = 0;
gl_info->ps_arb_constantsF = 0;
/* To bypass the opengl32 thunks load wglGetProcAddress from gdi32 (glXGetProcAddress wrapper) instead of opengl32's */
mod_gl = LoadLibraryA("gdi32.dll");
if(!mod_gl) {
ERR("Can't load gdi32.dll!\n");
return FALSE;
}
p_wglGetProcAddress = (void*)GetProcAddress(mod_gl, "wglGetProcAddress");
if(!p_wglGetProcAddress) {
ERR("Unable to load wglGetProcAddress!\n");
return FALSE;
}
/* Now work out what GL support this card really has */
/* Now work out what GL support this card really has */
#define USE_GL_FUNC(type, pfn) gl_info->pfn = (type) p_wglGetProcAddress( (const char *) #pfn);
GL_EXT_FUNCS_GEN;
WGL_EXT_FUNCS_GEN;

File diff suppressed because it is too large Load Diff