From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/make_opengl | 122 ++++++++++++----------- dlls/opengl32/unix_thunks.c | 192 +++++++++++++++++++++++------------- dlls/opengl32/unix_thunks.h | 59 ++++++----- dlls/opengl32/unix_wgl.c | 163 +++++++++++------------------- 4 files changed, 278 insertions(+), 258 deletions(-) diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 34c32b361e9..c6bee6f1ab4 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -179,48 +179,60 @@ my %manual_win_thunks = "wglQueryRendererStringWINE" => 1, "wglSwapBuffers" => 1, ); -my %manual_unix_thunks = - ( - "glClear" => 1, - "glCreateSyncFromCLeventARB" => 1, - "glDebugMessageCallback" => 1, - "glDebugMessageCallbackAMD" => 1, - "glDebugMessageCallbackARB" => 1, - "glDrawBuffer" => 1, - "glDrawBuffers" => 1, - "glDrawPixels" => 1, - "glFenceSync" => 1, - "glFinish" => 1, - "glFlush" => 1, - "glFramebufferDrawBufferEXT" => 1, - "glFramebufferDrawBuffersEXT" => 1, - "glFramebufferReadBufferEXT" => 1, - "glGetBooleanv" => 1, - "glGetDoublev" => 1, - "glGetError" => 1, - "glGetFloatv" => 1, - "glGetFramebufferParameterivEXT" => 1, - "glGetInteger64v" => 1, - "glGetIntegerv" => 1, - "glGetString" => 1, - "glGetUnsignedBytevEXT" => 1, - "glImportSyncEXT" => 1, - "glNamedFramebufferDrawBuffer" => 1, - "glNamedFramebufferDrawBuffers" => 1, - "glNamedFramebufferReadBuffer" => 1, - "glReadBuffer" => 1, - "glReadPixels" => 1, - "glViewport" => 1, - "wglCopyContext" => 1, - "wglCreateContext" => 1, - "wglCreateContextAttribsARB" => 1, - "wglCreatePbufferARB" => 1, - "wglDeleteContext" => 1, - "wglMakeContextCurrentARB" => 1, - "wglMakeCurrent" => 1, - "wglShareLists" => 1, - "wglSwapBuffers" => 1, - ); + +sub manual_unix_thunks($) +{ + my $name = shift; + return "glClear" if $name =~ /^glClear$/; + return "glFinish" if $name =~ /^glFinish$/; + return "glFlush" if $name =~ /^glFlush$/; + return "glViewport" if $name =~ /^glViewport$/; + return "glGetError" if $name =~ /^glGetError$/; + + return "glGetBooleanv" if $name =~ /^glGetBooleanv/; + return "glGetDoublev" if $name =~ /^glGetDoublev/; + return "glGetFloatv" if $name =~ /^glGetFloatv/; + return "glGetInteger64v" if $name =~ /^glGetInteger64v/; + return "glGetIntegerv" if $name =~ /^glGetIntegerv/; + return 0 if $name =~ /^glGetStringi/; + return "glGetString" if $name =~ /^glGetString/; + return "glGetUnsignedBytevEXT" if $name =~ /^glGetUnsignedBytev/; + + return "glCreateSyncFromCLeventARB" if $name =~ /^glCreateSyncFromCLeventARB/; + return "glFenceSync" if $name =~ /^glFenceSync/; + return "glImportSyncEXT" if $name =~ /^glImportSync/; + + return 0 if $name =~ /^glDrawBufferRegion/; + return "glDrawBuffers" if $name =~ /^glDrawBuffers/; + return "glDrawBuffer" if $name =~ /^glDrawBuffer/; + return "glFramebufferDrawBuffersEXT" if $name =~ /^glFramebufferDrawBuffers/; + return "glFramebufferDrawBufferEXT" if $name =~ /^glFramebufferDrawBuffer/; + return "glNamedFramebufferDrawBuffers" if $name =~ /^glNamedFramebufferDrawBuffers/; + return "glNamedFramebufferDrawBuffer" if $name =~ /^glNamedFramebufferDrawBuffer/; + + return 0 if $name =~ /^glReadBufferRegion/; + return "glReadBuffer" if $name =~ /^glReadBuffer/; + return "glFramebufferReadBufferEXT" if $name =~ /^glFramebufferReadBuffer/; + return "glNamedFramebufferReadBuffer" if $name =~ /^glNamedFramebufferReadBuffer/; + + return "glDebugMessageCallbackAMD" if $name =~ /^glDebugMessageCallbackAMD/; + return "glDebugMessageCallback" if $name =~ /^glDebugMessageCallback/; + + return "glDrawPixels" if $name =~ /^glDrawPixels/; + return "glReadPixels" if $name =~ /^glReadPixels/; + return "glGetFramebufferParameteriv" if $name =~ /^glGetFramebufferParameteriv/; + + return "wglCopyContext" if $name =~ /^wglCopyContext/; + return "wglCreateContextAttribsARB" if $name =~ /^wglCreateContextAttribs/; + return "wglCreateContext" if $name =~ /^wglCreateContext/; + return "wglCreatePbufferARB" if $name =~ /^wglCreatePbuffer/; + return "wglDeleteContext" if $name =~ /^wglDeleteContext/; + return "wglGetProcAddress" if $name =~ /^wglGetProcAddress/; + return "wglMakeContextCurrentARB" if $name =~ /^wglMakeContextCurrent/; + return "wglMakeCurrent" if $name =~ /^wglMakeCurrent/; + return "wglShareLists" if $name =~ /^wglShareLists/; + return "wglSwapBuffers" if $name =~ /^wglSwapBuffers/; +} sub hide_default_fbo($) { @@ -399,9 +411,9 @@ sub generate_unix_thunk($$$$) my ($name, $func, $is_wow64, $prefix) = @_; my $func_ret = get_func_ret( $func ); my $wow64_wrap = $is_wow64 ? manual_wow64_wrapper( $name ) : 0; - my $need_wrap = $wow64_wrap || needs_wrapper( $name, $func ); + my $wrapper = $wow64_wrap || needs_wrapper( $name, $func ); my $need_lock = 0; - my $need_funcs = !$need_wrap || ($prefix eq "ext" && $name !~ /^wgl/); + my $need_funcs = !$wrapper || $name !~ /^wgl/; my $teb = $is_wow64 ? "teb" : "params->teb"; my $ret_stat = "return STATUS_SUCCESS;"; my $invalidation = ""; @@ -427,7 +439,7 @@ sub generate_unix_thunk($$$$) $use_context = @{$func->[1]} && get_arg_type( ${$func->[1]}[0] ) eq "HGLRC"; $ret_expr = "params->ret = " if !is_void_func( $func ); - $call_args .= " $teb," if $need_wrap; + $call_args .= " $teb," if $wrapper; if ($is_wow64) { my $need_manual_thunk = 0; @@ -507,7 +519,7 @@ sub generate_unix_thunk($$$$) } } $ret .= " } *params = args;\n"; - if (!$need_wrap && $need_manual_thunk) + if (!$wrapper && $need_manual_thunk) { $ret .= " FIXME( \"params %p stub!\\n\", params );\n"; $ret .= " return STATUS_NOT_IMPLEMENTED;\n"; @@ -524,7 +536,7 @@ sub generate_unix_thunk($$$$) : " buffer = invalidate_buffer_target( $teb, params->target );\n"; $output_conv .= " if (buffer) free_buffer( funcs, buffer );\n"; } - $ret .= " TEB *teb = get_teb64( params->teb );\n" if $need_wrap || (!$use_dc && !$use_pbuffer && !$use_context); + $ret .= " TEB *teb = get_teb64( params->teb );\n" if $wrapper || (!$use_dc && !$use_pbuffer && !$use_context); } else { @@ -593,10 +605,11 @@ sub generate_unix_thunk($$$$) { $ret .= "wow64_$wow64_wrap($call_args funcs->p_$name );\n"; } - elsif ($need_wrap) + elsif ($wrapper) { + $call_args .= " funcs->p_$name," if $name !~ /^wgl/; $call_args =~ s/,$/ /; - $ret .= "wrap_$name($call_args);\n"; + $ret .= "wrap_$wrapper($call_args);\n"; } else { @@ -651,10 +664,10 @@ sub generate_wrapper_declaration($$$) } $ret .= " " . $arg->textContent() . ","; } - $ret .= " PFN_$name func," if $is_wow64; $ret .= " HPBUFFERARB handle," if $ret_type =~ /HPBUFFERARB/; $ret .= " HGLRC handle," if $ret_type =~ /HGLRC/; $ret .= " GLsync handle," if $ret_type =~ /GLsync/; + $ret .= " PFN_$name func," if $name !~ /^wgl/; $ret =~ s/,$/ /; $ret .= ");\n"; return $ret; @@ -1063,8 +1076,7 @@ sub needs_wrapper($$) { my ($name, $func) = @_; return 0 if defined $manual_win_functions{$name}; - return 1 if defined $manual_unix_thunks{$name}; - return 0; + return manual_unix_thunks( $name ); } sub add_extension($) @@ -1664,18 +1676,18 @@ print OUT "typedef ULONG PTR32;\n\n"; foreach (sort keys %wgl_functions) { - next if !needs_wrapper( $_, $wgl_functions{$_} ); + next unless needs_wrapper( $_, $wgl_functions{$_} ) eq $_; print OUT generate_wrapper_declaration($_, $wgl_functions{$_}, 0); } foreach (sort keys %norm_functions) { - next if !needs_wrapper( $_, $norm_functions{$_} ); + next unless needs_wrapper( $_, $norm_functions{$_} ) eq $_; print OUT generate_wrapper_declaration($_, $norm_functions{$_}, 0); } foreach (sort keys %ext_functions) { next unless is_exposed_function( $ext_functions{$_} ); - next if !needs_wrapper( $_, $ext_functions{$_} ); + next unless needs_wrapper( $_, $ext_functions{$_} ) eq $_; print OUT generate_wrapper_declaration($_, $ext_functions{$_}, 0); } diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 7008395930e..d9874a9803c 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -194,7 +194,9 @@ static NTSTATUS gl_glCallLists( void *args ) static NTSTATUS gl_glClear( void *args ) { struct glClear_params *params = args; - wrap_glClear( params->teb, params->mask ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glClear) return STATUS_NOT_IMPLEMENTED; + wrap_glClear( params->teb, params->mask, funcs->p_glClear ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -757,7 +759,9 @@ static NTSTATUS gl_glDrawArrays( void *args ) static NTSTATUS gl_glDrawBuffer( void *args ) { struct glDrawBuffer_params *params = args; - wrap_glDrawBuffer( params->teb, params->buf ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glDrawBuffer) return STATUS_NOT_IMPLEMENTED; + wrap_glDrawBuffer( params->teb, params->buf, funcs->p_glDrawBuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -775,7 +779,9 @@ static NTSTATUS gl_glDrawElements( void *args ) static NTSTATUS gl_glDrawPixels( void *args ) { struct glDrawPixels_params *params = args; - wrap_glDrawPixels( params->teb, params->width, params->height, params->format, params->type, params->pixels ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glDrawPixels) return STATUS_NOT_IMPLEMENTED; + wrap_glDrawPixels( params->teb, params->width, params->height, params->format, params->type, params->pixels, funcs->p_glDrawPixels ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -983,7 +989,9 @@ static NTSTATUS gl_glFeedbackBuffer( void *args ) static NTSTATUS gl_glFinish( void *args ) { struct glFinish_params *params = args; - wrap_glFinish( params->teb ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glFinish) return STATUS_NOT_IMPLEMENTED; + wrap_glFinish( params->teb, funcs->p_glFinish ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -991,7 +999,9 @@ static NTSTATUS gl_glFinish( void *args ) static NTSTATUS gl_glFlush( void *args ) { struct glFlush_params *params = args; - wrap_glFlush( params->teb ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glFlush) return STATUS_NOT_IMPLEMENTED; + wrap_glFlush( params->teb, funcs->p_glFlush ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -1079,7 +1089,9 @@ static NTSTATUS gl_glGenTextures( void *args ) static NTSTATUS gl_glGetBooleanv( void *args ) { struct glGetBooleanv_params *params = args; - wrap_glGetBooleanv( params->teb, params->pname, params->data ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetBooleanv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetBooleanv( params->teb, params->pname, params->data, funcs->p_glGetBooleanv ); return STATUS_SUCCESS; } @@ -1095,28 +1107,36 @@ static NTSTATUS gl_glGetClipPlane( void *args ) static NTSTATUS gl_glGetDoublev( void *args ) { struct glGetDoublev_params *params = args; - wrap_glGetDoublev( params->teb, params->pname, params->data ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetDoublev) return STATUS_NOT_IMPLEMENTED; + wrap_glGetDoublev( params->teb, params->pname, params->data, funcs->p_glGetDoublev ); return STATUS_SUCCESS; } static NTSTATUS gl_glGetError( void *args ) { struct glGetError_params *params = args; - params->ret = wrap_glGetError( params->teb ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetError) return STATUS_NOT_IMPLEMENTED; + params->ret = wrap_glGetError( params->teb, funcs->p_glGetError ); return STATUS_SUCCESS; } static NTSTATUS gl_glGetFloatv( void *args ) { struct glGetFloatv_params *params = args; - wrap_glGetFloatv( params->teb, params->pname, params->data ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetFloatv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetFloatv( params->teb, params->pname, params->data, funcs->p_glGetFloatv ); return STATUS_SUCCESS; } static NTSTATUS gl_glGetIntegerv( void *args ) { struct glGetIntegerv_params *params = args; - wrap_glGetIntegerv( params->teb, params->pname, params->data ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetIntegerv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetIntegerv( params->teb, params->pname, params->data, funcs->p_glGetIntegerv ); return STATUS_SUCCESS; } @@ -1231,7 +1251,9 @@ static NTSTATUS gl_glGetPolygonStipple( void *args ) static NTSTATUS gl_glGetString( void *args ) { struct glGetString_params *params = args; - params->ret = wrap_glGetString( params->teb, params->name ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glGetString) return STATUS_NOT_IMPLEMENTED; + params->ret = wrap_glGetString( params->teb, params->name, funcs->p_glGetString ); return STATUS_SUCCESS; } @@ -2405,7 +2427,9 @@ static NTSTATUS gl_glRasterPos4sv( void *args ) static NTSTATUS gl_glReadBuffer( void *args ) { struct glReadBuffer_params *params = args; - wrap_glReadBuffer( params->teb, params->src ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glReadBuffer) return STATUS_NOT_IMPLEMENTED; + wrap_glReadBuffer( params->teb, params->src, funcs->p_glReadBuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -2413,8 +2437,10 @@ static NTSTATUS gl_glReadBuffer( void *args ) static NTSTATUS gl_glReadPixels( void *args ) { struct glReadPixels_params *params = args; + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glReadPixels) return STATUS_NOT_IMPLEMENTED; resolve_default_fbo( params->teb, TRUE ); - wrap_glReadPixels( params->teb, params->x, params->y, params->width, params->height, params->format, params->type, params->pixels ); + wrap_glReadPixels( params->teb, params->x, params->y, params->width, params->height, params->format, params->type, params->pixels, funcs->p_glReadPixels ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -3392,7 +3418,9 @@ static NTSTATUS gl_glVertexPointer( void *args ) static NTSTATUS gl_glViewport( void *args ) { struct glViewport_params *params = args; - wrap_glViewport( params->teb, params->x, params->y, params->width, params->height ); + const struct opengl_funcs *funcs = params->teb->glTable; + if (!funcs->p_glViewport) return STATUS_NOT_IMPLEMENTED; + wrap_glViewport( params->teb, params->x, params->y, params->width, params->height, funcs->p_glViewport ); set_context_attribute( params->teb, GL_VIEWPORT, ¶ms->x, 2 * sizeof(GLint) + 2 * sizeof(GLsizei) ); return STATUS_SUCCESS; } @@ -6826,7 +6854,7 @@ static NTSTATUS ext_glCreateSyncFromCLeventARB( void *args ) struct glCreateSyncFromCLeventARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glCreateSyncFromCLeventARB) return STATUS_NOT_IMPLEMENTED; - params->ret = wrap_glCreateSyncFromCLeventARB( params->teb, params->context, params->event, params->flags, params->ret ); + params->ret = wrap_glCreateSyncFromCLeventARB( params->teb, params->context, params->event, params->flags, params->ret, funcs->p_glCreateSyncFromCLeventARB ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -6896,7 +6924,7 @@ static NTSTATUS ext_glDebugMessageCallback( void *args ) struct glDebugMessageCallback_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDebugMessageCallback) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallback( params->teb, params->callback, params->userParam ); + wrap_glDebugMessageCallback( params->teb, params->callback, params->userParam, funcs->p_glDebugMessageCallback ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -6906,7 +6934,7 @@ static NTSTATUS ext_glDebugMessageCallbackAMD( void *args ) struct glDebugMessageCallbackAMD_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDebugMessageCallbackAMD) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallbackAMD( params->teb, params->callback, params->userParam ); + wrap_glDebugMessageCallbackAMD( params->teb, params->callback, params->userParam, funcs->p_glDebugMessageCallbackAMD ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -6916,7 +6944,7 @@ static NTSTATUS ext_glDebugMessageCallbackARB( void *args ) struct glDebugMessageCallbackARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDebugMessageCallbackARB) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallbackARB( params->teb, params->callback, params->userParam ); + wrap_glDebugMessageCallback( params->teb, params->callback, params->userParam, funcs->p_glDebugMessageCallbackARB ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -7756,7 +7784,7 @@ static NTSTATUS ext_glDrawBuffers( void *args ) struct glDrawBuffers_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDrawBuffers) return STATUS_NOT_IMPLEMENTED; - wrap_glDrawBuffers( params->teb, params->n, params->bufs ); + wrap_glDrawBuffers( params->teb, params->n, params->bufs, funcs->p_glDrawBuffers ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -7766,7 +7794,7 @@ static NTSTATUS ext_glDrawBuffersARB( void *args ) struct glDrawBuffersARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDrawBuffersARB) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDrawBuffersARB( params->n, params->bufs ); + wrap_glDrawBuffers( params->teb, params->n, params->bufs, funcs->p_glDrawBuffersARB ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -7776,7 +7804,7 @@ static NTSTATUS ext_glDrawBuffersATI( void *args ) struct glDrawBuffersATI_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glDrawBuffersATI) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDrawBuffersATI( params->n, params->bufs ); + wrap_glDrawBuffers( params->teb, params->n, params->bufs, funcs->p_glDrawBuffersATI ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8516,7 +8544,7 @@ static NTSTATUS ext_glFenceSync( void *args ) struct glFenceSync_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glFenceSync) return STATUS_NOT_IMPLEMENTED; - params->ret = wrap_glFenceSync( params->teb, params->condition, params->flags, params->ret ); + params->ret = wrap_glFenceSync( params->teb, params->condition, params->flags, params->ret, funcs->p_glFenceSync ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -9026,7 +9054,7 @@ static NTSTATUS ext_glFramebufferDrawBufferEXT( void *args ) struct glFramebufferDrawBufferEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glFramebufferDrawBufferEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferDrawBufferEXT( params->teb, params->framebuffer, params->mode ); + wrap_glFramebufferDrawBufferEXT( params->teb, params->framebuffer, params->mode, funcs->p_glFramebufferDrawBufferEXT ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -9036,7 +9064,7 @@ static NTSTATUS ext_glFramebufferDrawBuffersEXT( void *args ) struct glFramebufferDrawBuffersEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glFramebufferDrawBuffersEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferDrawBuffersEXT( params->teb, params->framebuffer, params->n, params->bufs ); + wrap_glFramebufferDrawBuffersEXT( params->teb, params->framebuffer, params->n, params->bufs, funcs->p_glFramebufferDrawBuffersEXT ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -9076,7 +9104,7 @@ static NTSTATUS ext_glFramebufferReadBufferEXT( void *args ) struct glFramebufferReadBufferEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glFramebufferReadBufferEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferReadBufferEXT( params->teb, params->framebuffer, params->mode ); + wrap_glFramebufferReadBufferEXT( params->teb, params->framebuffer, params->mode, funcs->p_glFramebufferReadBufferEXT ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -10534,7 +10562,7 @@ static NTSTATUS ext_glGetFramebufferParameteriv( void *args ) struct glGetFramebufferParameteriv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetFramebufferParameteriv) return STATUS_NOT_IMPLEMENTED; - funcs->p_glGetFramebufferParameteriv( params->target, params->pname, params->params ); + wrap_glGetFramebufferParameteriv( params->teb, params->target, params->pname, params->params, funcs->p_glGetFramebufferParameteriv ); return STATUS_SUCCESS; } @@ -10543,7 +10571,7 @@ static NTSTATUS ext_glGetFramebufferParameterivEXT( void *args ) struct glGetFramebufferParameterivEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetFramebufferParameterivEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glGetFramebufferParameterivEXT( params->teb, params->framebuffer, params->pname, params->params ); + wrap_glGetFramebufferParameteriv( params->teb, params->framebuffer, params->pname, params->params, funcs->p_glGetFramebufferParameterivEXT ); return STATUS_SUCCESS; } @@ -10552,7 +10580,7 @@ static NTSTATUS ext_glGetFramebufferParameterivMESA( void *args ) struct glGetFramebufferParameterivMESA_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetFramebufferParameterivMESA) return STATUS_NOT_IMPLEMENTED; - funcs->p_glGetFramebufferParameterivMESA( params->target, params->pname, params->params ); + wrap_glGetFramebufferParameteriv( params->teb, params->target, params->pname, params->params, funcs->p_glGetFramebufferParameterivMESA ); return STATUS_SUCCESS; } @@ -10714,7 +10742,7 @@ static NTSTATUS ext_glGetInteger64v( void *args ) struct glGetInteger64v_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetInteger64v) return STATUS_NOT_IMPLEMENTED; - wrap_glGetInteger64v( params->teb, params->pname, params->data ); + wrap_glGetInteger64v( params->teb, params->pname, params->data, funcs->p_glGetInteger64v ); return STATUS_SUCCESS; } @@ -12884,7 +12912,7 @@ static NTSTATUS ext_glGetUnsignedBytevEXT( void *args ) struct glGetUnsignedBytevEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glGetUnsignedBytevEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glGetUnsignedBytevEXT( params->teb, params->pname, params->data ); + wrap_glGetUnsignedBytevEXT( params->teb, params->pname, params->data, funcs->p_glGetUnsignedBytevEXT ); return STATUS_SUCCESS; } @@ -13849,7 +13877,7 @@ static NTSTATUS ext_glImportSyncEXT( void *args ) struct glImportSyncEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glImportSyncEXT) return STATUS_NOT_IMPLEMENTED; - params->ret = wrap_glImportSyncEXT( params->teb, params->external_sync_type, params->external_sync, params->flags, params->ret ); + params->ret = wrap_glImportSyncEXT( params->teb, params->external_sync_type, params->external_sync, params->flags, params->ret, funcs->p_glImportSyncEXT ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -17679,7 +17707,7 @@ static NTSTATUS ext_glNamedFramebufferDrawBuffer( void *args ) struct glNamedFramebufferDrawBuffer_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glNamedFramebufferDrawBuffer) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferDrawBuffer( params->teb, params->framebuffer, params->buf ); + wrap_glNamedFramebufferDrawBuffer( params->teb, params->framebuffer, params->buf, funcs->p_glNamedFramebufferDrawBuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -17689,7 +17717,7 @@ static NTSTATUS ext_glNamedFramebufferDrawBuffers( void *args ) struct glNamedFramebufferDrawBuffers_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glNamedFramebufferDrawBuffers) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferDrawBuffers( params->teb, params->framebuffer, params->n, params->bufs ); + wrap_glNamedFramebufferDrawBuffers( params->teb, params->framebuffer, params->n, params->bufs, funcs->p_glNamedFramebufferDrawBuffers ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -17723,7 +17751,7 @@ static NTSTATUS ext_glNamedFramebufferReadBuffer( void *args ) struct glNamedFramebufferReadBuffer_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; if (!funcs->p_glNamedFramebufferReadBuffer) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferReadBuffer( params->teb, params->framebuffer, params->src ); + wrap_glNamedFramebufferReadBuffer( params->teb, params->framebuffer, params->src, funcs->p_glNamedFramebufferReadBuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -33951,7 +33979,9 @@ static NTSTATUS wow64_gl_glClear( void *args ) GLbitfield mask; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glClear( teb, params->mask ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glClear) return STATUS_NOT_IMPLEMENTED; + wrap_glClear( teb, params->mask, funcs->p_glClear ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -34882,7 +34912,9 @@ static NTSTATUS wow64_gl_glDrawBuffer( void *args ) GLenum buf; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glDrawBuffer( teb, params->buf ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glDrawBuffer) return STATUS_NOT_IMPLEMENTED; + wrap_glDrawBuffer( teb, params->buf, funcs->p_glDrawBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -34917,7 +34949,9 @@ static NTSTATUS wow64_gl_glDrawPixels( void *args ) PTR32 pixels; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glDrawPixels( teb, params->width, params->height, params->format, params->type, ULongToPtr(params->pixels) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glDrawPixels) return STATUS_NOT_IMPLEMENTED; + wrap_glDrawPixels( teb, params->width, params->height, params->format, params->type, ULongToPtr(params->pixels), funcs->p_glDrawPixels ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -35239,7 +35273,9 @@ static NTSTATUS wow64_gl_glFinish( void *args ) PTR32 teb; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glFinish( teb ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glFinish) return STATUS_NOT_IMPLEMENTED; + wrap_glFinish( teb, funcs->p_glFinish ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -35251,7 +35287,9 @@ static NTSTATUS wow64_gl_glFlush( void *args ) PTR32 teb; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glFlush( teb ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glFlush) return STATUS_NOT_IMPLEMENTED; + wrap_glFlush( teb, funcs->p_glFlush ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -35396,7 +35434,9 @@ static NTSTATUS wow64_gl_glGetBooleanv( void *args ) PTR32 data; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glGetBooleanv( teb, params->pname, ULongToPtr(params->data) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetBooleanv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetBooleanv( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetBooleanv ); return STATUS_SUCCESS; } @@ -35424,7 +35464,9 @@ static NTSTATUS wow64_gl_glGetDoublev( void *args ) PTR32 data; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glGetDoublev( teb, params->pname, ULongToPtr(params->data) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetDoublev) return STATUS_NOT_IMPLEMENTED; + wrap_glGetDoublev( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetDoublev ); return STATUS_SUCCESS; } @@ -35436,7 +35478,9 @@ static NTSTATUS wow64_gl_glGetError( void *args ) GLenum ret; } *params = args; TEB *teb = get_teb64( params->teb ); - params->ret = wrap_glGetError( teb ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetError) return STATUS_NOT_IMPLEMENTED; + params->ret = wrap_glGetError( teb, funcs->p_glGetError ); return STATUS_SUCCESS; } @@ -35449,7 +35493,9 @@ static NTSTATUS wow64_gl_glGetFloatv( void *args ) PTR32 data; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glGetFloatv( teb, params->pname, ULongToPtr(params->data) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetFloatv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetFloatv( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetFloatv ); return STATUS_SUCCESS; } @@ -35462,7 +35508,9 @@ static NTSTATUS wow64_gl_glGetIntegerv( void *args ) PTR32 data; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glGetIntegerv( teb, params->pname, ULongToPtr(params->data) ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetIntegerv) return STATUS_NOT_IMPLEMENTED; + wrap_glGetIntegerv( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetIntegerv ); return STATUS_SUCCESS; } @@ -35664,7 +35712,9 @@ static NTSTATUS wow64_gl_glGetString( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const GLubyte *ret; - ret = wrap_glGetString( teb, params->name ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glGetString) return STATUS_NOT_IMPLEMENTED; + ret = wrap_glGetString( teb, params->name, funcs->p_glGetString ); return return_wow64_string( ret, ¶ms->ret ); } @@ -37578,7 +37628,9 @@ static NTSTATUS wow64_gl_glReadBuffer( void *args ) GLenum src; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glReadBuffer( teb, params->src ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glReadBuffer) return STATUS_NOT_IMPLEMENTED; + wrap_glReadBuffer( teb, params->src, funcs->p_glReadBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -37597,8 +37649,10 @@ static NTSTATUS wow64_gl_glReadPixels( void *args ) PTR32 pixels; } *params = args; TEB *teb = get_teb64( params->teb ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glReadPixels) return STATUS_NOT_IMPLEMENTED; resolve_default_fbo( teb, TRUE ); - wrap_glReadPixels( teb, params->x, params->y, params->width, params->height, params->format, params->type, ULongToPtr(params->pixels) ); + wrap_glReadPixels( teb, params->x, params->y, params->width, params->height, params->format, params->type, ULongToPtr(params->pixels), funcs->p_glReadPixels ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -39219,7 +39273,9 @@ static NTSTATUS wow64_gl_glViewport( void *args ) GLsizei height; } *params = args; TEB *teb = get_teb64( params->teb ); - wrap_glViewport( teb, params->x, params->y, params->width, params->height ); + const struct opengl_funcs *funcs = teb->glTable; + if (!funcs->p_glViewport) return STATUS_NOT_IMPLEMENTED; + wrap_glViewport( teb, params->x, params->y, params->width, params->height, funcs->p_glViewport ); set_context_attribute( teb, GL_VIEWPORT, ¶ms->x, 2 * sizeof(GLint) + 2 * sizeof(GLsizei) ); return STATUS_SUCCESS; } @@ -45478,7 +45534,7 @@ static NTSTATUS wow64_ext_glCreateSyncFromCLeventARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glCreateSyncFromCLeventARB) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wrap_glCreateSyncFromCLeventARB( teb, ULongToPtr(params->context), ULongToPtr(params->event), params->flags, UlongToHandle( params->ret ) ); + params->ret = (UINT_PTR)wrap_glCreateSyncFromCLeventARB( teb, ULongToPtr(params->context), ULongToPtr(params->event), params->flags, UlongToHandle( params->ret ), funcs->p_glCreateSyncFromCLeventARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -45590,7 +45646,7 @@ static NTSTATUS wow64_ext_glDebugMessageCallback( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDebugMessageCallback) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallback( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam) ); + wrap_glDebugMessageCallback( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam), funcs->p_glDebugMessageCallback ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -45606,7 +45662,7 @@ static NTSTATUS wow64_ext_glDebugMessageCallbackAMD( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDebugMessageCallbackAMD) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallbackAMD( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam) ); + wrap_glDebugMessageCallbackAMD( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam), funcs->p_glDebugMessageCallbackAMD ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -45622,7 +45678,7 @@ static NTSTATUS wow64_ext_glDebugMessageCallbackARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDebugMessageCallbackARB) return STATUS_NOT_IMPLEMENTED; - wrap_glDebugMessageCallbackARB( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam) ); + wrap_glDebugMessageCallback( teb, ULongToPtr(params->callback), ULongToPtr(params->userParam), funcs->p_glDebugMessageCallbackARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -47024,7 +47080,7 @@ static NTSTATUS wow64_ext_glDrawBuffers( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDrawBuffers) return STATUS_NOT_IMPLEMENTED; - wrap_glDrawBuffers( teb, params->n, ULongToPtr(params->bufs) ); + wrap_glDrawBuffers( teb, params->n, ULongToPtr(params->bufs), funcs->p_glDrawBuffers ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -47040,7 +47096,7 @@ static NTSTATUS wow64_ext_glDrawBuffersARB( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDrawBuffersARB) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDrawBuffersARB( params->n, ULongToPtr(params->bufs) ); + wrap_glDrawBuffers( teb, params->n, ULongToPtr(params->bufs), funcs->p_glDrawBuffersARB ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -47056,7 +47112,7 @@ static NTSTATUS wow64_ext_glDrawBuffersATI( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glDrawBuffersATI) return STATUS_NOT_IMPLEMENTED; - funcs->p_glDrawBuffersATI( params->n, ULongToPtr(params->bufs) ); + wrap_glDrawBuffers( teb, params->n, ULongToPtr(params->bufs), funcs->p_glDrawBuffersATI ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -48298,7 +48354,7 @@ static NTSTATUS wow64_ext_glFenceSync( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFenceSync) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wrap_glFenceSync( teb, params->condition, params->flags, UlongToHandle( params->ret ) ); + params->ret = (UINT_PTR)wrap_glFenceSync( teb, params->condition, params->flags, UlongToHandle( params->ret ), funcs->p_glFenceSync ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -49104,7 +49160,7 @@ static NTSTATUS wow64_ext_glFramebufferDrawBufferEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFramebufferDrawBufferEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferDrawBufferEXT( teb, params->framebuffer, params->mode ); + wrap_glFramebufferDrawBufferEXT( teb, params->framebuffer, params->mode, funcs->p_glFramebufferDrawBufferEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -49121,7 +49177,7 @@ static NTSTATUS wow64_ext_glFramebufferDrawBuffersEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFramebufferDrawBuffersEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferDrawBuffersEXT( teb, params->framebuffer, params->n, ULongToPtr(params->bufs) ); + wrap_glFramebufferDrawBuffersEXT( teb, params->framebuffer, params->n, ULongToPtr(params->bufs), funcs->p_glFramebufferDrawBuffersEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -49185,7 +49241,7 @@ static NTSTATUS wow64_ext_glFramebufferReadBufferEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glFramebufferReadBufferEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glFramebufferReadBufferEXT( teb, params->framebuffer, params->mode ); + wrap_glFramebufferReadBufferEXT( teb, params->framebuffer, params->mode, funcs->p_glFramebufferReadBufferEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -51788,7 +51844,7 @@ static NTSTATUS wow64_ext_glGetFramebufferParameteriv( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetFramebufferParameteriv) return STATUS_NOT_IMPLEMENTED; - funcs->p_glGetFramebufferParameteriv( params->target, params->pname, ULongToPtr(params->params) ); + wrap_glGetFramebufferParameteriv( teb, params->target, params->pname, ULongToPtr(params->params), funcs->p_glGetFramebufferParameteriv ); return STATUS_SUCCESS; } @@ -51804,7 +51860,7 @@ static NTSTATUS wow64_ext_glGetFramebufferParameterivEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetFramebufferParameterivEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glGetFramebufferParameterivEXT( teb, params->framebuffer, params->pname, ULongToPtr(params->params) ); + wrap_glGetFramebufferParameteriv( teb, params->framebuffer, params->pname, ULongToPtr(params->params), funcs->p_glGetFramebufferParameterivEXT ); return STATUS_SUCCESS; } @@ -51820,7 +51876,7 @@ static NTSTATUS wow64_ext_glGetFramebufferParameterivMESA( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetFramebufferParameterivMESA) return STATUS_NOT_IMPLEMENTED; - funcs->p_glGetFramebufferParameterivMESA( params->target, params->pname, ULongToPtr(params->params) ); + wrap_glGetFramebufferParameteriv( teb, params->target, params->pname, ULongToPtr(params->params), funcs->p_glGetFramebufferParameterivMESA ); return STATUS_SUCCESS; } @@ -52111,7 +52167,7 @@ static NTSTATUS wow64_ext_glGetInteger64v( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetInteger64v) return STATUS_NOT_IMPLEMENTED; - wrap_glGetInteger64v( teb, params->pname, ULongToPtr(params->data) ); + wrap_glGetInteger64v( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetInteger64v ); return STATUS_SUCCESS; } @@ -56115,7 +56171,7 @@ static NTSTATUS wow64_ext_glGetUnsignedBytevEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glGetUnsignedBytevEXT) return STATUS_NOT_IMPLEMENTED; - wrap_glGetUnsignedBytevEXT( teb, params->pname, ULongToPtr(params->data) ); + wrap_glGetUnsignedBytevEXT( teb, params->pname, ULongToPtr(params->data), funcs->p_glGetUnsignedBytevEXT ); return STATUS_SUCCESS; } @@ -57849,7 +57905,7 @@ static NTSTATUS wow64_ext_glImportSyncEXT( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glImportSyncEXT) return STATUS_NOT_IMPLEMENTED; - params->ret = (UINT_PTR)wrap_glImportSyncEXT( teb, params->external_sync_type, (GLintptr)ULongToPtr(params->external_sync), params->flags, UlongToHandle( params->ret ) ); + params->ret = (UINT_PTR)wrap_glImportSyncEXT( teb, params->external_sync_type, (GLintptr)ULongToPtr(params->external_sync), params->flags, UlongToHandle( params->ret ), funcs->p_glImportSyncEXT ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -64513,7 +64569,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferDrawBuffer( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glNamedFramebufferDrawBuffer) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferDrawBuffer( teb, params->framebuffer, params->buf ); + wrap_glNamedFramebufferDrawBuffer( teb, params->framebuffer, params->buf, funcs->p_glNamedFramebufferDrawBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -64530,7 +64586,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferDrawBuffers( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glNamedFramebufferDrawBuffers) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferDrawBuffers( teb, params->framebuffer, params->n, ULongToPtr(params->bufs) ); + wrap_glNamedFramebufferDrawBuffers( teb, params->framebuffer, params->n, ULongToPtr(params->bufs), funcs->p_glNamedFramebufferDrawBuffers ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -64584,7 +64640,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferReadBuffer( void *args ) TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; if (!funcs->p_glNamedFramebufferReadBuffer) return STATUS_NOT_IMPLEMENTED; - wrap_glNamedFramebufferReadBuffer( teb, params->framebuffer, params->src ); + wrap_glNamedFramebufferReadBuffer( teb, params->framebuffer, params->src, funcs->p_glNamedFramebufferReadBuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } diff --git a/dlls/opengl32/unix_thunks.h b/dlls/opengl32/unix_thunks.h index 852c0823bdd..02cf89eedbf 100644 --- a/dlls/opengl32/unix_thunks.h +++ b/dlls/opengl32/unix_thunks.h @@ -8,36 +8,35 @@ extern BOOL wrap_wglDeleteContext( TEB *teb, HGLRC oldContext ); extern BOOL wrap_wglMakeCurrent( TEB *teb, HDC hDc, HGLRC newContext ); extern BOOL wrap_wglShareLists( TEB *teb, HGLRC hrcSrvShare, HGLRC hrcSrvSource ); extern BOOL wrap_wglSwapBuffers( TEB *teb, HDC hdc ); -extern void wrap_glClear( TEB *teb, GLbitfield mask ); -extern void wrap_glDrawBuffer( TEB *teb, GLenum buf ); -extern void wrap_glDrawPixels( TEB *teb, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels ); -extern void wrap_glFinish( TEB *teb ); -extern void wrap_glFlush( TEB *teb ); -extern void wrap_glGetBooleanv( TEB *teb, GLenum pname, GLboolean *data ); -extern void wrap_glGetDoublev( TEB *teb, GLenum pname, GLdouble *data ); -extern GLenum wrap_glGetError( TEB *teb ); -extern void wrap_glGetFloatv( TEB *teb, GLenum pname, GLfloat *data ); -extern void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data ); -extern const GLubyte *wrap_glGetString( TEB *teb, GLenum name ); -extern void wrap_glReadBuffer( TEB *teb, GLenum src ); -extern void wrap_glReadPixels( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels ); -extern void wrap_glViewport( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height ); -extern GLsync wrap_glCreateSyncFromCLeventARB( TEB *teb, struct _cl_context *context, struct _cl_event *event, GLbitfield flags, GLsync handle ); -extern void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *userParam ); -extern void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *userParam ); -extern void wrap_glDebugMessageCallbackARB( TEB *teb, GLDEBUGPROCARB callback, const void *userParam ); -extern void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs ); -extern GLsync wrap_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags, GLsync handle ); -extern void wrap_glFramebufferDrawBufferEXT( TEB *teb, GLuint framebuffer, GLenum mode ); -extern void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint framebuffer, GLsizei n, const GLenum *bufs ); -extern void wrap_glFramebufferReadBufferEXT( TEB *teb, GLuint framebuffer, GLenum mode ); -extern void wrap_glGetFramebufferParameterivEXT( TEB *teb, GLuint framebuffer, GLenum pname, GLint *params ); -extern void wrap_glGetInteger64v( TEB *teb, GLenum pname, GLint64 *data ); -extern void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data ); -extern GLsync wrap_glImportSyncEXT( TEB *teb, GLenum external_sync_type, GLintptr external_sync, GLbitfield flags, GLsync handle ); -extern void wrap_glNamedFramebufferDrawBuffer( TEB *teb, GLuint framebuffer, GLenum buf ); -extern void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint framebuffer, GLsizei n, const GLenum *bufs ); -extern void wrap_glNamedFramebufferReadBuffer( TEB *teb, GLuint framebuffer, GLenum src ); +extern void wrap_glClear( TEB *teb, GLbitfield mask, PFN_glClear func ); +extern void wrap_glDrawBuffer( TEB *teb, GLenum buf, PFN_glDrawBuffer func ); +extern void wrap_glDrawPixels( TEB *teb, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels, PFN_glDrawPixels func ); +extern void wrap_glFinish( TEB *teb, PFN_glFinish func ); +extern void wrap_glFlush( TEB *teb, PFN_glFlush func ); +extern void wrap_glGetBooleanv( TEB *teb, GLenum pname, GLboolean *data, PFN_glGetBooleanv func ); +extern void wrap_glGetDoublev( TEB *teb, GLenum pname, GLdouble *data, PFN_glGetDoublev func ); +extern GLenum wrap_glGetError( TEB *teb, PFN_glGetError func ); +extern void wrap_glGetFloatv( TEB *teb, GLenum pname, GLfloat *data, PFN_glGetFloatv func ); +extern void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data, PFN_glGetIntegerv func ); +extern const GLubyte *wrap_glGetString( TEB *teb, GLenum name, PFN_glGetString func ); +extern void wrap_glReadBuffer( TEB *teb, GLenum src, PFN_glReadBuffer func ); +extern void wrap_glReadPixels( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels, PFN_glReadPixels func ); +extern void wrap_glViewport( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, PFN_glViewport func ); +extern GLsync wrap_glCreateSyncFromCLeventARB( TEB *teb, struct _cl_context *context, struct _cl_event *event, GLbitfield flags, GLsync handle, PFN_glCreateSyncFromCLeventARB func ); +extern void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *userParam, PFN_glDebugMessageCallback func ); +extern void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *userParam, PFN_glDebugMessageCallbackAMD func ); +extern void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs, PFN_glDrawBuffers func ); +extern GLsync wrap_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags, GLsync handle, PFN_glFenceSync func ); +extern void wrap_glFramebufferDrawBufferEXT( TEB *teb, GLuint framebuffer, GLenum mode, PFN_glFramebufferDrawBufferEXT func ); +extern void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint framebuffer, GLsizei n, const GLenum *bufs, PFN_glFramebufferDrawBuffersEXT func ); +extern void wrap_glFramebufferReadBufferEXT( TEB *teb, GLuint framebuffer, GLenum mode, PFN_glFramebufferReadBufferEXT func ); +extern void wrap_glGetFramebufferParameteriv( TEB *teb, GLenum target, GLenum pname, GLint *params, PFN_glGetFramebufferParameteriv func ); +extern void wrap_glGetInteger64v( TEB *teb, GLenum pname, GLint64 *data, PFN_glGetInteger64v func ); +extern void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data, PFN_glGetUnsignedBytevEXT func ); +extern GLsync wrap_glImportSyncEXT( TEB *teb, GLenum external_sync_type, GLintptr external_sync, GLbitfield flags, GLsync handle, PFN_glImportSyncEXT func ); +extern void wrap_glNamedFramebufferDrawBuffer( TEB *teb, GLuint framebuffer, GLenum buf, PFN_glNamedFramebufferDrawBuffer func ); +extern void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint framebuffer, GLsizei n, const GLenum *bufs, PFN_glNamedFramebufferDrawBuffers func ); +extern void wrap_glNamedFramebufferReadBuffer( TEB *teb, GLuint framebuffer, GLenum src, PFN_glNamedFramebufferReadBuffer func ); extern HGLRC wrap_wglCreateContextAttribsARB( TEB *teb, HDC hDC, HGLRC hShareContext, const int *attribList, HGLRC handle ); extern HPBUFFERARB wrap_wglCreatePbufferARB( TEB *teb, HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList, HPBUFFERARB handle ); extern BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC hDrawDC, HDC hReadDC, HGLRC hglrc ); diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 47dfb547881..e5386290538 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -803,7 +803,7 @@ static BOOL get_integer( TEB *teb, GLenum pname, GLint *data ) return get_default_fbo_integer( ctx, draw, read, pname, data ); } -void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data ) +void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data, PFN_glGetUnsignedBytevEXT p_glGetUnsignedBytevEXT ) { const struct opengl_funcs *funcs = teb->glTable; @@ -815,15 +815,15 @@ void wrap_glGetUnsignedBytevEXT( TEB *teb, GLenum pname, GLubyte *data ) return; } - return funcs->p_glGetUnsignedBytevEXT( pname, data ); + return p_glGetUnsignedBytevEXT( pname, data ); } -const GLubyte *wrap_glGetString( TEB *teb, GLenum name ) +const GLubyte *wrap_glGetString( TEB *teb, GLenum name, PFN_glGetString p_glGetString ) { const struct opengl_funcs *funcs = teb->glTable; const GLubyte *ret; - if ((ret = funcs->p_glGetString( name ))) + if ((ret = p_glGetString( name ))) { if (name == GL_VENDOR && funcs->p_wglQueryCurrentRendererStringWINE) { @@ -1279,48 +1279,42 @@ static void flush_context( TEB *teb, void (*flush)(void) ) } } -void wrap_glFinish( TEB *teb ) +void wrap_glFinish( TEB *teb, PFN_glFinish p_glFinish ) { - const struct opengl_funcs *funcs = teb->glTable; resolve_default_fbo( teb, FALSE ); - flush_context( teb, funcs->p_glFinish ); + flush_context( teb, p_glFinish ); } -void wrap_glFlush( TEB *teb ) +void wrap_glFlush( TEB *teb, PFN_glFlush p_glFlush ) { - const struct opengl_funcs *funcs = teb->glTable; resolve_default_fbo( teb, FALSE ); - flush_context( teb, funcs->p_glFlush ); + flush_context( teb, p_glFlush ); } -void wrap_glClear( TEB *teb, GLbitfield mask ) +void wrap_glClear( TEB *teb, GLbitfield mask, PFN_glClear p_glClear ) { - const struct opengl_funcs *funcs = teb->glTable; flush_context( teb, NULL ); - funcs->p_glClear( mask ); + p_glClear( mask ); resolve_default_fbo( teb, FALSE ); } -void wrap_glDrawPixels( TEB *teb, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels ) +void wrap_glDrawPixels( TEB *teb, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels, PFN_glDrawPixels p_glDrawPixels ) { - const struct opengl_funcs *funcs = teb->glTable; flush_context( teb, NULL ); - funcs->p_glDrawPixels( width, height, format, type, pixels ); + p_glDrawPixels( width, height, format, type, pixels ); resolve_default_fbo( teb, FALSE ); } -void wrap_glReadPixels( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels ) +void wrap_glReadPixels( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels, PFN_glReadPixels p_glReadPixels ) { - const struct opengl_funcs *funcs = teb->glTable; flush_context( teb, NULL ); - funcs->p_glReadPixels( x, y, width, height, format, type, pixels ); + p_glReadPixels( x, y, width, height, format, type, pixels ); } -void wrap_glViewport( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height ) +void wrap_glViewport( TEB *teb, GLint x, GLint y, GLsizei width, GLsizei height, PFN_glViewport p_glViewport ) { - const struct opengl_funcs *funcs = teb->glTable; flush_context( teb, NULL ); - funcs->p_glViewport( x, y, width, height ); + p_glViewport( x, y, width, height ); resolve_default_fbo( teb, FALSE ); } @@ -1427,7 +1421,6 @@ BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC draw_hdc, HDC read_hdc, HGLRC return FALSE; } - if (!funcs->p_wglMakeContextCurrentARB) return FALSE; if (!funcs->p_wglMakeContextCurrentARB( draw_hdc, read_hdc, client_context )) return FALSE; if (prev) prev->tid = 0; make_context_current( teb, funcs, draw_hdc, read_hdc, client_context, ctx ); @@ -1482,42 +1475,21 @@ static void gl_debug_message_callback( GLenum source, GLenum type, GLuint id, GL free( params ); } -void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *user ) +void wrap_glDebugMessageCallback( TEB *teb, GLDEBUGPROC callback, const void *user, PFN_glDebugMessageCallback p_glDebugMessageCallback ) { struct context *ctx = get_current_context( teb, NULL, NULL ); - const struct opengl_funcs *funcs = teb->glTable; - - if (!funcs->p_glDebugMessageCallback) return; - ctx->debug_callback = (UINT_PTR)callback; ctx->debug_user = (UINT_PTR)user; - funcs->p_glDebugMessageCallback( gl_debug_message_callback, ctx ); + p_glDebugMessageCallback( gl_debug_message_callback, ctx ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); } -void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *user ) +void wrap_glDebugMessageCallbackAMD( TEB *teb, GLDEBUGPROCAMD callback, void *user, PFN_glDebugMessageCallbackAMD p_glDebugMessageCallbackAMD ) { struct context *ctx = get_current_context( teb, NULL, NULL ); - const struct opengl_funcs *funcs = teb->glTable; - - if (!funcs->p_glDebugMessageCallbackAMD) return; - ctx->debug_callback = (UINT_PTR)callback; ctx->debug_user = (UINT_PTR)user; - funcs->p_glDebugMessageCallbackAMD( gl_debug_message_callback, ctx ); - set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); -} - -void wrap_glDebugMessageCallbackARB( TEB *teb, GLDEBUGPROCARB callback, const void *user ) -{ - struct context *ctx = get_current_context( teb, NULL, NULL ); - const struct opengl_funcs *funcs = teb->glTable; - - if (!funcs->p_glDebugMessageCallbackARB) return; - - ctx->debug_callback = (UINT_PTR)callback; - ctx->debug_user = (UINT_PTR)user; - funcs->p_glDebugMessageCallbackARB( gl_debug_message_callback, ctx ); + p_glDebugMessageCallbackAMD( gl_debug_message_callback, ctx ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); } @@ -1649,9 +1621,8 @@ static GLenum *set_default_fbo_draw_buffers( struct context *ctx, struct opengl_ return dst; } -void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs ) +void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs, PFN_glDrawBuffers p_glDrawBuffers ) { - struct opengl_funcs *funcs = teb->glTable; GLenum buffer[MAX_DRAW_BUFFERS]; struct opengl_drawable *draw; struct context *ctx; @@ -1659,12 +1630,11 @@ void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs ) if ((ctx = get_current_context( teb, &draw, NULL )) && !ctx->draw_fbo) bufs = set_default_fbo_draw_buffers( ctx, draw, n, bufs, buffer ); - funcs->p_glDrawBuffers( n, bufs ); + p_glDrawBuffers( n, bufs ); } -void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint fbo, GLsizei n, const GLenum *bufs ) +void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint fbo, GLsizei n, const GLenum *bufs, PFN_glFramebufferDrawBuffersEXT p_glFramebufferDrawBuffersEXT ) { - struct opengl_funcs *funcs = teb->glTable; GLenum buffer[MAX_DRAW_BUFFERS]; struct opengl_drawable *draw; struct context *ctx; @@ -1672,12 +1642,11 @@ void wrap_glFramebufferDrawBuffersEXT( TEB *teb, GLuint fbo, GLsizei n, const GL if ((ctx = get_current_context( teb, &draw, NULL )) && !fbo) bufs = set_default_fbo_draw_buffers( ctx, draw, n, bufs, buffer ); - funcs->p_glFramebufferDrawBuffersEXT( fbo, n, bufs ); + p_glFramebufferDrawBuffersEXT( fbo, n, bufs ); } -void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint fbo, GLsizei n, const GLenum *bufs ) +void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint fbo, GLsizei n, const GLenum *bufs, PFN_glNamedFramebufferDrawBuffers p_glNamedFramebufferDrawBuffers ) { - struct opengl_funcs *funcs = teb->glTable; GLenum buffer[MAX_DRAW_BUFFERS]; struct opengl_drawable *draw; struct context *ctx; @@ -1685,7 +1654,7 @@ void wrap_glNamedFramebufferDrawBuffers( TEB *teb, GLuint fbo, GLsizei n, const if ((ctx = get_current_context( teb, &draw, NULL )) && !fbo) bufs = set_default_fbo_draw_buffers( ctx, draw, n, bufs, buffer ); - funcs->p_glNamedFramebufferDrawBuffers( fbo, n, bufs ); + p_glNamedFramebufferDrawBuffers( fbo, n, bufs ); } static GLenum set_default_fbo_draw_buffer( struct context *ctx, struct opengl_drawable *draw, GLint src ) @@ -1701,40 +1670,37 @@ static GLenum set_default_fbo_draw_buffer( struct context *ctx, struct opengl_dr return dst; } -void wrap_glDrawBuffer( TEB *teb, GLenum buf ) +void wrap_glDrawBuffer( TEB *teb, GLenum buf, PFN_glDrawBuffer p_glDrawBuffer ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *draw; struct context *ctx; if ((ctx = get_current_context( teb, &draw, NULL )) && !ctx->draw_fbo) buf = set_default_fbo_draw_buffer( ctx, draw, buf ); - funcs->p_glDrawBuffer( buf ); + p_glDrawBuffer( buf ); } -void wrap_glFramebufferDrawBufferEXT( TEB *teb, GLuint fbo, GLenum mode ) +void wrap_glFramebufferDrawBufferEXT( TEB *teb, GLuint fbo, GLenum mode, PFN_glFramebufferDrawBufferEXT p_glFramebufferDrawBufferEXT ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *draw; struct context *ctx; if ((ctx = get_current_context( teb, &draw, NULL )) && !fbo) mode = set_default_fbo_draw_buffer( ctx, draw, mode ); - funcs->p_glFramebufferDrawBufferEXT( fbo, mode ); + p_glFramebufferDrawBufferEXT( fbo, mode ); } -void wrap_glNamedFramebufferDrawBuffer( TEB *teb, GLuint fbo, GLenum buf ) +void wrap_glNamedFramebufferDrawBuffer( TEB *teb, GLuint fbo, GLenum buf, PFN_glNamedFramebufferDrawBuffer p_glNamedFramebufferDrawBuffer ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *draw; struct context *ctx; if ((ctx = get_current_context( teb, &draw, NULL )) && !fbo) buf = set_default_fbo_draw_buffer( ctx, draw, buf ); - funcs->p_glNamedFramebufferDrawBuffer( fbo, buf ); + p_glNamedFramebufferDrawBuffer( fbo, buf ); } static GLenum set_default_fbo_read_buffer( struct context *ctx, struct opengl_drawable *read, GLint src ) @@ -1749,96 +1715,86 @@ static GLenum set_default_fbo_read_buffer( struct context *ctx, struct opengl_dr return dst; } -void wrap_glReadBuffer( TEB *teb, GLenum src ) +void wrap_glReadBuffer( TEB *teb, GLenum src, PFN_glReadBuffer p_glReadBuffer ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *read; struct context *ctx; if ((ctx = get_current_context( teb, NULL, &read )) && !ctx->read_fbo) src = set_default_fbo_read_buffer( ctx, read, src ); - funcs->p_glReadBuffer( src ); + p_glReadBuffer( src ); } -void wrap_glFramebufferReadBufferEXT( TEB *teb, GLuint fbo, GLenum mode ) +void wrap_glFramebufferReadBufferEXT( TEB *teb, GLuint fbo, GLenum mode, PFN_glFramebufferReadBufferEXT p_glFramebufferReadBufferEXT ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *read; struct context *ctx; if ((ctx = get_current_context( teb, NULL, &read )) && !fbo) mode = set_default_fbo_read_buffer( ctx, read, mode ); - funcs->p_glFramebufferReadBufferEXT( fbo, mode ); + p_glFramebufferReadBufferEXT( fbo, mode ); } -void wrap_glNamedFramebufferReadBuffer( TEB *teb, GLuint fbo, GLenum src ) +void wrap_glNamedFramebufferReadBuffer( TEB *teb, GLuint fbo, GLenum src, PFN_glNamedFramebufferReadBuffer p_glNamedFramebufferReadBuffer ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *read; struct context *ctx; if ((ctx = get_current_context( teb, NULL, &read )) && !fbo) src = set_default_fbo_read_buffer( ctx, read, src ); - funcs->p_glNamedFramebufferReadBuffer( fbo, src ); + p_glNamedFramebufferReadBuffer( fbo, src ); } -void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data ) +void wrap_glGetIntegerv( TEB *teb, GLenum pname, GLint *data, PFN_glGetIntegerv p_glGetIntegerv ) { - const struct opengl_funcs *funcs = teb->glTable; if (get_integer( teb, pname, data )) return; - else funcs->p_glGetIntegerv( pname, data ); + else p_glGetIntegerv( pname, data ); } -void wrap_glGetBooleanv( TEB *teb, GLenum pname, GLboolean *data ) +void wrap_glGetBooleanv( TEB *teb, GLenum pname, GLboolean *data, PFN_glGetBooleanv p_glGetBooleanv ) { - const struct opengl_funcs *funcs = teb->glTable; GLint value; if (get_integer( teb, pname, &value )) *data = !!value; - else funcs->p_glGetBooleanv( pname, data ); + else p_glGetBooleanv( pname, data ); } -void wrap_glGetDoublev( TEB *teb, GLenum pname, GLdouble *data ) +void wrap_glGetDoublev( TEB *teb, GLenum pname, GLdouble *data, PFN_glGetDoublev p_glGetDoublev ) { - const struct opengl_funcs *funcs = teb->glTable; GLint value; if (get_integer( teb, pname, &value )) *data = value; - else funcs->p_glGetDoublev( pname, data ); + else p_glGetDoublev( pname, data ); } -void wrap_glGetFloatv( TEB *teb, GLenum pname, GLfloat *data ) +void wrap_glGetFloatv( TEB *teb, GLenum pname, GLfloat *data, PFN_glGetFloatv p_glGetFloatv ) { - const struct opengl_funcs *funcs = teb->glTable; GLint value; if (get_integer( teb, pname, &value )) *data = value; - else funcs->p_glGetFloatv( pname, data ); + else p_glGetFloatv( pname, data ); } -void wrap_glGetInteger64v( TEB *teb, GLenum pname, GLint64 *data ) +void wrap_glGetInteger64v( TEB *teb, GLenum pname, GLint64 *data, PFN_glGetInteger64v p_glGetInteger64v ) { - const struct opengl_funcs *funcs = teb->glTable; GLint value; if (get_integer( teb, pname, &value )) *data = value; - else funcs->p_glGetInteger64v( pname, data ); + else p_glGetInteger64v( pname, data ); } -void wrap_glGetFramebufferParameterivEXT( TEB *teb, GLuint fbo, GLenum pname, GLint *params ) +void wrap_glGetFramebufferParameteriv( TEB *teb, GLuint fbo, GLenum pname, GLint *params, PFN_glGetFramebufferParameteriv p_glGetFramebufferParameteriv ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_drawable *draw, *read; struct context *ctx; if ((ctx = get_current_context( teb, &draw, &read )) && !fbo && (fbo = draw->draw_fbo)) if (get_default_fbo_integer( ctx, draw, read, pname, params )) return; - funcs->p_glGetFramebufferParameterivEXT( fbo, pname, params ); + p_glGetFramebufferParameteriv( fbo, pname, params ); } -GLenum wrap_glGetError( TEB *teb ) +GLenum wrap_glGetError( TEB *teb, PFN_glGetError p_glGetError ) { - const struct opengl_funcs *funcs = teb->glTable; struct opengl_client_context *client; GLenum error, wrapped; struct context *ctx; @@ -1846,46 +1802,43 @@ GLenum wrap_glGetError( TEB *teb ) if (!(ctx = get_current_context( teb, NULL, NULL ))) return GL_INVALID_OPERATION; if (!(client = opengl_client_context_from_client( ctx->base.client_context ))) return GL_INVALID_OPERATION; - error = funcs->p_glGetError(); + error = p_glGetError(); wrapped = client->last_error; client->last_error = GL_NO_ERROR; return wrapped ? wrapped : error; } -GLsync wrap_glCreateSyncFromCLeventARB( TEB *teb, struct _cl_context *context, struct _cl_event *event, GLbitfield flags, GLsync client_sync ) +GLsync wrap_glCreateSyncFromCLeventARB( TEB *teb, struct _cl_context *context, struct _cl_event *event, GLbitfield flags, GLsync client_sync, PFN_glCreateSyncFromCLeventARB p_glCreateSyncFromCLeventARB ) { - const struct opengl_funcs *funcs = teb->glTable; GLsync sync; FIXME( "stub!\n" ); - if (!(sync = funcs->p_glCreateSyncFromCLeventARB( context, event, flags ))) return NULL; + if (!(sync = p_glCreateSyncFromCLeventARB( context, event, flags ))) return NULL; client_sync->unix_handle = (UINT_PTR)sync; return client_sync; } -GLsync wrap_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags, GLsync client_sync ) +GLsync wrap_glFenceSync( TEB *teb, GLenum condition, GLbitfield flags, GLsync client_sync, PFN_glFenceSync p_glFenceSync ) { - const struct opengl_funcs *funcs = teb->glTable; GLsync sync; TRACE( "condition %#x, flags %#x, client_sync %p\n", condition, flags, client_sync ); - if (!(sync = funcs->p_glFenceSync( condition, flags ))) return NULL; + if (!(sync = p_glFenceSync( condition, flags ))) return NULL; client_sync->unix_handle = (UINT_PTR)sync; return client_sync; } -GLsync wrap_glImportSyncEXT( TEB *teb, GLenum external_sync_type, GLintptr external_sync, GLbitfield flags, GLsync client_sync ) +GLsync wrap_glImportSyncEXT( TEB *teb, GLenum external_sync_type, GLintptr external_sync, GLbitfield flags, GLsync client_sync, PFN_glImportSyncEXT p_glImportSyncEXT ) { - const struct opengl_funcs *funcs = teb->glTable; GLsync sync; FIXME( "stub!\n" ); - if (!(sync = funcs->p_glImportSyncEXT( external_sync_type, external_sync, flags ))) return NULL; + if (!(sync = p_glImportSyncEXT( external_sync_type, external_sync, flags ))) return NULL; client_sync->unix_handle = (UINT_PTR)sync; return client_sync; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10686