--- src/mesa/main/accum.c | 104 +++++++++++++++++++++++++------------------------- src/mesa/main/accum.h | 3 -- 2 files changed, 52 insertions(+), 55 deletions(-)
diff --git a/src/mesa/main/accum.c b/src/mesa/main/accum.c index ef74468..919c441 100644 --- a/src/mesa/main/accum.c +++ b/src/mesa/main/accum.c @@ -46,71 +46,20 @@ _mesa_ClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) tmp[2] = CLAMP( blue, -1.0F, 1.0F ); tmp[3] = CLAMP( alpha, -1.0F, 1.0F ); if (TEST_EQ_4V(tmp, ctx->Accum.ClearColor)) return; COPY_4FV( ctx->Accum.ClearColor, tmp ); } -void GLAPIENTRY -_mesa_Accum( GLenum op, GLfloat value ) -{ - GET_CURRENT_CONTEXT(ctx); - FLUSH_VERTICES(ctx, 0); - - switch (op) { - case GL_ADD: - case GL_MULT: - case GL_ACCUM: - case GL_LOAD: - case GL_RETURN: - /* OK */ - break; - default: - _mesa_error(ctx, GL_INVALID_ENUM, "glAccum(op)"); - return; - } - - if (ctx->DrawBuffer->Visual.haveAccumBuffer == 0) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glAccum(no accum buffer)"); - return; - } - - if (ctx->DrawBuffer != ctx->ReadBuffer) { - /* See GLX_SGI_make_current_read or WGL_ARB_make_current_read, - * or GL_EXT_framebuffer_blit. - */ - _mesa_error(ctx, GL_INVALID_OPERATION, - "glAccum(different read/draw buffers)"); - return; - } - - if (ctx->NewState) - _mesa_update_state(ctx); - - if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { - _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, - "glAccum(incomplete framebuffer)"); - return; - } - - if (ctx->RasterDiscard) - return; - - if (ctx->RenderMode == GL_RENDER) { - _mesa_accum(ctx, op, value); - } -} - - /** * Clear the accumulation buffer by mapping the renderbuffer and * writing the clear color to it. Called by the driver's implementation * of the glClear function. */ void _mesa_clear_accum_buffer(struct gl_context *ctx) { GLuint x, y, width, height; GLubyte *accMap; @@ -429,21 +378,21 @@ accum_return(struct gl_context *ctx, GLfloat value, ctx->Driver.UnmapRenderbuffer(ctx, accRb); } /** * Software fallback for glAccum. A hardware driver that supports * signed 16-bit color channels could implement hardware accumulation * operations, but no driver does so at this time. */ -void +static void _mesa_accum(struct gl_context *ctx, GLenum op, GLfloat value) { GLint xpos, ypos, width, height; if (!ctx->DrawBuffer->Attachment[BUFFER_ACCUM].Renderbuffer) { _mesa_warning(ctx, "Calling glAccum() without an accumulation buffer"); return; } if (!_mesa_check_conditional_render(ctx)) @@ -482,10 +431,61 @@ _mesa_accum(struct gl_context *ctx, GLenum op, GLfloat value) } } void _mesa_init_accum( struct gl_context *ctx ) { /* Accumulate buffer group */ ASSIGN_4V( ctx->Accum.ClearColor, 0.0, 0.0, 0.0, 0.0 ); } + + +void GLAPIENTRY +_mesa_Accum( GLenum op, GLfloat value ) +{ + GET_CURRENT_CONTEXT(ctx); + FLUSH_VERTICES(ctx, 0); + + switch (op) { + case GL_ADD: + case GL_MULT: + case GL_ACCUM: + case GL_LOAD: + case GL_RETURN: + /* OK */ + break; + default: + _mesa_error(ctx, GL_INVALID_ENUM, "glAccum(op)"); + return; + } + + if (ctx->DrawBuffer->Visual.haveAccumBuffer == 0) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glAccum(no accum buffer)"); + return; + } + + if (ctx->DrawBuffer != ctx->ReadBuffer) { + /* See GLX_SGI_make_current_read or WGL_ARB_make_current_read, + * or GL_EXT_framebuffer_blit. + */ + _mesa_error(ctx, GL_INVALID_OPERATION, + "glAccum(different read/draw buffers)"); + return; + } + + if (ctx->NewState) + _mesa_update_state(ctx); + + if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) { + _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT, + "glAccum(incomplete framebuffer)"); + return; + } + + if (ctx->RasterDiscard) + return; + + if (ctx->RenderMode == GL_RENDER) { + _mesa_accum(ctx, op, value); + } +} diff --git a/src/mesa/main/accum.h b/src/mesa/main/accum.h index ede2ecc..fe253a2 100644 --- a/src/mesa/main/accum.h +++ b/src/mesa/main/accum.h @@ -40,19 +40,16 @@ #include "main/glheader.h" struct gl_context; extern void GLAPIENTRY _mesa_ClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); void GLAPIENTRY _mesa_Accum( GLenum op, GLfloat value ); extern void -_mesa_accum(struct gl_context *ctx, GLenum op, GLfloat value); - -extern void _mesa_clear_accum_buffer(struct gl_context *ctx); extern void _mesa_init_accum( struct gl_context *ctx ); #endif /* ACCUM_H */ -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev