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