From: Rémi Bernon rbernon@codeweavers.com
--- dlls/opengl32/make_opengl | 55 ++++++++++++++++ dlls/opengl32/unix_private.h | 3 + dlls/opengl32/unix_thunks.c | 120 +++++++++++++++++++++++++++++++++++ dlls/opengl32/unix_wgl.c | 62 +++++++++++++++++- dlls/win32u/opengl.c | 1 + 5 files changed, 238 insertions(+), 3 deletions(-)
diff --git a/dlls/opengl32/make_opengl b/dlls/opengl32/make_opengl index 28d480a0c2d..ef6b32dca89 100755 --- a/dlls/opengl32/make_opengl +++ b/dlls/opengl32/make_opengl @@ -226,6 +226,52 @@ my %manual_unix_thunks = "wglGetProcAddress" => 1, "wglSwapBuffers" => 1, ); +my %hide_default_fbo_thunks = + ( + "glFramebufferRenderbuffer" => 1, + "glFramebufferRenderbufferEXT" => 1, + "glFramebufferTexture" => 1, + "glFramebufferTexture1D" => 1, + "glFramebufferTexture1DEXT" => 1, + "glFramebufferTexture2D" => 1, + "glFramebufferTexture2DEXT" => 1, + "glFramebufferTexture3D" => 1, + "glFramebufferTexture3DEXT" => 1, + "glFramebufferTextureARB" => 1, + "glFramebufferTextureEXT" => 1, + "glFramebufferTextureFaceARB" => 1, + "glFramebufferTextureFaceEXT" => 1, + "glFramebufferTextureLayer" => 1, + "glFramebufferTextureLayerARB" => 1, + "glFramebufferTextureLayerEXT" => 1, + "glFramebufferTextureMultiviewOVR" => 1, + "glGetFramebufferAttachmentParameteriv" => 1, + "glGetFramebufferAttachmentParameterivEXT" => 1, + ); +my %map_default_fbo_thunks = + ( + "glBindFramebuffer" => [ "framebuffer" ], + "glBindFramebufferEXT" => [ "framebuffer" ], + "glBlitNamedFramebuffer" => [ "readFramebuffer", "drawFramebuffer" ], + "glCheckNamedFramebufferStatus" => [ "framebuffer" ], + "glCheckNamedFramebufferStatusEXT" => [ "framebuffer" ], + "glClearNamedFramebufferfi" => [ "framebuffer" ], + "glClearNamedFramebufferfv" => [ "framebuffer" ], + "glClearNamedFramebufferiv" => [ "framebuffer" ], + "glClearNamedFramebufferuiv" => [ "framebuffer" ], + "glGetNamedFramebufferAttachmentParameteriv" => [ "framebuffer" ], + "glGetNamedFramebufferAttachmentParameterivEXT" => [ "framebuffer" ], + "glGetNamedFramebufferParameterfvAMD" => [ "framebuffer" ], + "glGetNamedFramebufferParameteriv" => [ "framebuffer" ], + "glGetNamedFramebufferParameterivEXT" => [ "framebuffer" ], + "glInvalidateNamedFramebufferData" => [ "framebuffer" ], + "glInvalidateNamedFramebufferSubData" => [ "framebuffer" ], + "glNamedFramebufferParameteri" => [ "framebuffer" ], + "glNamedFramebufferParameteriEXT" => [ "framebuffer" ], + "glNamedFramebufferSampleLocationsfvARB" => [ "framebuffer" ], + "glNamedFramebufferSampleLocationsfvNV" => [ "framebuffer" ], + "glNamedFramebufferSamplePositionsfvAMD" => [ "framebuffer" ], + ); my %manual_wow64_wrappers = ( "glClientWaitSync" => 0, @@ -502,6 +548,14 @@ sub generate_unix_thunk($$$$) { $ret .= " const struct opengl_funcs *funcs = $teb->glTable;\n"; } + foreach my $arg (@{$map_default_fbo_thunks{$name}}) + { + my $target = "GL_DRAW_FRAMEBUFFER"; + $target = "GL_READ_FRAMEBUFFER" if $arg =~ "readFramebuffer"; + $target = "params->target" if $call_args =~ "params->target"; + $ret .= " if (!params->$arg) params->$arg = get_default_fbo( $teb, $target );\n"; + } + $ret .= " push_default_fbo( $teb );\n" if defined $hide_default_fbo_thunks{$name}; $ret .= " pthread_mutex_lock( &wgl_lock );\n" if $need_lock; $ret .= " $ret_expr"; $call_args =~ s/,$/ /; @@ -520,6 +574,7 @@ sub generate_unix_thunk($$$$) } $ret .= " pthread_mutex_unlock( &wgl_lock );\n" if $need_lock; $ret .= " set_current_fbo( $teb, params->target, params->framebuffer );\n" if $name =~ /glBindFramebuffer/; + $ret .= " pop_default_fbo( $teb );\n" if defined $hide_default_fbo_thunks{$name}; if (defined $state_attrib_funcs{$name}) { my $state_args = $state_attrib_funcs{$name}; diff --git a/dlls/opengl32/unix_private.h b/dlls/opengl32/unix_private.h index 258019fb34c..9caad96ebda 100644 --- a/dlls/opengl32/unix_private.h +++ b/dlls/opengl32/unix_private.h @@ -83,5 +83,8 @@ extern NTSTATUS process_detach( void *args ); extern NTSTATUS get_pixel_formats( void *args ); extern void set_context_attribute( TEB *teb, GLenum name, const void *value, size_t size ); extern void set_current_fbo( TEB *teb, GLenum target, GLuint framebuffer ); +extern GLuint get_default_fbo( TEB *teb, GLenum target ); +extern void push_default_fbo( TEB *teb ); +extern void pop_default_fbo( TEB *teb );
#endif /* __WINE_OPENGL32_UNIX_PRIVATE_H */ diff --git a/dlls/opengl32/unix_thunks.c b/dlls/opengl32/unix_thunks.c index acd478cf9a0..98d2a018e78 100644 --- a/dlls/opengl32/unix_thunks.c +++ b/dlls/opengl32/unix_thunks.c @@ -3597,6 +3597,7 @@ static NTSTATUS ext_glBindFramebuffer( void *args ) { struct glBindFramebuffer_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, params->target ); funcs->p_glBindFramebuffer( params->target, params->framebuffer ); set_current_fbo( params->teb, params->target, params->framebuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); @@ -3607,6 +3608,7 @@ static NTSTATUS ext_glBindFramebufferEXT( void *args ) { struct glBindFramebufferEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, params->target ); funcs->p_glBindFramebufferEXT( params->target, params->framebuffer ); set_current_fbo( params->teb, params->target, params->framebuffer ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); @@ -4229,6 +4231,8 @@ static NTSTATUS ext_glBlitNamedFramebuffer( void *args ) { struct glBlitNamedFramebuffer_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->readFramebuffer) params->readFramebuffer = get_default_fbo( params->teb, GL_READ_FRAMEBUFFER ); + if (!params->drawFramebuffer) params->drawFramebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glBlitNamedFramebuffer( params->readFramebuffer, params->drawFramebuffer, params->srcX0, params->srcY0, params->srcX1, params->srcY1, params->dstX0, params->dstY0, params->dstX1, params->dstY1, params->mask, params->filter ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -4373,6 +4377,7 @@ static NTSTATUS ext_glCheckNamedFramebufferStatus( void *args ) { struct glCheckNamedFramebufferStatus_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, params->target ); params->ret = funcs->p_glCheckNamedFramebufferStatus( params->framebuffer, params->target ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -4382,6 +4387,7 @@ static NTSTATUS ext_glCheckNamedFramebufferStatusEXT( void *args ) { struct glCheckNamedFramebufferStatusEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, params->target ); params->ret = funcs->p_glCheckNamedFramebufferStatusEXT( params->framebuffer, params->target ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -4571,6 +4577,7 @@ static NTSTATUS ext_glClearNamedFramebufferfi( void *args ) { struct glClearNamedFramebufferfi_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glClearNamedFramebufferfi( params->framebuffer, params->buffer, params->drawbuffer, params->depth, params->stencil ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -4580,6 +4587,7 @@ static NTSTATUS ext_glClearNamedFramebufferfv( void *args ) { struct glClearNamedFramebufferfv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glClearNamedFramebufferfv( params->framebuffer, params->buffer, params->drawbuffer, params->value ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -4589,6 +4597,7 @@ static NTSTATUS ext_glClearNamedFramebufferiv( void *args ) { struct glClearNamedFramebufferiv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glClearNamedFramebufferiv( params->framebuffer, params->buffer, params->drawbuffer, params->value ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -4598,6 +4607,7 @@ static NTSTATUS ext_glClearNamedFramebufferuiv( void *args ) { struct glClearNamedFramebufferuiv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glClearNamedFramebufferuiv( params->framebuffer, params->buffer, params->drawbuffer, params->value ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -8020,7 +8030,9 @@ static NTSTATUS ext_glFramebufferRenderbuffer( void *args ) { struct glFramebufferRenderbuffer_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferRenderbuffer( params->target, params->attachment, params->renderbuffertarget, params->renderbuffer ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8029,7 +8041,9 @@ static NTSTATUS ext_glFramebufferRenderbufferEXT( void *args ) { struct glFramebufferRenderbufferEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferRenderbufferEXT( params->target, params->attachment, params->renderbuffertarget, params->renderbuffer ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8065,7 +8079,9 @@ static NTSTATUS ext_glFramebufferTexture( void *args ) { struct glFramebufferTexture_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTexture( params->target, params->attachment, params->texture, params->level ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8074,7 +8090,9 @@ static NTSTATUS ext_glFramebufferTexture1D( void *args ) { struct glFramebufferTexture1D_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTexture1D( params->target, params->attachment, params->textarget, params->texture, params->level ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8083,7 +8101,9 @@ static NTSTATUS ext_glFramebufferTexture1DEXT( void *args ) { struct glFramebufferTexture1DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTexture1DEXT( params->target, params->attachment, params->textarget, params->texture, params->level ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8092,7 +8112,9 @@ static NTSTATUS ext_glFramebufferTexture2D( void *args ) { struct glFramebufferTexture2D_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTexture2D( params->target, params->attachment, params->textarget, params->texture, params->level ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8101,7 +8123,9 @@ static NTSTATUS ext_glFramebufferTexture2DEXT( void *args ) { struct glFramebufferTexture2DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTexture2DEXT( params->target, params->attachment, params->textarget, params->texture, params->level ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8110,7 +8134,9 @@ static NTSTATUS ext_glFramebufferTexture3D( void *args ) { struct glFramebufferTexture3D_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTexture3D( params->target, params->attachment, params->textarget, params->texture, params->level, params->zoffset ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8119,7 +8145,9 @@ static NTSTATUS ext_glFramebufferTexture3DEXT( void *args ) { struct glFramebufferTexture3DEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTexture3DEXT( params->target, params->attachment, params->textarget, params->texture, params->level, params->zoffset ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8128,7 +8156,9 @@ static NTSTATUS ext_glFramebufferTextureARB( void *args ) { struct glFramebufferTextureARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTextureARB( params->target, params->attachment, params->texture, params->level ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8137,7 +8167,9 @@ static NTSTATUS ext_glFramebufferTextureEXT( void *args ) { struct glFramebufferTextureEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTextureEXT( params->target, params->attachment, params->texture, params->level ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8146,7 +8178,9 @@ static NTSTATUS ext_glFramebufferTextureFaceARB( void *args ) { struct glFramebufferTextureFaceARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTextureFaceARB( params->target, params->attachment, params->texture, params->level, params->face ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8155,7 +8189,9 @@ static NTSTATUS ext_glFramebufferTextureFaceEXT( void *args ) { struct glFramebufferTextureFaceEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTextureFaceEXT( params->target, params->attachment, params->texture, params->level, params->face ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8164,7 +8200,9 @@ static NTSTATUS ext_glFramebufferTextureLayer( void *args ) { struct glFramebufferTextureLayer_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTextureLayer( params->target, params->attachment, params->texture, params->level, params->layer ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8173,7 +8211,9 @@ static NTSTATUS ext_glFramebufferTextureLayerARB( void *args ) { struct glFramebufferTextureLayerARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTextureLayerARB( params->target, params->attachment, params->texture, params->level, params->layer ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8182,7 +8222,9 @@ static NTSTATUS ext_glFramebufferTextureLayerEXT( void *args ) { struct glFramebufferTextureLayerEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTextureLayerEXT( params->target, params->attachment, params->texture, params->level, params->layer ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -8191,7 +8233,9 @@ static NTSTATUS ext_glFramebufferTextureMultiviewOVR( void *args ) { struct glFramebufferTextureMultiviewOVR_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glFramebufferTextureMultiviewOVR( params->target, params->attachment, params->texture, params->level, params->baseViewIndex, params->numViews ); + pop_default_fbo( params->teb ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -9197,7 +9241,9 @@ static NTSTATUS ext_glGetFramebufferAttachmentParameteriv( void *args ) { struct glGetFramebufferAttachmentParameteriv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glGetFramebufferAttachmentParameteriv( params->target, params->attachment, params->pname, params->params ); + pop_default_fbo( params->teb ); return STATUS_SUCCESS; }
@@ -9205,7 +9251,9 @@ static NTSTATUS ext_glGetFramebufferAttachmentParameterivEXT( void *args ) { struct glGetFramebufferAttachmentParameterivEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + push_default_fbo( params->teb ); funcs->p_glGetFramebufferAttachmentParameterivEXT( params->target, params->attachment, params->pname, params->params ); + pop_default_fbo( params->teb ); return STATUS_SUCCESS; }
@@ -9811,6 +9859,7 @@ static NTSTATUS ext_glGetNamedFramebufferAttachmentParameteriv( void *args ) { struct glGetNamedFramebufferAttachmentParameteriv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferAttachmentParameteriv( params->framebuffer, params->attachment, params->pname, params->params ); return STATUS_SUCCESS; } @@ -9819,6 +9868,7 @@ static NTSTATUS ext_glGetNamedFramebufferAttachmentParameterivEXT( void *args ) { struct glGetNamedFramebufferAttachmentParameterivEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferAttachmentParameterivEXT( params->framebuffer, params->attachment, params->pname, params->params ); return STATUS_SUCCESS; } @@ -9827,6 +9877,7 @@ static NTSTATUS ext_glGetNamedFramebufferParameterfvAMD( void *args ) { struct glGetNamedFramebufferParameterfvAMD_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferParameterfvAMD( params->framebuffer, params->pname, params->numsamples, params->pixelindex, params->size, params->values ); return STATUS_SUCCESS; } @@ -9835,6 +9886,7 @@ static NTSTATUS ext_glGetNamedFramebufferParameteriv( void *args ) { struct glGetNamedFramebufferParameteriv_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferParameteriv( params->framebuffer, params->pname, params->param ); return STATUS_SUCCESS; } @@ -9843,6 +9895,7 @@ static NTSTATUS ext_glGetNamedFramebufferParameterivEXT( void *args ) { struct glGetNamedFramebufferParameterivEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferParameterivEXT( params->framebuffer, params->pname, params->params ); return STATUS_SUCCESS; } @@ -12271,6 +12324,7 @@ static NTSTATUS ext_glInvalidateNamedFramebufferData( void *args ) { struct glInvalidateNamedFramebufferData_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glInvalidateNamedFramebufferData( params->framebuffer, params->numAttachments, params->attachments ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -12280,6 +12334,7 @@ static NTSTATUS ext_glInvalidateNamedFramebufferSubData( void *args ) { struct glInvalidateNamedFramebufferSubData_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glInvalidateNamedFramebufferSubData( params->framebuffer, params->numAttachments, params->attachments, params->x, params->y, params->width, params->height ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -15474,6 +15529,7 @@ static NTSTATUS ext_glNamedFramebufferParameteri( void *args ) { struct glNamedFramebufferParameteri_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferParameteri( params->framebuffer, params->pname, params->param ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -15483,6 +15539,7 @@ static NTSTATUS ext_glNamedFramebufferParameteriEXT( void *args ) { struct glNamedFramebufferParameteriEXT_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferParameteriEXT( params->framebuffer, params->pname, params->param ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -15518,6 +15575,7 @@ static NTSTATUS ext_glNamedFramebufferSampleLocationsfvARB( void *args ) { struct glNamedFramebufferSampleLocationsfvARB_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferSampleLocationsfvARB( params->framebuffer, params->start, params->count, params->v ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -15527,6 +15585,7 @@ static NTSTATUS ext_glNamedFramebufferSampleLocationsfvNV( void *args ) { struct glNamedFramebufferSampleLocationsfvNV_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferSampleLocationsfvNV( params->framebuffer, params->start, params->count, params->v ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -15536,6 +15595,7 @@ static NTSTATUS ext_glNamedFramebufferSamplePositionsfvAMD( void *args ) { struct glNamedFramebufferSamplePositionsfvAMD_params *params = args; const struct opengl_funcs *funcs = params->teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( params->teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferSamplePositionsfvAMD( params->framebuffer, params->numsamples, params->pixelindex, params->values ); set_context_attribute( params->teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -36082,6 +36142,7 @@ static NTSTATUS wow64_ext_glBindFramebuffer( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, params->target ); funcs->p_glBindFramebuffer( params->target, params->framebuffer ); set_current_fbo( teb, params->target, params->framebuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); @@ -36098,6 +36159,7 @@ static NTSTATUS wow64_ext_glBindFramebufferEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, params->target ); funcs->p_glBindFramebufferEXT( params->target, params->framebuffer ); set_current_fbo( teb, params->target, params->framebuffer ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); @@ -37213,6 +37275,8 @@ static NTSTATUS wow64_ext_glBlitNamedFramebuffer( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->readFramebuffer) params->readFramebuffer = get_default_fbo( teb, GL_READ_FRAMEBUFFER ); + if (!params->drawFramebuffer) params->drawFramebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glBlitNamedFramebuffer( params->readFramebuffer, params->drawFramebuffer, params->srcX0, params->srcY0, params->srcX1, params->srcY1, params->dstX0, params->dstY0, params->dstX1, params->dstY1, params->mask, params->filter ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -37473,6 +37537,7 @@ static NTSTATUS wow64_ext_glCheckNamedFramebufferStatus( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, params->target ); params->ret = funcs->p_glCheckNamedFramebufferStatus( params->framebuffer, params->target ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -37489,6 +37554,7 @@ static NTSTATUS wow64_ext_glCheckNamedFramebufferStatusEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, params->target ); params->ret = funcs->p_glCheckNamedFramebufferStatusEXT( params->framebuffer, params->target ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -37840,6 +37906,7 @@ static NTSTATUS wow64_ext_glClearNamedFramebufferfi( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glClearNamedFramebufferfi( params->framebuffer, params->buffer, params->drawbuffer, params->depth, params->stencil ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -37857,6 +37924,7 @@ static NTSTATUS wow64_ext_glClearNamedFramebufferfv( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glClearNamedFramebufferfv( params->framebuffer, params->buffer, params->drawbuffer, ULongToPtr(params->value) ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -37874,6 +37942,7 @@ static NTSTATUS wow64_ext_glClearNamedFramebufferiv( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glClearNamedFramebufferiv( params->framebuffer, params->buffer, params->drawbuffer, ULongToPtr(params->value) ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -37891,6 +37960,7 @@ static NTSTATUS wow64_ext_glClearNamedFramebufferuiv( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glClearNamedFramebufferuiv( params->framebuffer, params->buffer, params->drawbuffer, ULongToPtr(params->value) ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -44218,7 +44288,9 @@ static NTSTATUS wow64_ext_glFramebufferRenderbuffer( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferRenderbuffer( params->target, params->attachment, params->renderbuffertarget, params->renderbuffer ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44235,7 +44307,9 @@ static NTSTATUS wow64_ext_glFramebufferRenderbufferEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferRenderbufferEXT( params->target, params->attachment, params->renderbuffertarget, params->renderbuffer ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44303,7 +44377,9 @@ static NTSTATUS wow64_ext_glFramebufferTexture( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTexture( params->target, params->attachment, params->texture, params->level ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44321,7 +44397,9 @@ static NTSTATUS wow64_ext_glFramebufferTexture1D( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTexture1D( params->target, params->attachment, params->textarget, params->texture, params->level ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44339,7 +44417,9 @@ static NTSTATUS wow64_ext_glFramebufferTexture1DEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTexture1DEXT( params->target, params->attachment, params->textarget, params->texture, params->level ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44357,7 +44437,9 @@ static NTSTATUS wow64_ext_glFramebufferTexture2D( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTexture2D( params->target, params->attachment, params->textarget, params->texture, params->level ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44375,7 +44457,9 @@ static NTSTATUS wow64_ext_glFramebufferTexture2DEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTexture2DEXT( params->target, params->attachment, params->textarget, params->texture, params->level ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44394,7 +44478,9 @@ static NTSTATUS wow64_ext_glFramebufferTexture3D( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTexture3D( params->target, params->attachment, params->textarget, params->texture, params->level, params->zoffset ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44413,7 +44499,9 @@ static NTSTATUS wow64_ext_glFramebufferTexture3DEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTexture3DEXT( params->target, params->attachment, params->textarget, params->texture, params->level, params->zoffset ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44430,7 +44518,9 @@ static NTSTATUS wow64_ext_glFramebufferTextureARB( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTextureARB( params->target, params->attachment, params->texture, params->level ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44447,7 +44537,9 @@ static NTSTATUS wow64_ext_glFramebufferTextureEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTextureEXT( params->target, params->attachment, params->texture, params->level ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44465,7 +44557,9 @@ static NTSTATUS wow64_ext_glFramebufferTextureFaceARB( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTextureFaceARB( params->target, params->attachment, params->texture, params->level, params->face ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44483,7 +44577,9 @@ static NTSTATUS wow64_ext_glFramebufferTextureFaceEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTextureFaceEXT( params->target, params->attachment, params->texture, params->level, params->face ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44501,7 +44597,9 @@ static NTSTATUS wow64_ext_glFramebufferTextureLayer( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTextureLayer( params->target, params->attachment, params->texture, params->level, params->layer ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44519,7 +44617,9 @@ static NTSTATUS wow64_ext_glFramebufferTextureLayerARB( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTextureLayerARB( params->target, params->attachment, params->texture, params->level, params->layer ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44537,7 +44637,9 @@ static NTSTATUS wow64_ext_glFramebufferTextureLayerEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTextureLayerEXT( params->target, params->attachment, params->texture, params->level, params->layer ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -44556,7 +44658,9 @@ static NTSTATUS wow64_ext_glFramebufferTextureMultiviewOVR( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glFramebufferTextureMultiviewOVR( params->target, params->attachment, params->texture, params->level, params->baseViewIndex, params->numViews ); + pop_default_fbo( teb ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; } @@ -46448,7 +46552,9 @@ static NTSTATUS wow64_ext_glGetFramebufferAttachmentParameteriv( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glGetFramebufferAttachmentParameteriv( params->target, params->attachment, params->pname, ULongToPtr(params->params) ); + pop_default_fbo( teb ); return STATUS_SUCCESS; }
@@ -46464,7 +46570,9 @@ static NTSTATUS wow64_ext_glGetFramebufferAttachmentParameterivEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + push_default_fbo( teb ); funcs->p_glGetFramebufferAttachmentParameterivEXT( params->target, params->attachment, params->pname, ULongToPtr(params->params) ); + pop_default_fbo( teb ); return STATUS_SUCCESS; }
@@ -47643,6 +47751,7 @@ static NTSTATUS wow64_ext_glGetNamedFramebufferAttachmentParameteriv( void *args } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferAttachmentParameteriv( params->framebuffer, params->attachment, params->pname, ULongToPtr(params->params) ); return STATUS_SUCCESS; } @@ -47659,6 +47768,7 @@ static NTSTATUS wow64_ext_glGetNamedFramebufferAttachmentParameterivEXT( void *a } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferAttachmentParameterivEXT( params->framebuffer, params->attachment, params->pname, ULongToPtr(params->params) ); return STATUS_SUCCESS; } @@ -47677,6 +47787,7 @@ static NTSTATUS wow64_ext_glGetNamedFramebufferParameterfvAMD( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferParameterfvAMD( params->framebuffer, params->pname, params->numsamples, params->pixelindex, params->size, ULongToPtr(params->values) ); return STATUS_SUCCESS; } @@ -47692,6 +47803,7 @@ static NTSTATUS wow64_ext_glGetNamedFramebufferParameteriv( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferParameteriv( params->framebuffer, params->pname, ULongToPtr(params->param) ); return STATUS_SUCCESS; } @@ -47707,6 +47819,7 @@ static NTSTATUS wow64_ext_glGetNamedFramebufferParameterivEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glGetNamedFramebufferParameterivEXT( params->framebuffer, params->pname, ULongToPtr(params->params) ); return STATUS_SUCCESS; } @@ -52371,6 +52484,7 @@ static NTSTATUS wow64_ext_glInvalidateNamedFramebufferData( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glInvalidateNamedFramebufferData( params->framebuffer, params->numAttachments, ULongToPtr(params->attachments) ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -52391,6 +52505,7 @@ static NTSTATUS wow64_ext_glInvalidateNamedFramebufferSubData( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glInvalidateNamedFramebufferSubData( params->framebuffer, params->numAttachments, ULongToPtr(params->attachments), params->x, params->y, params->width, params->height ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -58203,6 +58318,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferParameteri( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferParameteri( params->framebuffer, params->pname, params->param ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -58219,6 +58335,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferParameteriEXT( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferParameteriEXT( params->framebuffer, params->pname, params->param ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -58284,6 +58401,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferSampleLocationsfvARB( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferSampleLocationsfvARB( params->framebuffer, params->start, params->count, ULongToPtr(params->v) ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -58301,6 +58419,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferSampleLocationsfvNV( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferSampleLocationsfvNV( params->framebuffer, params->start, params->count, ULongToPtr(params->v) ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; @@ -58318,6 +58437,7 @@ static NTSTATUS wow64_ext_glNamedFramebufferSamplePositionsfvAMD( void *args ) } *params = args; TEB *teb = get_teb64( params->teb ); const struct opengl_funcs *funcs = teb->glTable; + if (!params->framebuffer) params->framebuffer = get_default_fbo( teb, GL_DRAW_FRAMEBUFFER ); funcs->p_glNamedFramebufferSamplePositionsfvAMD( params->framebuffer, params->numsamples, params->pixelindex, ULongToPtr(params->values) ); set_context_attribute( teb, -1 /* unsupported */, NULL, 0 ); return STATUS_SUCCESS; diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 26cf8ca215f..c28d5e2466e 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -805,6 +805,16 @@ static BOOL get_default_fbo_integer( struct context *ctx, struct opengl_drawable *data = ctx->color_buffer.draw_buffers[pname - GL_DRAW_BUFFER0]; return TRUE; } + if (pname == GL_DOUBLEBUFFER && draw->fbo) + { + *data = draw->doublebuffer; + return TRUE; + } + if (pname == GL_STEREO && draw->fbo) + { + *data = draw->stereo; + return TRUE; + }
return FALSE; } @@ -1078,6 +1088,7 @@ BOOL wrap_wglMakeCurrent( TEB *teb, HDC hdc, HGLRC hglrc ) DWORD tid = HandleToULong(teb->ClientId.UniqueThread); struct context *ctx, *prev = get_current_context( teb, NULL, NULL ); const struct opengl_funcs *funcs = teb->glTable; + struct opengl_drawable *draw, *read;
if (hglrc) { @@ -1095,6 +1106,11 @@ BOOL wrap_wglMakeCurrent( TEB *teb, HDC hdc, HGLRC hglrc ) teb->glReserved1[1] = hdc; teb->glCurrentRC = hglrc; teb->glTable = (void *)funcs; + + if ((draw = ctx->base.draw) && !ctx->draw_fbo && draw->fbo) + funcs->p_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, draw->fbo ); + if ((read = ctx->base.read) && !ctx->read_fbo && read->fbo) + funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, read->fbo ); } else if (prev) { @@ -1294,6 +1310,7 @@ BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC draw_hdc, HDC read_hdc, HGLRC DWORD tid = HandleToULong(teb->ClientId.UniqueThread); struct context *ctx, *prev = get_current_context( teb, NULL, NULL ); const struct opengl_funcs *funcs = teb->glTable; + struct opengl_drawable *draw, *read;
if (hglrc) { @@ -1312,6 +1329,11 @@ BOOL wrap_wglMakeContextCurrentARB( TEB *teb, HDC draw_hdc, HDC read_hdc, HGLRC teb->glReserved1[1] = read_hdc; teb->glCurrentRC = hglrc; teb->glTable = (void *)funcs; + + if ((draw = ctx->base.draw) && !ctx->draw_fbo && draw->fbo) + funcs->p_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, draw->fbo ); + if ((read = ctx->base.read) && !ctx->read_fbo && read->fbo) + funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, read->fbo ); } else if (prev) { @@ -1438,6 +1460,40 @@ void set_current_fbo( TEB *teb, GLenum target, GLuint fbo ) if (target == GL_READ_FRAMEBUFFER) ctx->read_fbo = fbo; }
+GLuint get_default_fbo( TEB *teb, GLenum target ) +{ + struct opengl_drawable *draw, *read; + struct context *ctx; + + if (!(ctx = get_current_context( teb, &draw, &read ))) return 0; + if (target == GL_FRAMEBUFFER) return draw->fbo; + if (target == GL_DRAW_FRAMEBUFFER) return draw->fbo; + if (target == GL_READ_FRAMEBUFFER) return read->fbo; + return 0; +} + +void push_default_fbo( TEB *teb ) +{ + const struct opengl_funcs *funcs = teb->glTable; + struct opengl_drawable *draw, *read; + struct context *ctx; + + if (!(ctx = get_current_context( teb, &draw, &read ))) return; + if (!ctx->draw_fbo && draw->fbo) funcs->p_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, 0 ); + if (!ctx->read_fbo && read->fbo) funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, 0 ); +} + +void pop_default_fbo( TEB *teb ) +{ + const struct opengl_funcs *funcs = teb->glTable; + struct opengl_drawable *draw, *read; + struct context *ctx; + + if (!(ctx = get_current_context( teb, &draw, &read ))) return; + if (!ctx->draw_fbo && draw->fbo) funcs->p_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, draw->fbo ); + if (!ctx->read_fbo && read->fbo) funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, read->fbo ); +} + static GLenum *set_default_fbo_draw_buffers( struct context *ctx, struct opengl_drawable *draw, GLsizei count, const GLenum *src, GLenum *dst ) { @@ -1476,7 +1532,7 @@ void wrap_glDrawBuffers( TEB *teb, GLsizei n, const GLenum *bufs ) struct context *ctx;
if ((ctx = get_current_context( teb, &draw, NULL )) && !ctx->draw_fbo && draw->fbo) - set_default_fbo_draw_buffers( ctx, draw, n, bufs, buffer ); + bufs = set_default_fbo_draw_buffers( ctx, draw, n, bufs, buffer );
funcs->p_glDrawBuffers( n, bufs ); } @@ -1579,7 +1635,7 @@ void wrap_glDrawBuffer( TEB *teb, GLenum buf ) struct context *ctx;
if ((ctx = get_current_context( teb, &draw, NULL )) && !ctx->draw_fbo && draw->fbo) - set_default_fbo_draw_buffer( ctx, draw, buf ); + buf = set_default_fbo_draw_buffer( ctx, draw, buf );
funcs->p_glDrawBuffer( buf ); } @@ -1648,7 +1704,7 @@ void wrap_glReadBuffer( TEB *teb, GLenum src ) struct context *ctx;
if ((ctx = get_current_context( teb, NULL, &read )) && !ctx->read_fbo && read->fbo) - set_default_fbo_read_buffer( ctx, read, src ); + src = set_default_fbo_read_buffer( ctx, read, src );
funcs->p_glReadBuffer( src ); } diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index 338fc4cfe73..3d28fcd7c3d 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -1998,6 +1998,7 @@ static void display_funcs_init(void) display_funcs.p_##func = default_funcs->p_##func; \ } ALL_GL_FUNCS + USE_GL_FUNC(glBindFramebuffer) USE_GL_FUNC(glCheckNamedFramebufferStatus) USE_GL_FUNC(glCreateFramebuffers) USE_GL_FUNC(glCreateRenderbuffers)