summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2010-03-10 14:32:56 -0700
committerBrian Paul <brianp@vmware.com>2010-03-10 14:37:05 -0700
commitd5ccbea63cb9ba96cd4c0e2f40824ec1939c806c (patch)
treec9ccc0418e8cd18ff919bf856bd6a240407dc128
parent3198cd4a65b135005515c6dd35d006330ce31c94 (diff)
progs/trivial: make clear-fbo-scissor.c work with other GL drivers
NVIDIA's driver requires that the texture that we're going to render into be complete. Need to set min/mag filters to non-mipmap modes. Plus added other error/debug checks.
-rw-r--r--progs/trivial/clear-fbo-scissor.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/progs/trivial/clear-fbo-scissor.c b/progs/trivial/clear-fbo-scissor.c
index 5ec0b57328..28c613ccfb 100644
--- a/progs/trivial/clear-fbo-scissor.c
+++ b/progs/trivial/clear-fbo-scissor.c
@@ -11,6 +11,7 @@
#include <string.h>
#include <GL/glew.h>
#include <GL/glut.h>
+#include <GL/glu.h>
static int Width = 512, Height = 512;
@@ -18,12 +19,20 @@ static GLuint MyFB, MyRB;
static GLboolean UseTex = GL_FALSE;
-#define CheckError() assert(glGetError() == 0)
+#define CheckError() \
+ do { \
+ GLenum err = glGetError(); \
+ if (err != GL_NO_ERROR) \
+ printf("Error: %s\n", gluErrorString(err)); \
+ assert(err == GL_NO_ERROR); \
+ } while (0)
static void
Init(void)
{
+ GLenum status;
+
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
@@ -45,6 +54,8 @@ Init(void)
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT,
GL_TEXTURE_2D, tex, 0);
@@ -59,6 +70,11 @@ Init(void)
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, Width, Height);
}
+ status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
+ if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
+ fprintf(stderr, "Framebuffer object is incomplete (0x%x)!\n", status);
+ }
+
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}
@@ -134,6 +150,8 @@ Draw(void)
glClear(GL_COLOR_BUFFER_BIT);
}
+ CheckError();
+
/* gray triangle in middle, pointing up */
glColor3f(0.5, 0.5, 0.5);
glBegin(GL_TRIANGLES);