diff options
author | Brian Paul <[email protected]> | 2010-10-26 18:01:50 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2010-10-26 18:05:37 -0600 |
commit | ccef2110edbcc418abebabecc42ee3d9c0e5ab7a (patch) | |
tree | 23be893a9a1cefcf1e843e72744e5cb2dd28d7cd /src/mesa/main/drawpix.c | |
parent | 705978e2831eb8b8bb23bd11ee08ce51d9b2915c (diff) |
mesa: call _mesa_valid_to_render() in glDrawPixels, glCopyPixels, glBitmap
This lets us simplify and consolidate some state checking code.
This implements the GL_INVALID_OPERATION check for all drawing commands
required by GL_EXT_texture_integer.
Diffstat (limited to 'src/mesa/main/drawpix.c')
-rw-r--r-- | src/mesa/main/drawpix.c | 76 |
1 files changed, 15 insertions, 61 deletions
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c index 890d0ab5a72..46adc67c1c5 100644 --- a/src/mesa/main/drawpix.c +++ b/src/mesa/main/drawpix.c @@ -40,17 +40,6 @@ #if FEATURE_drawpix -/** - * If a fragment program is enabled, check that it's valid. - * \return GL_TRUE if valid, GL_FALSE otherwise - */ -static GLboolean -valid_fragment_program(struct gl_context *ctx) -{ - return !(ctx->FragmentProgram.Enabled && !ctx->FragmentProgram._Enabled); -} - - /* * Execute glDrawPixels */ @@ -67,41 +56,21 @@ _mesa_DrawPixels( GLsizei width, GLsizei height, } /* We're not using the current vertex program, and the driver may install - * it's own. + * its own. Note: this may dirty some state. */ _mesa_set_vp_override(ctx, GL_TRUE); - if (ctx->NewState) { - _mesa_update_state(ctx); - } - - if (!valid_fragment_program(ctx)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glDrawPixels (invalid fragment program)"); - goto end; + /* Note: this call does state validation */ + if (!_mesa_valid_to_render(ctx, "glDrawPixels")) { + goto end; /* the error code was recorded */ } if (_mesa_error_check_format_type(ctx, format, type, GL_TRUE)) { - /* the error was already recorded */ - goto end; - } - - if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { - _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, - "glDrawPixels(incomplete framebuffer)" ); - goto end; + goto end; /* the error code was recorded */ } if (!ctx->Current.RasterPosValid) { - goto end; /* no-op, not an error */ - } - - if (_mesa_is_integer_format(format) && - !_mesa_is_fragment_shader_active(ctx)) { - /* A fragment shader is required when drawing integer formats */ - _mesa_error(ctx, GL_INVALID_OPERATION, - "glDrawPixels(integer format but no fragment shader)"); - goto end; + goto end; /* no-op, not an error */ } if (ctx->RenderMode == GL_RENDER) { @@ -175,22 +144,17 @@ _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height, } /* We're not using the current vertex program, and the driver may install - * it's own. + * it's own. Note: this may dirty some state. */ _mesa_set_vp_override(ctx, GL_TRUE); - if (ctx->NewState) { - _mesa_update_state(ctx); - } - - if (!valid_fragment_program(ctx)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glCopyPixels (invalid fragment program)"); - goto end; + /* Note: this call does state validation */ + if (!_mesa_valid_to_render(ctx, "glCopyPixels")) { + goto end; /* the error code was recorded */ } - if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT || - ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + /* Check read buffer's status (draw buffer was already checked) */ + if (ctx->ReadBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, "glCopyPixels(incomplete framebuffer)" ); goto end; @@ -251,19 +215,9 @@ _mesa_Bitmap( GLsizei width, GLsizei height, return; /* do nothing */ } - if (ctx->NewState) { - _mesa_update_state(ctx); - } - - if (!valid_fragment_program(ctx)) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "glBitmap (invalid fragment program)"); - return; - } - - if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { - _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, - "glBitmap(incomplete framebuffer)"); + /* Note: this call does state validation */ + if (!_mesa_valid_to_render(ctx, "glBitmap")) { + /* the error code was recorded */ return; } |