[PATCH 0/4] MR9910: opengl32: Misc front buffer emulation / framebuffer surface fixes.
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/win32u/opengl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index ad4390486d7..bc4afec84e1 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -2635,6 +2635,7 @@ static void display_funcs_init(void) WARN( "%s not found.\n", #func ); ALL_GL_FUNCS USE_GL_FUNC(glBindFramebuffer) + USE_GL_FUNC(glBlitFramebuffer) USE_GL_FUNC(glCheckNamedFramebufferStatus) USE_GL_FUNC(glCreateFramebuffers) USE_GL_FUNC(glCreateRenderbuffers) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9910
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/unix_wgl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 36b9116d6b0..b7b0a4521d9 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -1495,7 +1495,7 @@ static void flush_context( TEB *teb, void (*flush)(void) ) NtUserGetClientRect( draw->client->hwnd, &rect, NtUserGetDpiForWindow( draw->client->hwnd ) ); if (ctx->read_fbo) funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, 0 ); funcs->p_glReadBuffer( GL_FRONT_LEFT ); - funcs->p_glBlitFramebuffer( 0, 0, 0, 0, rect.right, rect.bottom, rect.right, rect.bottom, mask, GL_NEAREST ); + funcs->p_glBlitFramebuffer( 0, 0, rect.right, rect.bottom, 0, 0, rect.right, rect.bottom, mask, GL_NEAREST ); if (ctx->read_fbo) funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, ctx->read_fbo ); else funcs->p_glReadBuffer( drawable_buffer_from_buffer( read, ctx->pixel_mode.read_buffer ) ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9910
From: Rémi Bernon <rbernon@codeweavers.com> The latter is only available with 4.5 contexts. --- dlls/opengl32/unix_wgl.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index b7b0a4521d9..6745aab5745 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -1874,41 +1874,43 @@ void resolve_default_fbo( TEB *teb, BOOL read ) NtUserGetClientRect( drawable->client->hwnd, &rect, NtUserGetDpiForWindow( drawable->client->hwnd ) ); + funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, drawable->draw_fbo ); + funcs->p_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, drawable->read_fbo ); + if (context_draws_front( ctx )) { - funcs->p_glNamedFramebufferReadBuffer( drawable->draw_fbo, GL_COLOR_ATTACHMENT0 ); - funcs->p_glNamedFramebufferDrawBuffer( drawable->read_fbo, GL_COLOR_ATTACHMENT0 ); - funcs->p_glBlitNamedFramebuffer( drawable->draw_fbo, drawable->read_fbo, 0, 0, 0, 0, rect.right, rect.bottom, - rect.right, rect.bottom, mask, GL_NEAREST ); + funcs->p_glReadBuffer( GL_COLOR_ATTACHMENT0 ); + funcs->p_glDrawBuffer( GL_COLOR_ATTACHMENT0 ); + funcs->p_glBlitFramebuffer( 0, 0, 0, 0, rect.right, rect.bottom, rect.right, rect.bottom, mask, GL_NEAREST ); mask &= ~(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } if ((drawable->doublebuffer && context_draws_back( ctx )) || (!drawable->doublebuffer && drawable->stereo && context_draws_front( ctx ))) { - funcs->p_glNamedFramebufferReadBuffer( drawable->draw_fbo, GL_COLOR_ATTACHMENT1 ); - funcs->p_glNamedFramebufferDrawBuffer( drawable->read_fbo, GL_COLOR_ATTACHMENT1 ); - funcs->p_glBlitNamedFramebuffer( drawable->draw_fbo, drawable->read_fbo, 0, 0, 0, 0, rect.right, rect.bottom, - rect.right, rect.bottom, mask, GL_NEAREST ); + funcs->p_glReadBuffer( GL_COLOR_ATTACHMENT1 ); + funcs->p_glDrawBuffer( GL_COLOR_ATTACHMENT1 ); + funcs->p_glBlitFramebuffer( 0, 0, 0, 0, rect.right, rect.bottom, rect.right, rect.bottom, mask, GL_NEAREST ); mask &= ~(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } if (drawable->doublebuffer && drawable->stereo && context_draws_front( ctx )) { - funcs->p_glNamedFramebufferReadBuffer( drawable->draw_fbo, GL_COLOR_ATTACHMENT2 ); - funcs->p_glNamedFramebufferDrawBuffer( drawable->read_fbo, GL_COLOR_ATTACHMENT2 ); - funcs->p_glBlitNamedFramebuffer( drawable->draw_fbo, drawable->read_fbo, 0, 0, 0, 0, rect.right, rect.bottom, - rect.right, rect.bottom, mask, GL_NEAREST ); + funcs->p_glReadBuffer( GL_COLOR_ATTACHMENT2 ); + funcs->p_glDrawBuffer( GL_COLOR_ATTACHMENT2 ); + funcs->p_glBlitFramebuffer( 0, 0, 0, 0, rect.right, rect.bottom, rect.right, rect.bottom, mask, GL_NEAREST ); mask &= ~(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } if (drawable->doublebuffer && drawable->stereo && context_draws_back( ctx )) { - funcs->p_glNamedFramebufferReadBuffer( drawable->draw_fbo, GL_COLOR_ATTACHMENT3 ); - funcs->p_glNamedFramebufferDrawBuffer( drawable->read_fbo, GL_COLOR_ATTACHMENT3 ); - funcs->p_glBlitNamedFramebuffer( drawable->draw_fbo, drawable->read_fbo, 0, 0, 0, 0, rect.right, rect.bottom, - rect.right, rect.bottom, mask, GL_NEAREST ); + funcs->p_glReadBuffer( GL_COLOR_ATTACHMENT3 ); + funcs->p_glDrawBuffer( GL_COLOR_ATTACHMENT3 ); + funcs->p_glBlitFramebuffer( 0, 0, 0, 0, rect.right, rect.bottom, rect.right, rect.bottom, mask, GL_NEAREST ); mask &= ~(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } + + funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, ctx->read_fbo ); + funcs->p_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, ctx->draw_fbo ); } } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9910
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/unix_wgl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 6745aab5745..4d98142a544 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -1504,15 +1504,15 @@ static void flush_context( TEB *teb, void (*flush)(void) ) void wrap_glFinish( TEB *teb ) { const struct opengl_funcs *funcs = teb->glTable; - flush_context( teb, funcs->p_glFinish ); resolve_default_fbo( teb, FALSE ); + flush_context( teb, funcs->p_glFinish ); } void wrap_glFlush( TEB *teb ) { const struct opengl_funcs *funcs = teb->glTable; - flush_context( teb, funcs->p_glFlush ); resolve_default_fbo( teb, FALSE ); + flush_context( teb, funcs->p_glFlush ); } void wrap_glClear( TEB *teb, GLbitfield mask ) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9910
participants (2)
-
Rémi Bernon -
Rémi Bernon (@rbernon)