mesa: consolidate framebuffer target lookup code

This commit is contained in:
Brian Paul
2011-02-28 18:24:25 -07:00
parent fec26193fb
commit c6991433ef

View File

@@ -159,6 +159,29 @@ invalidate_framebuffer(struct gl_framebuffer *fb)
} }
/**
* Return the gl_framebuffer object which corresponds to the given
* framebuffer target, such as GL_DRAW_FRAMEBUFFER.
* Check support for GL_EXT_framebuffer_blit to determine if certain
* targets are legal.
* \return gl_framebuffer pointer or NULL if target is illegal
*/
static struct gl_framebuffer *
get_framebuffer_target(struct gl_context *ctx, GLenum target)
{
switch (target) {
case GL_DRAW_FRAMEBUFFER:
return ctx->Extensions.EXT_framebuffer_blit ? ctx->DrawBuffer : NULL;
case GL_READ_FRAMEBUFFER:
return ctx->Extensions.EXT_framebuffer_blit ? ctx->ReadBuffer : NULL;
case GL_FRAMEBUFFER_EXT:
return ctx->DrawBuffer;
default:
return NULL;
}
}
/** /**
* Given a GL_*_ATTACHMENTn token, return a pointer to the corresponding * Given a GL_*_ATTACHMENTn token, return a pointer to the corresponding
* gl_renderbuffer_attachment object. * gl_renderbuffer_attachment object.
@@ -1677,29 +1700,10 @@ _mesa_CheckFramebufferStatusEXT(GLenum target)
ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
switch (target) { buffer = get_framebuffer_target(ctx, target);
#if FEATURE_EXT_framebuffer_blit if (!buffer) {
case GL_DRAW_FRAMEBUFFER_EXT:
if (!ctx->Extensions.EXT_framebuffer_blit) {
_mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)");
return 0;
}
buffer = ctx->DrawBuffer;
break;
case GL_READ_FRAMEBUFFER_EXT:
if (!ctx->Extensions.EXT_framebuffer_blit) {
_mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)");
return 0;
}
buffer = ctx->ReadBuffer;
break;
#endif
case GL_FRAMEBUFFER_EXT:
buffer = ctx->DrawBuffer;
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)"); _mesa_error(ctx, GL_INVALID_ENUM, "glCheckFramebufferStatus(target)");
return 0; /* formerly GL_FRAMEBUFFER_STATUS_ERROR_EXT */ return 0;
} }
if (buffer->Name == 0) { if (buffer->Name == 0) {
@@ -1729,33 +1733,16 @@ framebuffer_texture(struct gl_context *ctx, const char *caller, GLenum target,
struct gl_renderbuffer_attachment *att; struct gl_renderbuffer_attachment *att;
struct gl_texture_object *texObj = NULL; struct gl_texture_object *texObj = NULL;
struct gl_framebuffer *fb; struct gl_framebuffer *fb;
GLboolean error = GL_FALSE;
ASSERT_OUTSIDE_BEGIN_END(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx);
switch (target) { fb = get_framebuffer_target(ctx, target);
case GL_READ_FRAMEBUFFER_EXT: if (!fb) {
error = !ctx->Extensions.EXT_framebuffer_blit;
fb = ctx->ReadBuffer;
break;
case GL_DRAW_FRAMEBUFFER_EXT:
error = !ctx->Extensions.EXT_framebuffer_blit;
/* fall-through */
case GL_FRAMEBUFFER_EXT:
fb = ctx->DrawBuffer;
break;
default:
error = GL_TRUE;
}
if (error) {
_mesa_error(ctx, GL_INVALID_ENUM, _mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferTexture%sEXT(target=0x%x)", caller, target); "glFramebufferTexture%sEXT(target=0x%x)", caller, target);
return; return;
} }
ASSERT(fb);
/* check framebuffer binding */ /* check framebuffer binding */
if (fb->Name == 0) { if (fb->Name == 0) {
_mesa_error(ctx, GL_INVALID_OPERATION, _mesa_error(ctx, GL_INVALID_OPERATION,
@@ -1936,31 +1923,9 @@ _mesa_FramebufferRenderbufferEXT(GLenum target, GLenum attachment,
ASSERT_OUTSIDE_BEGIN_END(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx);
switch (target) { fb = get_framebuffer_target(ctx, target);
#if FEATURE_EXT_framebuffer_blit if (!fb) {
case GL_DRAW_FRAMEBUFFER_EXT: _mesa_error(ctx, GL_INVALID_ENUM, "glFramebufferRenderbufferEXT(target)");
if (!ctx->Extensions.EXT_framebuffer_blit) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferRenderbufferEXT(target)");
return;
}
fb = ctx->DrawBuffer;
break;
case GL_READ_FRAMEBUFFER_EXT:
if (!ctx->Extensions.EXT_framebuffer_blit) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferRenderbufferEXT(target)");
return;
}
fb = ctx->ReadBuffer;
break;
#endif
case GL_FRAMEBUFFER_EXT:
fb = ctx->DrawBuffer;
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM,
"glFramebufferRenderbufferEXT(target)");
return; return;
} }
@@ -2040,29 +2005,8 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment,
ASSERT_OUTSIDE_BEGIN_END(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx);
switch (target) { buffer = get_framebuffer_target(ctx, target);
#if FEATURE_EXT_framebuffer_blit if (!buffer) {
case GL_DRAW_FRAMEBUFFER_EXT:
if (!ctx->Extensions.EXT_framebuffer_blit) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glGetFramebufferAttachmentParameterivEXT(target)");
return;
}
buffer = ctx->DrawBuffer;
break;
case GL_READ_FRAMEBUFFER_EXT:
if (!ctx->Extensions.EXT_framebuffer_blit) {
_mesa_error(ctx, GL_INVALID_ENUM,
"glGetFramebufferAttachmentParameterivEXT(target)");
return;
}
buffer = ctx->ReadBuffer;
break;
#endif
case GL_FRAMEBUFFER_EXT:
buffer = ctx->DrawBuffer;
break;
default:
_mesa_error(ctx, GL_INVALID_ENUM, _mesa_error(ctx, GL_INVALID_ENUM,
"glGetFramebufferAttachmentParameterivEXT(target)"); "glGetFramebufferAttachmentParameterivEXT(target)");
return; return;