mesa: Add function to calculate an orthographic projection
[mesa.git] / src / mesa / main / clear.c
index c5d612f4a6cff07d7cc893b9dc56620eaaa6fe0a..ca0ecd95b8cb2dc3b972db4fa52c134a3f7b5c49 100644 (file)
@@ -144,7 +144,6 @@ static ALWAYS_INLINE void
 clear(struct gl_context *ctx, GLbitfield mask, bool no_error)
 {
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (!no_error) {
       if (mask & ~(GL_COLOR_BUFFER_BIT |
@@ -344,7 +343,6 @@ clear_bufferiv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
                const GLint *value, bool no_error)
 {
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (ctx->NewState) {
       _mesa_update_state( ctx );
@@ -464,12 +462,17 @@ clear_bufferuiv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
                 const GLuint *value, bool no_error)
 {
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (ctx->NewState) {
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION,
+                  "glClearBufferuiv(incomplete framebuffer)");
+      return;
+   }
+
    switch (buffer) {
    case GL_COLOR:
       {
@@ -553,12 +556,17 @@ clear_bufferfv(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
                const GLfloat *value, bool no_error)
 {
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (ctx->NewState) {
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION,
+                  "glClearBufferfv(incomplete framebuffer)");
+      return;
+   }
+
    switch (buffer) {
    case GL_DEPTH:
       /* Page 264 (page 280 of the PDF) of the OpenGL 3.0 spec says:
@@ -671,7 +679,6 @@ clear_bufferfi(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
    GLbitfield mask = 0;
 
    FLUSH_VERTICES(ctx, 0);
-   FLUSH_CURRENT(ctx, 0);
 
    if (!no_error) {
       if (buffer != GL_DEPTH_STENCIL) {
@@ -692,12 +699,6 @@ clear_bufferfi(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
                      drawbuffer);
          return;
       }
-
-      if (ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
-         _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
-                     "glClearBufferfi(incomplete framebuffer)");
-         return;
-      }
    }
 
    if (ctx->RasterDiscard)
@@ -707,6 +708,12 @@ clear_bufferfi(struct gl_context *ctx, GLenum buffer, GLint drawbuffer,
       _mesa_update_state( ctx );
    }
 
+   if (!no_error && ctx->DrawBuffer->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+      _mesa_error(ctx, GL_INVALID_FRAMEBUFFER_OPERATION_EXT,
+                  "glClearBufferfi(incomplete framebuffer)");
+      return;
+   }
+
    if (ctx->DrawBuffer->Attachment[BUFFER_DEPTH].Renderbuffer)
       mask |= BUFFER_BIT_DEPTH;
    if (ctx->DrawBuffer->Attachment[BUFFER_STENCIL].Renderbuffer)