mesa: check frambuffer complete status before rendering
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user