Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
df91c7bc
Commit
df91c7bc
authored
Jul 16, 2012
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
opengl32: Redirect standard OpenGL functions through the TEB function table.
parent
d66fa61e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
47 additions
and
78 deletions
+47
-78
make_opengl
dlls/opengl32/make_opengl
+0
-3
opengl_norm.c
dlls/opengl32/opengl_norm.c
+27
-0
wgl.c
dlls/opengl32/wgl.c
+1
-52
opengl.c
dlls/winex11.drv/opengl.c
+19
-23
No files found.
dlls/opengl32/make_opengl
View file @
df91c7bc
...
...
@@ -235,9 +235,6 @@ sub GenerateThunk($$$)
return
""
if
$func_ref
->
[
0
]
eq
"glDebugEntry"
;
return
""
if
$func_ref
->
[
0
]
eq
"glGetString"
;
return
""
if
$func_ref
->
[
0
]
eq
"glGetIntegerv"
;
return
""
if
$func_ref
->
[
0
]
eq
"glFinish"
;
return
""
if
$func_ref
->
[
0
]
eq
"glFlush"
;
# If for opengl_norm.c, generate a nice heading otherwise Patrik won't be happy :-)
# Patrik says: Well I would be even happier if a (OPENGL32.@) was added as well. Done. :-)
...
...
dlls/opengl32/opengl_norm.c
View file @
df91c7bc
...
...
@@ -812,6 +812,24 @@ void WINAPI wine_glFeedbackBuffer( GLsizei size, GLenum type, GLfloat* buffer )
}
/***********************************************************************
* glFinish (OPENGL32.@)
*/
void
WINAPI
wine_glFinish
(
void
)
{
const
struct
opengl_funcs
*
funcs
=
NtCurrentTeb
()
->
glTable
;
TRACE
(
"()
\n
"
);
funcs
->
gl
.
p_glFinish
(
);
}
/***********************************************************************
* glFlush (OPENGL32.@)
*/
void
WINAPI
wine_glFlush
(
void
)
{
const
struct
opengl_funcs
*
funcs
=
NtCurrentTeb
()
->
glTable
;
TRACE
(
"()
\n
"
);
funcs
->
gl
.
p_glFlush
(
);
}
/***********************************************************************
* glFogf (OPENGL32.@)
*/
void
WINAPI
wine_glFogf
(
GLenum
pname
,
GLfloat
param
)
{
...
...
@@ -929,6 +947,15 @@ void WINAPI wine_glGetFloatv( GLenum pname, GLfloat* params ) {
}
/***********************************************************************
* glGetIntegerv (OPENGL32.@)
*/
void
WINAPI
wine_glGetIntegerv
(
GLenum
pname
,
GLint
*
params
)
{
const
struct
opengl_funcs
*
funcs
=
NtCurrentTeb
()
->
glTable
;
TRACE
(
"(%d, %p)
\n
"
,
pname
,
params
);
funcs
->
gl
.
p_glGetIntegerv
(
pname
,
params
);
}
/***********************************************************************
* glGetLightfv (OPENGL32.@)
*/
void
WINAPI
wine_glGetLightfv
(
GLenum
light
,
GLenum
pname
,
GLfloat
*
params
)
{
...
...
dlls/opengl32/wgl.c
View file @
df91c7bc
...
...
@@ -47,14 +47,6 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
wgl
);
WINE_DECLARE_DEBUG_CHANNEL
(
opengl
);
static
struct
{
/* internal WGL functions */
void
(
WINAPI
*
p_wglFinish
)(
void
);
void
(
WINAPI
*
p_wglFlush
)(
void
);
void
(
WINAPI
*
p_wglGetIntegerv
)(
GLenum
pname
,
GLint
*
params
);
}
wine_wgl
;
#ifdef SONAME_LIBGLU
#define MAKE_FUNCPTR(f) static typeof(f) * p##f;
MAKE_FUNCPTR
(
gluNewTess
)
...
...
@@ -1205,24 +1197,6 @@ GLint WINAPI wine_glDebugEntry( GLint unknown1, GLint unknown2 )
return
0
;
}
/***********************************************************************
* glFinish (OPENGL32.@)
*/
void
WINAPI
wine_glFinish
(
void
)
{
TRACE
(
"()
\n
"
);
wine_wgl
.
p_wglFinish
();
}
/***********************************************************************
* glFlush (OPENGL32.@)
*/
void
WINAPI
wine_glFlush
(
void
)
{
TRACE
(
"()
\n
"
);
wine_wgl
.
p_wglFlush
();
}
/* build the extension string by filtering out the disabled extensions */
static
char
*
build_gl_extensions
(
const
char
*
extensions
)
{
...
...
@@ -1294,14 +1268,6 @@ const GLubyte * WINAPI wine_glGetString( GLenum name )
}
/***********************************************************************
* glGetIntegerv (OPENGL32.@)
*/
void
WINAPI
wine_glGetIntegerv
(
GLenum
pname
,
GLint
*
params
)
{
wine_wgl
.
p_wglGetIntegerv
(
pname
,
params
);
}
/***********************************************************************
* wglSwapBuffers (OPENGL32.@)
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
wglSwapBuffers
(
HDC
hdc
)
...
...
@@ -1309,23 +1275,6 @@ BOOL WINAPI DECLSPEC_HOTPATCH wglSwapBuffers( HDC hdc )
return
GdiSwapBuffers
(
hdc
);
}
/* This is for brain-dead applications that use OpenGL functions before even
creating a rendering context.... */
static
BOOL
process_attach
(
void
)
{
HDC
hdc
=
GetDC
(
0
);
const
struct
wgl_funcs
*
funcs
=
get_dc_funcs
(
hdc
);
ReleaseDC
(
0
,
hdc
);
/* internal WGL functions */
wine_wgl
.
p_wglFinish
=
(
void
*
)
funcs
->
p_wglGetProcAddress
(
"wglFinish"
);
wine_wgl
.
p_wglFlush
=
(
void
*
)
funcs
->
p_wglGetProcAddress
(
"wglFlush"
);
wine_wgl
.
p_wglGetIntegerv
=
(
void
*
)
funcs
->
p_wglGetProcAddress
(
"wglGetIntegerv"
);
return
TRUE
;
}
/**********************************************************************/
static
void
process_detach
(
void
)
...
...
@@ -1344,7 +1293,7 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
opengl32_handle
=
hinst
;
DisableThreadLibraryCalls
(
hinst
);
NtCurrentTeb
()
->
glTable
=
&
null_opengl_funcs
;
return
process_attach
()
;
break
;
case
DLL_THREAD_ATTACH
:
NtCurrentTeb
()
->
glTable
=
&
null_opengl_funcs
;
break
;
...
...
dlls/winex11.drv/opengl.c
View file @
df91c7bc
...
...
@@ -328,6 +328,10 @@ static void (*pglXFreeMemoryNV)(GLvoid *pointer);
static
void
(
*
pglXCopySubBufferMESA
)(
Display
*
dpy
,
GLXDrawable
drawable
,
int
x
,
int
y
,
int
width
,
int
height
);
/* Standard OpenGL */
static
void
(
*
pglFinish
)(
void
);
static
void
(
*
pglFlush
)(
void
);
static
void
(
*
pglGetIntegerv
)(
GLenum
,
GLint
*
);
MAKE_FUNCPTR
(
glBindTexture
)
MAKE_FUNCPTR
(
glBitmap
)
MAKE_FUNCPTR
(
glCopyTexSubImage1D
)
...
...
@@ -336,16 +340,17 @@ MAKE_FUNCPTR(glCopyTexSubImage2D)
MAKE_FUNCPTR
(
glDrawBuffer
)
MAKE_FUNCPTR
(
glEndList
)
MAKE_FUNCPTR
(
glGetError
)
MAKE_FUNCPTR
(
glGetIntegerv
)
MAKE_FUNCPTR
(
glGetString
)
MAKE_FUNCPTR
(
glNewList
)
MAKE_FUNCPTR
(
glPixelStorei
)
MAKE_FUNCPTR
(
glReadPixels
)
MAKE_FUNCPTR
(
glTexImage2D
)
MAKE_FUNCPTR
(
glFinish
)
MAKE_FUNCPTR
(
glFlush
)
#undef MAKE_FUNCPTR
static
void
wglFinish
(
void
);
static
void
wglFlush
(
void
);
static
void
wglGetIntegerv
(
GLenum
pname
,
GLint
*
params
);
static
int
GLXErrorHandler
(
Display
*
dpy
,
XErrorEvent
*
event
,
void
*
arg
)
{
/* In the future we might want to find the exact X or GLX error to report back to the app */
...
...
@@ -513,6 +518,14 @@ static BOOL has_opengl(void)
}
}
/* redirect some standard OpenGL functions */
#define REDIRECT(func) \
do { p##func = opengl_funcs.gl.p_##func; opengl_funcs.gl.p_##func = w##func; } while(0)
REDIRECT
(
glFinish
);
REDIRECT
(
glFlush
);
REDIRECT
(
glGetIntegerv
);
#undef REDIRECT
pglXGetProcAddressARB
=
wine_dlsym
(
opengl_handle
,
"glXGetProcAddressARB"
,
NULL
,
0
);
if
(
pglXGetProcAddressARB
==
NULL
)
{
ERR
(
"Could not find glXGetProcAddressARB in libGL, disabling OpenGL.
\n
"
);
...
...
@@ -563,14 +576,11 @@ static BOOL has_opengl(void)
LOAD_FUNCPTR
(
glDrawBuffer
);
LOAD_FUNCPTR
(
glEndList
);
LOAD_FUNCPTR
(
glGetError
);
LOAD_FUNCPTR
(
glGetIntegerv
);
LOAD_FUNCPTR
(
glGetString
);
LOAD_FUNCPTR
(
glNewList
);
LOAD_FUNCPTR
(
glPixelStorei
);
LOAD_FUNCPTR
(
glReadPixels
);
LOAD_FUNCPTR
(
glTexImage2D
);
LOAD_FUNCPTR
(
glFinish
);
LOAD_FUNCPTR
(
glFlush
);
#undef LOAD_FUNCPTR
/* It doesn't matter if these fail. They'll only be used if the driver reports
...
...
@@ -1791,7 +1801,7 @@ static HDC glxdrv_wglGetCurrentDC( struct wgl_context *ctx )
}
/* WGL helper function which handles differences in glGetIntegerv from WGL and GLX */
static
void
WINAPI
X11DRV_
wglGetIntegerv
(
GLenum
pname
,
GLint
*
params
)
static
void
wglGetIntegerv
(
GLenum
pname
,
GLint
*
params
)
{
wine_tsx11_lock
();
switch
(
pname
)
...
...
@@ -1872,7 +1882,7 @@ static void flush_gl_drawable( struct glx_physdev *physdev )
}
static
void
WINAPI
X11DRV_
wglFinish
(
void
)
static
void
wglFinish
(
void
)
{
struct
wgl_context
*
ctx
=
NtCurrentTeb
()
->
glContext
;
enum
x11drv_escape_codes
code
=
X11DRV_FLUSH_GL_DRAWABLE
;
...
...
@@ -1888,7 +1898,7 @@ static void WINAPI X11DRV_wglFinish(void)
}
}
static
void
WINAPI
X11DRV_
wglFlush
(
void
)
static
void
wglFlush
(
void
)
{
struct
wgl_context
*
ctx
=
NtCurrentTeb
()
->
glContext
;
enum
x11drv_escape_codes
code
=
X11DRV_FLUSH_GL_DRAWABLE
;
...
...
@@ -3052,17 +3062,6 @@ static BOOL register_extension(const WineGLExtension * ext)
return
TRUE
;
}
static
const
WineGLExtension
WGL_internal_functions
=
{
""
,
{
{
"wglFinish"
,
X11DRV_wglFinish
},
{
"wglFlush"
,
X11DRV_wglFlush
},
{
"wglGetIntegerv"
,
X11DRV_wglGetIntegerv
},
}
};
static
const
WineGLExtension
WGL_ARB_create_context_extension
=
{
"WGL_ARB_create_context"
,
...
...
@@ -3166,9 +3165,6 @@ static void X11DRV_WineGL_LoadExtensions(void)
{
WineGLInfo
.
wglExtensions
[
0
]
=
0
;
/* Load Wine internal functions */
register_extension
(
&
WGL_internal_functions
);
/* ARB Extensions */
if
(
glxRequireExtension
(
"GLX_ARB_create_context"
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment