From: Rémi Bernon rbernon@codeweavers.com
They are byte offsets in the buffers data. --- dlls/opengl32/make_opengl | 20 ++++++++++++++++++-- dlls/opengl32/unix_thunks.c | 24 ++++++++++++++++-------- 2 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 43199f56981..bc1a2422185 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -244,6 +244,13 @@ my %pointer_array_count = "glDrawCommandsStatesNV" => "count", "glListDrawCommandsStatesClientNV" => "count", ); +my %pointer_is_offset = + ( + "glGetPointerv" => "params", + "glGetPointervEXT" => "params", + "glGetVertexAttribPointerv" => "pointer", + "glGetVertexAttribPointervARB" => "pointer", + );
# # Used to convert some types @@ -429,7 +436,8 @@ sub generate_wow64_thunk($$$) my $ptype = get_wow64_arg_type( $arg ); my $pname = get_arg_name( $arg ); $ret .= " $ptype $pname;\n"; - $need_manual_thunk = 1 if ($arg->textContent() =~ /(*.**|[)/ || $arg->textContent() =~ /(sizei|int)ptr.**/) && !defined $pointer_array_count{$_}; + $need_manual_thunk = 1 if $arg->textContent() =~ /(*.**|[|(sizei|int)ptr.**)/ && + !defined $pointer_array_count{$_} && !defined $pointer_is_offset{$_}; } if (!is_void_func($func)) { @@ -441,7 +449,7 @@ sub generate_wow64_thunk($$$) $ret .= " {\n"; foreach my $arg (@{$func->[1]}) { - next if $arg->textContent() =~ /(*.**|[)/ || $arg->textContent() =~ /(sizei|int)ptr.**/; + next if $arg->textContent() =~ /(*.**|[|(sizei|int)ptr.**)/; my $ptype = get_arg_type( $arg ); my $pname = get_arg_name( $arg ); if ($arg->textContent() =~ /(sizei|int)ptr/) @@ -493,6 +501,14 @@ sub generate_wow64_thunk($$$) $ret .= " free( (void *)params.$pname );\n"; }
+ foreach my $arg (@{$func->[1]}) + { + next unless defined $pointer_is_offset{$_}; + my $pname = get_arg_name( $arg ); + next unless $pname =~ $pointer_is_offset{$_}; + $ret .= " params32->$pname = PtrToUlong( params.$pname );\n"; + } + $ret .= " return status;\n"; $ret .= "}\n\n";
diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index 1ba8fc3bf2f..820b6e3415d 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -28170,8 +28170,10 @@ static NTSTATUS wow64_gl_glGetPointerv( void *args ) { .pname = params32->pname, }; - FIXME( "params32 %p, params %p stub!\n", params32, ¶ms ); - return STATUS_NOT_IMPLEMENTED; + NTSTATUS status; + status = gl_glGetPointerv( ¶ms ); + params32->params = PtrToUlong( params.params ); + return status; }
static NTSTATUS wow64_gl_glGetPolygonStipple( void *args ) @@ -39693,8 +39695,10 @@ static NTSTATUS wow64_ext_glGetPointervEXT( void *args ) { .pname = params32->pname, }; - FIXME( "params32 %p, params %p stub!\n", params32, ¶ms ); - return STATUS_NOT_IMPLEMENTED; + NTSTATUS status; + status = ext_glGetPointervEXT( ¶ms ); + params32->params = PtrToUlong( params.params ); + return status; }
static NTSTATUS wow64_ext_glGetProgramBinary( void *args ) @@ -42563,8 +42567,10 @@ static NTSTATUS wow64_ext_glGetVertexAttribPointerv( void *args ) .index = params32->index, .pname = params32->pname, }; - FIXME( "params32 %p, params %p stub!\n", params32, ¶ms ); - return STATUS_NOT_IMPLEMENTED; + NTSTATUS status; + status = ext_glGetVertexAttribPointerv( ¶ms ); + params32->pointer = PtrToUlong( params.pointer ); + return status; }
static NTSTATUS wow64_ext_glGetVertexAttribPointervARB( void *args ) @@ -42580,8 +42586,10 @@ static NTSTATUS wow64_ext_glGetVertexAttribPointervARB( void *args ) .index = params32->index, .pname = params32->pname, }; - FIXME( "params32 %p, params %p stub!\n", params32, ¶ms ); - return STATUS_NOT_IMPLEMENTED; + NTSTATUS status; + status = ext_glGetVertexAttribPointervARB( ¶ms ); + params32->pointer = PtrToUlong( params.pointer ); + return status; }
static NTSTATUS wow64_ext_glGetVertexAttribPointervNV( void *args )