summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Hourihane <alanh@vmware.com>2009-01-15 11:51:39 +0000
committerAlan Hourihane <alanh@vmware.com>2009-01-15 11:56:00 +0000
commitfbf13bcb8aeeeb70475d9bd8a0d0640936d27047 (patch)
treeded8c0867f886d0eaf8b3b63bf4596551803538b
parent8f8435637d5915cbb217340e831728bf10333c78 (diff)
mesa: check frambuffer complete status before rendering
-rw-r--r--src/mesa/main/api_validate.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 98dfbb105f..59c2debb22 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -78,6 +78,23 @@ max_buffer_index(GLcontext *ctx, GLuint count, GLenum type,
return max;
}
+static GLboolean
+check_valid_to_render(GLcontext *ctx, char *function)
+{
+ if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+ _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
+ "glDraw%s(incomplete framebuffer)", function);
+ return GL_FALSE;
+ }
+
+ /* Always need vertex positions, unless a vertex program is in use */
+ if (!ctx->VertexProgram._Current &&
+ !ctx->Array.ArrayObj->Vertex.Enabled &&
+ !ctx->Array.ArrayObj->VertexAttrib[0].Enabled)
+ return GL_FALSE;
+
+ return GL_TRUE;
+}
GLboolean
_mesa_validate_DrawElements(GLcontext *ctx,
@@ -108,10 +125,7 @@ _mesa_validate_DrawElements(GLcontext *ctx,
if (ctx->NewState)
_mesa_update_state(ctx);
- /* Always need vertex positions, unless a vertex program is in use */
- if (!ctx->VertexProgram._Current &&
- !ctx->Array.ArrayObj->Vertex.Enabled &&
- !ctx->Array.ArrayObj->VertexAttrib[0].Enabled)
+ if (!check_valid_to_render(ctx, "Elements"))
return GL_FALSE;
/* Vertex buffer object tests */
@@ -155,7 +169,6 @@ _mesa_validate_DrawElements(GLcontext *ctx,
return GL_TRUE;
}
-
GLboolean
_mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode,
GLuint start, GLuint end,
@@ -190,10 +203,7 @@ _mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode,
if (ctx->NewState)
_mesa_update_state(ctx);
- /* Always need vertex positions, unless a vertex program is in use */
- if (!ctx->VertexProgram._Current &&
- !ctx->Array.ArrayObj->Vertex.Enabled &&
- !ctx->Array.ArrayObj->VertexAttrib[0].Enabled)
+ if (!check_valid_to_render(ctx, "RangeElements"))
return GL_FALSE;
/* Vertex buffer object tests */
@@ -261,10 +271,7 @@ _mesa_validate_DrawArrays(GLcontext *ctx,
if (ctx->NewState)
_mesa_update_state(ctx);
- /* Always need vertex positions, unless a vertex program is in use */
- if (!ctx->VertexProgram._Current &&
- !ctx->Array.ArrayObj->Vertex.Enabled &&
- !ctx->Array.ArrayObj->VertexAttrib[0].Enabled)
+ if (!check_valid_to_render(ctx, "Arrays"))
return GL_FALSE;
if (ctx->Const.CheckArrayBounds) {