added code to detect GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT error
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 1 Jun 2005 00:50:23 +0000 (00:50 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 1 Jun 2005 00:50:23 +0000 (00:50 +0000)
src/mesa/main/fbobject.c

index 89eb03bab4d994d90ea7d18ce88440f79bb4229e..6dae796620ddde63f2c71046b3d88a8a7d9c981b 100644 (file)
@@ -339,9 +339,6 @@ test_attachment_completeness(const GLcontext *ctx, GLenum format,
  * Status field with the results.
  * Also update the framebuffer's Width and Height fields if the
  * framebuffer is complete.
- *
- * XXX Need to check for FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT!
- *
  */
 void
 _mesa_test_framebuffer_completeness(GLcontext *ctx, struct gl_framebuffer *fb)
@@ -351,6 +348,8 @@ _mesa_test_framebuffer_completeness(GLcontext *ctx, struct gl_framebuffer *fb)
    GLuint w = 0, h = 0;
    GLint i;
 
+   assert(fb->Name != 0);
+
    numImages = 0;
    fb->Width = 0;
    fb->Height = 0;
@@ -446,6 +445,22 @@ _mesa_test_framebuffer_completeness(GLcontext *ctx, struct gl_framebuffer *fb)
       }
    }
 
+   /* Check if any renderbuffer is attached more than once */
+   for (i = 0; i < BUFFER_COUNT - 1; i++) {
+      struct gl_renderbuffer *rb_i = fb->Attachment[i].Renderbuffer;
+      if (rb_i) {
+         GLint j;
+         for (j = i + 1; j < BUFFER_COUNT; j++) {
+            struct gl_renderbuffer *rb_j = fb->Attachment[j].Renderbuffer;
+            if (rb_i == rb_j) {
+               fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT;
+               return;
+            }
+         }
+      }
+   }
+
+
    if (numImages == 0) {
       fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT;
       return;