mesa: Treat glBindRenderbuffer and glBindRenderbufferEXT correctly
Allow user-generated names for glBindRenderbufferEXT on desktop GL. Disallow its use altogether for core profiles. v2: Disallow glBindRenderbufferEXT in 3.1 by not installing it in the dispatch table. Suggested by Jordan. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> [v1] Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> [v1] Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
46b6f79fea
commit
97965e87fc
|
@ -78,7 +78,7 @@
|
|||
<return type="GLboolean"/>
|
||||
</function>
|
||||
|
||||
<function name="BindRenderbufferEXT" offset="assign">
|
||||
<function name="BindRenderbufferEXT" offset="assign" deprecated="3.1">
|
||||
<param name="target" type="GLenum"/>
|
||||
<param name="renderbuffer" type="GLuint"/>
|
||||
<glx rop="4316"/>
|
||||
|
|
|
@ -1104,8 +1104,8 @@ _mesa_IsRenderbuffer(GLuint renderbuffer)
|
|||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
|
||||
static void
|
||||
bind_renderbuffer(GLenum target, GLuint renderbuffer, bool allow_user_names)
|
||||
{
|
||||
struct gl_renderbuffer *newRb;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
@ -1125,9 +1125,7 @@ _mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
|
|||
/* ID was reserved, but no real renderbuffer object made yet */
|
||||
newRb = NULL;
|
||||
}
|
||||
else if (!newRb
|
||||
&& _mesa_is_desktop_gl(ctx)
|
||||
&& ctx->Extensions.ARB_framebuffer_object) {
|
||||
else if (!newRb && !allow_user_names) {
|
||||
/* All RB IDs must be Gen'd */
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION, "glBindRenderbuffer(buffer)");
|
||||
return;
|
||||
|
@ -1154,11 +1152,25 @@ _mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
|
|||
_mesa_reference_renderbuffer(&ctx->CurrentRenderbuffer, newRb);
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindRenderbuffer(GLenum target, GLuint renderbuffer)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
/* OpenGL ES glBindRenderbuffer and glBindRenderbufferOES use this same
|
||||
* entry point, but they allow the use of user-generated names.
|
||||
*/
|
||||
bind_renderbuffer(target, renderbuffer, _mesa_is_gles(ctx));
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindRenderbufferEXT(GLenum target, GLuint renderbuffer)
|
||||
{
|
||||
_mesa_BindRenderbuffer(target, renderbuffer);
|
||||
/* This function should not be in the dispatch table for core profile /
|
||||
* OpenGL 3.1, so execution should never get here in those cases -- no
|
||||
* need for an explicit test.
|
||||
*/
|
||||
bind_renderbuffer(target, renderbuffer, true);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -529,7 +529,6 @@ const struct function gl_core_functions_possible[] = {
|
|||
|
||||
/* GL_EXT_framebuffer_object */
|
||||
{ "glBindFramebufferEXT", 31, -1 },
|
||||
{ "glBindRenderbufferEXT", 31, -1 },
|
||||
|
||||
/* GL 3.2 */
|
||||
{ "glGetInteger64i_v", 32, -1 },
|
||||
|
|
Loading…
Reference in New Issue