From: Rémi Bernon rbernon@codeweavers.com
--- dlls/opengl32/make_opengl | 3 +-- dlls/opengl32/opengl_ext.h | 1 + dlls/opengl32/thunks.c | 10 +++++++- dlls/opengl32/unix_thunks.c | 9 +------- dlls/opengl32/unix_wgl.c | 46 +++++++++++++++++++++++++++++++++++++ dlls/opengl32/wgl.c | 41 --------------------------------- 6 files changed, 58 insertions(+), 52 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 78368ec6c2f..733b5795306 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -163,7 +163,6 @@ my %manual_win_thunks = ( "glGetIntegerv" => 1, "glGetString" => 1, - "glGetStringi" => 1, "wglGetCurrentReadDCARB" => 1, "wglGetPixelFormat" => 1, "wglGetProcAddress" => 1, @@ -511,7 +510,7 @@ sub needs_wrapper($$) { my ($name, $func) = @_;
- return 1 if $name =~ /^glDebugMessageCallback/; + return 1 if $name =~ /^glDebugMessageCallback|^glGetStringi/;
# check if return value needs special handling (my $type = $func->[0]->textContent()) =~ s/ $//; diff --git a/dlls/opengl32/opengl_ext.h b/dlls/opengl32/opengl_ext.h index b2c3c681a41..132a414399d 100644 --- a/dlls/opengl32/opengl_ext.h +++ b/dlls/opengl32/opengl_ext.h @@ -104,5 +104,6 @@ extern int WINAPI wglDescribePixelFormat( HDC hdc, int ipfd, UINT cjpfd, PIXELFO extern BOOL filter_extensions( const char *extensions, GLubyte **exts_list, GLuint **disabled_exts ) DECLSPEC_HIDDEN; extern const GLuint *disabled_extensions_index(void) DECLSPEC_HIDDEN; extern BOOL check_extension_support( const char *extension, const char *available_extensions ) DECLSPEC_HIDDEN; +extern char *build_extension_list(void) DECLSPEC_HIDDEN;
#endif /* __DLLS_OPENGL32_OPENGL_EXT_H */ diff --git a/dlls/opengl32/thunks.c b/dlls/opengl32/thunks.c index a2a78bff97d..ca133a25830 100644 --- a/dlls/opengl32/thunks.c +++ b/dlls/opengl32/thunks.c @@ -9898,6 +9898,15 @@ static GLushort WINAPI glGetStageIndexNV( GLenum shadertype ) return args.ret; }
+static const GLubyte * WINAPI glGetStringi( GLenum name, GLuint index ) +{ + struct glGetStringi_params args = { .name = name, .index = index, }; + NTSTATUS status; + TRACE( "name %d, index %d\n", name, index ); + if ((status = UNIX_CALL( glGetStringi, &args ))) WARN( "glGetStringi returned %#x\n", status ); + return args.ret; +} + static GLuint WINAPI glGetSubroutineIndex( GLuint program, GLenum shadertype, const GLchar *name ) { struct glGetSubroutineIndex_params args = { .program = program, .shadertype = shadertype, .name = name, }; @@ -24462,7 +24471,6 @@ static BOOL WINAPI wglSwapIntervalEXT( int interval ) return args.ret; }
-extern const GLubyte * WINAPI glGetStringi( GLenum name, GLuint index ) DECLSPEC_HIDDEN; extern HDC WINAPI wglGetCurrentReadDCARB(void) DECLSPEC_HIDDEN;
const int extension_registry_size = 2694; diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 86af754b278..3f00f6ce394 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -21,6 +21,7 @@ extern NTSTATUS wgl_wglShareLists( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_glDebugMessageCallback( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_glDebugMessageCallbackAMD( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_glDebugMessageCallbackARB( void *args ) DECLSPEC_HIDDEN; +extern NTSTATUS ext_glGetStringi( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_wglBindTexImageARB( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_wglCreateContextAttribsARB( void *args ) DECLSPEC_HIDDEN; extern NTSTATUS ext_wglCreatePbufferARB( void *args ) DECLSPEC_HIDDEN; @@ -9797,14 +9798,6 @@ static NTSTATUS ext_glGetStageIndexNV( void *args ) return STATUS_SUCCESS; }
-static NTSTATUS ext_glGetStringi( void *args ) -{ - struct glGetStringi_params *params = args; - const struct opengl_funcs *funcs = NtCurrentTeb()->glTable; - params->ret = funcs->ext.p_glGetStringi( params->name, params->index ); - return STATUS_SUCCESS; -} - static NTSTATUS ext_glGetSubroutineIndex( void *args ) { struct glGetSubroutineIndex_params *params = args; diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 9a96f78dacb..4fe594d42f9 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -286,6 +286,45 @@ BOOL check_extension_support( const char *extension, const char *available_exten return FALSE; }
+static const GLubyte * WINAPI wrap_glGetStringi( GLenum name, GLuint index ) +{ + const struct opengl_funcs *funcs = NtCurrentTeb()->glTable; + const GLuint *disabled; + + if (!funcs->ext.p_glGetStringi) + { + void **func_ptr = (void **)&funcs->ext.p_glGetStringi; + *func_ptr = funcs->wgl.p_wglGetProcAddress( "glGetStringi" ); + } + + if (name == GL_EXTENSIONS && (disabled = disabled_extensions_index())) + while (index >= *disabled++) index++; + + return funcs->ext.p_glGetStringi( name, index ); +} + +char *build_extension_list(void) +{ + GLint len = 0, capacity, i, extensions_count; + char *extension, *tmp, *available_extensions; + + glGetIntegerv( GL_NUM_EXTENSIONS, &extensions_count ); + capacity = 128 * extensions_count; + + if (!(available_extensions = HeapAlloc( GetProcessHeap(), 0, capacity ))) return NULL; + for (i = 0; i < extensions_count; ++i) + { + extension = (char *)wrap_glGetStringi( GL_EXTENSIONS, i ); + capacity = max( capacity, len + strlen( extension ) + 2 ); + if (!(tmp = HeapReAlloc( GetProcessHeap(), 0, available_extensions, capacity ))) break; + available_extensions = tmp; + len += sprintf( available_extensions + len, "%s ", extension ); + } + if (len) available_extensions[len - 1] = 0; + + return available_extensions; +} + static BOOL wrap_wglCopyContext( HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask ) { struct wgl_handle *src, *dst; @@ -691,6 +730,13 @@ NTSTATUS ext_glDebugMessageCallbackARB( void *args ) return STATUS_SUCCESS; }
+NTSTATUS ext_glGetStringi( void *args ) +{ + struct glGetStringi_params *params = args; + params->ret = wrap_glGetStringi( params->name, params->index ); + return STATUS_SUCCESS; +} + NTSTATUS ext_wglBindTexImageARB( void *args ) { struct wglBindTexImageARB_params *params = args; diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c index 60ba7bf3bdf..ec1e875c56c 100644 --- a/dlls/opengl32/wgl.c +++ b/dlls/opengl32/wgl.c @@ -348,52 +348,11 @@ void WINAPI glGetIntegerv(GLenum pname, GLint *data) while (*disabled++ != ~0u) (*data)--; }
-const GLubyte * WINAPI glGetStringi(GLenum name, GLuint index) -{ - const struct opengl_funcs *funcs = NtCurrentTeb()->glTable; - const GLuint *disabled; - - TRACE("(%d, %d)\n", name, index); - if (!funcs->ext.p_glGetStringi) - { - void **func_ptr = (void **)&funcs->ext.p_glGetStringi; - - *func_ptr = funcs->wgl.p_wglGetProcAddress("glGetStringi"); - } - - if (name == GL_EXTENSIONS && (disabled = disabled_extensions_index())) - while (index >= *disabled++) index++; - - return funcs->ext.p_glGetStringi(name, index); -} - static int compar(const void *elt_a, const void *elt_b) { return strcmp(((const OpenGL_extension *) elt_a)->name, ((const OpenGL_extension *) elt_b)->name); }
-static char *build_extension_list(void) -{ - GLint len = 0, capacity, i, extensions_count; - char *extension, *tmp, *available_extensions; - - glGetIntegerv( GL_NUM_EXTENSIONS, &extensions_count ); - capacity = 128 * extensions_count; - - if (!(available_extensions = HeapAlloc( GetProcessHeap(), 0, capacity ))) return NULL; - for (i = 0; i < extensions_count; ++i) - { - extension = (char *)glGetStringi( GL_EXTENSIONS, i ); - capacity = max( capacity, len + strlen( extension ) + 2 ); - if (!(tmp = HeapReAlloc( GetProcessHeap(), 0, available_extensions, capacity ))) break; - available_extensions = tmp; - len += sprintf( available_extensions + len, "%s ", extension ); - } - if (len) available_extensions[len - 1] = 0; - - return available_extensions; -} - static char *heap_strdup( const char *str ) { int len = strlen( str ) + 1;