diff options
author | Ian Romanick <[email protected]> | 2013-07-18 17:38:16 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2013-08-06 10:46:05 -0700 |
commit | 97965e87fc0771a99c16b639caed01e5d0b64353 (patch) | |
tree | 37dd8ee8845de1fa0e4e180c0d215a962bd470a7 | |
parent | 46b6f79fea1042604ebb61a8214188fb807316ff (diff) |
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 <[email protected]>
Reviewed-by: Kenneth Graunke <[email protected]> [v1]
Reviewed-by: Jordan Justen <[email protected]> [v1]
Cc: [email protected]
-rw-r--r-- | src/mapi/glapi/gen/EXT_framebuffer_object.xml | 2 | ||||
-rw-r--r-- | src/mesa/main/fbobject.c | 24 | ||||
-rw-r--r-- | src/mesa/main/tests/dispatch_sanity.cpp | 1 |
3 files changed, 19 insertions, 8 deletions
diff --git a/src/mapi/glapi/gen/EXT_framebuffer_object.xml b/src/mapi/glapi/gen/EXT_framebuffer_object.xml index 16c82a4a2c0..5fea61610b5 100644 --- a/src/mapi/glapi/gen/EXT_framebuffer_object.xml +++ b/src/mapi/glapi/gen/EXT_framebuffer_object.xml @@ -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"/> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index c6e6dd5c553..c0f617d6971 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -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); } diff --git a/src/mesa/main/tests/dispatch_sanity.cpp b/src/mesa/main/tests/dispatch_sanity.cpp index 34e07426559..45642562842 100644 --- a/src/mesa/main/tests/dispatch_sanity.cpp +++ b/src/mesa/main/tests/dispatch_sanity.cpp @@ -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 }, |