[PATCH 0/6] MR11725: win32u: Create textures for the FBO single sampled surfaces.
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/unix_wgl.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index d4e3c6f3273..caab7034fd9 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -1136,9 +1136,7 @@ void resolve_default_fbo( TEB *teb, BOOL read ) if (drawable->draw_fbo && drawable->read_fbo && drawable->draw_fbo != drawable->read_fbo) { GLenum mask = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT; - RECT rect; - - NtUserGetClientRect( drawable->client->hwnd, &rect, NtUserGetDpiForWindow( drawable->client->hwnd ) ); + SIZE size = drawable->virtual_size; funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, drawable->draw_fbo ); funcs->p_glBindFramebuffer( GL_DRAW_FRAMEBUFFER, drawable->read_fbo ); @@ -1147,7 +1145,7 @@ void resolve_default_fbo( TEB *teb, BOOL read ) { 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 ); + funcs->p_glBlitFramebuffer( 0, 0, 0, 0, size.cx, size.cy, size.cx, size.cy, mask, GL_NEAREST ); mask &= ~(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } @@ -1155,7 +1153,7 @@ void resolve_default_fbo( TEB *teb, BOOL read ) { 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 ); + funcs->p_glBlitFramebuffer( 0, 0, 0, 0, size.cx, size.cy, size.cx, size.cy, mask, GL_NEAREST ); mask &= ~(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } @@ -1163,7 +1161,7 @@ void resolve_default_fbo( TEB *teb, BOOL read ) { 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 ); + funcs->p_glBlitFramebuffer( 0, 0, 0, 0, size.cx, size.cy, size.cx, size.cy, mask, GL_NEAREST ); mask &= ~(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } @@ -1171,7 +1169,7 @@ void resolve_default_fbo( TEB *teb, BOOL read ) { 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 ); + funcs->p_glBlitFramebuffer( 0, 0, 0, 0, size.cx, size.cy, size.cx, size.cy, mask, GL_NEAREST ); mask &= ~(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11725
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/unix_wgl.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index caab7034fd9..212753a8970 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -875,7 +875,6 @@ static void flush_context( TEB *teb, void (*flush)(void) ) struct opengl_drawable *read, *draw; struct opengl_client_context *client; struct opengl_context *ctx = get_current_context( teb, &read, &draw, &client ); - HWND draw_hwnd = ctx && draw && draw->client ? draw->client->hwnd : NULL; const struct opengl_funcs *funcs = teb->glTable; UINT flags = 0; @@ -891,14 +890,13 @@ static void flush_context( TEB *teb, void (*flush)(void) ) if (flags & GL_FLUSH_FORCE_SWAP) { GLenum mask = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT; - RECT rect; + SIZE size = draw->virtual_size; WARN( "Front buffer rendering emulation, copying front buffer back\n" ); - NtUserGetClientRect( draw_hwnd, &rect, NtUserGetDpiForWindow( draw_hwnd ) ); if (ctx->read_fbo) funcs->p_glBindFramebuffer( GL_READ_FRAMEBUFFER, 0 ); funcs->p_glReadBuffer( GL_FRONT_LEFT ); - funcs->p_glBlitFramebuffer( 0, 0, rect.right, rect.bottom, 0, 0, rect.right, rect.bottom, mask, GL_NEAREST ); + funcs->p_glBlitFramebuffer( 0, 0, size.cx, size.cy, 0, 0, size.cx, size.cy, 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->read_buffer ) ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11725
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/win32u/opengl.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index 0e06f07eb4a..c4a29e05d7f 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -394,10 +394,11 @@ static void destroy_framebuffer_attachment( struct opengl_drawable *drawable, GL TRACE( "drawable %p/%u destroyed %s buffer %#x/%u\n", drawable, fbo, kind, attachment, name ); } -static GLuint create_framebuffer( struct opengl_drawable *drawable, const struct wgl_pixel_format *desc ) +static GLuint create_framebuffer( struct opengl_drawable *drawable, const struct wgl_pixel_format *desc, SIZE size ) { const struct opengl_funcs *funcs = &display_funcs; GLuint count = 1, fbo, name; + GLenum ret; if (drawable->doublebuffer) count *= 2; if (drawable->stereo) count *= 2; @@ -407,22 +408,26 @@ static GLuint create_framebuffer( struct opengl_drawable *drawable, const struct for (GLuint i = 0; i < count; i++) { funcs->p_glCreateRenderbuffers( 1, &name ); + init_framebuffer_attachment( drawable, fbo, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name, desc, size ); funcs->p_glNamedFramebufferRenderbuffer( fbo, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name ); - TRACE( "drawable %p/%u created color buffer %#x/%u\n", drawable, fbo, GL_COLOR_ATTACHMENT0 + i, name ); + TRACE( "drawable %p/%u created color buffer %#x/%u, %s\n", drawable, fbo, GL_COLOR_ATTACHMENT0 + i, name, wine_dbgstr_point( (POINT *)&size ) ); } if (desc->pfd.cDepthBits) { funcs->p_glCreateRenderbuffers( 1, &name ); + init_framebuffer_attachment( drawable, fbo, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, name, desc, size ); funcs->p_glNamedFramebufferRenderbuffer( fbo, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, name ); if (desc->pfd.cStencilBits) funcs->p_glNamedFramebufferRenderbuffer( fbo, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, name ); - TRACE( "drawable %p/%u created depth buffer %u\n", drawable, fbo, name ); + TRACE( "drawable %p/%u created depth buffer %u, %s\n", drawable, fbo, name, wine_dbgstr_point( (POINT *)&size ) ); } funcs->p_glNamedFramebufferDrawBuffer( fbo, GL_COLOR_ATTACHMENT0 ); funcs->p_glNamedFramebufferReadBuffer( fbo, drawable->doublebuffer ? GL_COLOR_ATTACHMENT1 : GL_COLOR_ATTACHMENT0 ); TRACE( "drawable %p created framebuffer %u\n", drawable, fbo ); + ret = funcs->p_glCheckNamedFramebufferStatus( fbo, GL_FRAMEBUFFER ); + if (ret != GL_FRAMEBUFFER_COMPLETE) WARN( "glCheckNamedFramebufferStatus returned %#x\n", ret ); return fbo; } @@ -480,7 +485,7 @@ static void framebuffer_surface_flush( struct opengl_drawable *drawable, UINT fl make_null_context_current( NULL ); - if (flags & GL_FLUSH_UPDATED && drawable->read_fbo) + if (flags & GL_FLUSH_UPDATED) { struct wgl_pixel_format draw_desc = pixel_formats[drawable->format - 1], read_desc = draw_desc; SIZE size = drawable->virtual_size; @@ -541,16 +546,15 @@ static struct opengl_drawable *framebuffer_surface_create( int format, struct cl make_null_context_current( NULL ); read_desc.samples = read_desc.sample_buffers = 0; - surface->base.read_fbo = create_framebuffer( &surface->base, &read_desc ); + surface->base.read_fbo = create_framebuffer( &surface->base, &read_desc, surface->base.virtual_size ); if (!surface->base.read_fbo) ERR( "Failed to create read framebuffer object\n" ); if (!draw_desc.sample_buffers) surface->base.draw_fbo = surface->base.read_fbo; - else surface->base.draw_fbo = create_framebuffer( &surface->base, &draw_desc ); + else surface->base.draw_fbo = create_framebuffer( &surface->base, &draw_desc, surface->base.virtual_size ); if (!surface->base.draw_fbo) ERR( "Failed to create draw framebuffer object\n" ); make_client_context_current(); - framebuffer_surface_flush( &surface->base, GL_FLUSH_UPDATED ); return &surface->base; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11725
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/win32u/opengl.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index c4a29e05d7f..aebba6da5d1 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -352,7 +352,8 @@ static void init_framebuffer_attachment( struct opengl_drawable *drawable, GLenu switch (type) { case GL_RENDERBUFFER: - funcs->p_glNamedRenderbufferStorageMultisample( name, desc->samples, internal_format, size.cx, size.cy ); + funcs->p_glBindRenderbuffer( GL_RENDERBUFFER, name ); + funcs->p_glRenderbufferStorageMultisample( GL_RENDERBUFFER, desc->samples, internal_format, size.cx, size.cy ); break; default: ERR( "Unexpected type %#x\n", type ); @@ -369,8 +370,8 @@ static void resize_framebuffer_attachment( struct opengl_drawable *drawable, GLe GLenum type; GLuint name; - funcs->p_glGetNamedFramebufferAttachmentParameteriv( fbo, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, (GLint *)&name ); - funcs->p_glGetNamedFramebufferAttachmentParameteriv( fbo, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, (GLint *)&type ); + funcs->p_glGetFramebufferAttachmentParameteriv( GL_FRAMEBUFFER, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, (GLint *)&name ); + funcs->p_glGetFramebufferAttachmentParameteriv( GL_FRAMEBUFFER, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, (GLint *)&type ); init_framebuffer_attachment( drawable, fbo, attachment, type, name, desc, size ); } @@ -382,8 +383,8 @@ static void destroy_framebuffer_attachment( struct opengl_drawable *drawable, GL GLenum type; GLuint name; - funcs->p_glGetNamedFramebufferAttachmentParameteriv( fbo, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, (GLint *)&name ); - funcs->p_glGetNamedFramebufferAttachmentParameteriv( fbo, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, (GLint *)&type ); + funcs->p_glGetFramebufferAttachmentParameteriv( GL_FRAMEBUFFER, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, (GLint *)&name ); + funcs->p_glGetFramebufferAttachmentParameteriv( GL_FRAMEBUFFER, attachment, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, (GLint *)&type ); switch (type) { @@ -403,31 +404,32 @@ static GLuint create_framebuffer( struct opengl_drawable *drawable, const struct if (drawable->doublebuffer) count *= 2; if (drawable->stereo) count *= 2; - funcs->p_glCreateFramebuffers( 1, &fbo ); + funcs->p_glGenFramebuffers( 1, &fbo ); + funcs->p_glBindFramebuffer( GL_FRAMEBUFFER, fbo ); for (GLuint i = 0; i < count; i++) { - funcs->p_glCreateRenderbuffers( 1, &name ); + funcs->p_glGenRenderbuffers( 1, &name ); init_framebuffer_attachment( drawable, fbo, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name, desc, size ); - funcs->p_glNamedFramebufferRenderbuffer( fbo, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name ); + funcs->p_glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name ); TRACE( "drawable %p/%u created color buffer %#x/%u, %s\n", drawable, fbo, GL_COLOR_ATTACHMENT0 + i, name, wine_dbgstr_point( (POINT *)&size ) ); } if (desc->pfd.cDepthBits) { - funcs->p_glCreateRenderbuffers( 1, &name ); + funcs->p_glGenRenderbuffers( 1, &name ); init_framebuffer_attachment( drawable, fbo, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, name, desc, size ); - funcs->p_glNamedFramebufferRenderbuffer( fbo, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, name ); - if (desc->pfd.cStencilBits) funcs->p_glNamedFramebufferRenderbuffer( fbo, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, name ); + funcs->p_glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, name ); + if (desc->pfd.cStencilBits) funcs->p_glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, name ); TRACE( "drawable %p/%u created depth buffer %u, %s\n", drawable, fbo, name, wine_dbgstr_point( (POINT *)&size ) ); } - funcs->p_glNamedFramebufferDrawBuffer( fbo, GL_COLOR_ATTACHMENT0 ); - funcs->p_glNamedFramebufferReadBuffer( fbo, drawable->doublebuffer ? GL_COLOR_ATTACHMENT1 : GL_COLOR_ATTACHMENT0 ); + funcs->p_glDrawBuffer( GL_COLOR_ATTACHMENT0 ); + funcs->p_glReadBuffer( drawable->doublebuffer ? GL_COLOR_ATTACHMENT1 : GL_COLOR_ATTACHMENT0 ); TRACE( "drawable %p created framebuffer %u\n", drawable, fbo ); - ret = funcs->p_glCheckNamedFramebufferStatus( fbo, GL_FRAMEBUFFER ); - if (ret != GL_FRAMEBUFFER_COMPLETE) WARN( "glCheckNamedFramebufferStatus returned %#x\n", ret ); + ret = funcs->p_glCheckFramebufferStatus( GL_FRAMEBUFFER ); + if (ret != GL_FRAMEBUFFER_COMPLETE) WARN( "glCheckFramebufferStatus returned %#x\n", ret ); return fbo; } @@ -440,11 +442,13 @@ static void resize_framebuffer( struct opengl_drawable *drawable, const struct w if (drawable->doublebuffer) count *= 2; if (drawable->stereo) count *= 2; + funcs->p_glBindFramebuffer( GL_FRAMEBUFFER, fbo ); + for (GLuint i = 0; i < count; i++) resize_framebuffer_attachment( drawable, fbo, GL_COLOR_ATTACHMENT0 + i, desc, size ); if (desc->pfd.cDepthBits) resize_framebuffer_attachment( drawable, fbo, GL_DEPTH_ATTACHMENT, desc, size ); - ret = funcs->p_glCheckNamedFramebufferStatus( fbo, GL_FRAMEBUFFER ); - if (ret != GL_FRAMEBUFFER_COMPLETE) WARN( "glCheckNamedFramebufferStatus returned %#x\n", ret ); + ret = funcs->p_glCheckFramebufferStatus( GL_FRAMEBUFFER ); + if (ret != GL_FRAMEBUFFER_COMPLETE) WARN( "glCheckFramebufferStatus returned %#x\n", ret ); TRACE( "drawable %p/%u resized buffers to %s\n", drawable, fbo, wine_dbgstr_point( (POINT *)&size ) ); } @@ -456,6 +460,8 @@ static void destroy_framebuffer( struct opengl_drawable *drawable, const struct if (drawable->doublebuffer) count *= 2; if (drawable->stereo) count *= 2; + funcs->p_glBindFramebuffer( GL_FRAMEBUFFER, fbo ); + for (GLuint i = 0; i < count; i++) destroy_framebuffer_attachment( drawable, fbo, GL_COLOR_ATTACHMENT0 + i ); if (desc->pfd.cDepthBits) destroy_framebuffer_attachment( drawable, fbo, GL_DEPTH_ATTACHMENT ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11725
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/opengl32/wgl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dlls/opengl32/wgl.c b/dlls/opengl32/wgl.c index 142e82f5ee4..ab0faeea748 100644 --- a/dlls/opengl32/wgl.c +++ b/dlls/opengl32/wgl.c @@ -473,6 +473,9 @@ static void init_object_table( struct object_table *table, enum object_type type { InitializeSRWLock( &table->lock ); table->type = type; + /* always handle name allocations for objects used on the unix side */ + table->implicit = type == OBJ_TYPE_FRAMEBUFFER || type == OBJ_TYPE_RENDERBUFFER || + type == OBJ_TYPE_TEXTURE || type == OBJ_TYPE_BUFFER; } struct display_lists -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11725
From: Rémi Bernon <rbernon@codeweavers.com> --- dlls/win32u/opengl.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/dlls/win32u/opengl.c b/dlls/win32u/opengl.c index aebba6da5d1..d509e99fdae 100644 --- a/dlls/win32u/opengl.c +++ b/dlls/win32u/opengl.c @@ -322,6 +322,18 @@ static GLenum color_format_from_pfd( const struct wgl_pixel_format *desc ) return 0; } +static GLenum format_from_pfd( const struct wgl_pixel_format *desc ) +{ + if (desc->pfd.cAlphaBits) return GL_RGBA; + if (desc->pfd.cBlueBits) return GL_RGB; + if (desc->pfd.cGreenBits) return GL_RG; + if (desc->pfd.cRedBits) return GL_RED; + + FIXME( "Unsupported format type %u bits %u/%u/%u/%u\n", desc->pixel_type, desc->pfd.cRedBits, + desc->pfd.cGreenBits, desc->pfd.cBlueBits, desc->pfd.cAlphaBits ); + return 0; +} + static GLenum depth_format_from_pfd( const struct wgl_pixel_format *desc ) { TRACE( "format bits %u/%u\n", desc->pfd.cStencilBits, desc->pfd.cDepthBits ); @@ -352,9 +364,16 @@ static void init_framebuffer_attachment( struct opengl_drawable *drawable, GLenu switch (type) { case GL_RENDERBUFFER: + if (attachment != GL_DEPTH_ATTACHMENT && !desc->samples) ERR( "Unexpected samples %u\n", desc->samples ); funcs->p_glBindRenderbuffer( GL_RENDERBUFFER, name ); funcs->p_glRenderbufferStorageMultisample( GL_RENDERBUFFER, desc->samples, internal_format, size.cx, size.cy ); break; + case GL_TEXTURE: + if (desc->samples) ERR( "Unexpected samples %u\n", desc->samples ); + funcs->p_glBindTexture( GL_TEXTURE_2D, name ); + funcs->p_glTexImage2D( GL_TEXTURE_2D, 0, internal_format, size.cx, size.cy, 0, format_from_pfd( desc ), GL_BYTE, NULL ); + funcs->p_glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0 ); + break; default: ERR( "Unexpected type %#x\n", type ); return; @@ -389,6 +408,7 @@ static void destroy_framebuffer_attachment( struct opengl_drawable *drawable, GL switch (type) { case GL_RENDERBUFFER: funcs->p_glDeleteRenderbuffers( 1, &name ); break; + case GL_TEXTURE: funcs->p_glDeleteTextures( 1, &name ); break; default: ERR( "Unexpected type %#x\n", type ); return; } @@ -409,9 +429,18 @@ static GLuint create_framebuffer( struct opengl_drawable *drawable, const struct for (GLuint i = 0; i < count; i++) { - funcs->p_glGenRenderbuffers( 1, &name ); - init_framebuffer_attachment( drawable, fbo, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name, desc, size ); - funcs->p_glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name ); + if (desc->samples) + { + funcs->p_glGenRenderbuffers( 1, &name ); + init_framebuffer_attachment( drawable, fbo, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name, desc, size ); + funcs->p_glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, name ); + } + else + { + funcs->p_glGenTextures( 1, &name ); + init_framebuffer_attachment( drawable, fbo, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE, name, desc, size ); + funcs->p_glFramebufferTexture( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, name, 0 ); + } TRACE( "drawable %p/%u created color buffer %#x/%u, %s\n", drawable, fbo, GL_COLOR_ATTACHMENT0 + i, name, wine_dbgstr_point( (POINT *)&size ) ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11725
participants (2)
-
Rémi Bernon -
Rémi Bernon (@rbernon)