[waffle] [PATCH v2] examples/gl_basic: use glReadPixels to verify correct drawing
Jordan Justen
jordan.l.justen at intel.com
Mon Aug 13 17:11:43 PDT 2012
Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
examples/gl_basic.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/examples/gl_basic.c b/examples/gl_basic.c
index 628c25d..800756a 100644
--- a/examples/gl_basic.c
+++ b/examples/gl_basic.c
@@ -91,6 +91,14 @@ error_waffle(void)
}
static void
+gl_basic_error(const char *str)
+{
+ fflush(stdout);
+ fprintf(stderr, "gl_basic: error: %s\n", str);
+ exit(EXIT_FAILURE);
+}
+
+static void
error_get_gl_symbol(const char *name)
{
fflush(stdout);
@@ -244,8 +252,9 @@ parse_args(int argc, char *argv[], struct options *opts)
static bool
draw(struct waffle_window *window)
{
- int i;
+ int i, j;
bool ok;
+ unsigned char *colors;
static const struct timespec sleep_time = {
// 0.5 sec
@@ -262,6 +271,23 @@ draw(struct waffle_window *window)
}
glClear(GL_COLOR_BUFFER_BIT);
+
+ colors = calloc(WINDOW_WIDTH * WINDOW_HEIGHT * 4, sizeof(*colors));
+ glReadPixels(0, 0,
+ WINDOW_WIDTH, WINDOW_HEIGHT,
+ GL_RGBA, GL_UNSIGNED_BYTE,
+ colors);
+ for (j = 0; j < WINDOW_WIDTH * WINDOW_HEIGHT * 4; j += 4) {
+ if ((colors[j] != (i == 0 ? 0xff : 0)) ||
+ (colors[j+1] != (i == 1 ? 0xff : 0)) ||
+ (colors[j+2] != (i == 2 ? 0xff : 0)) ||
+ (colors[j+3] != 0xff)) {
+ free(colors);
+ gl_basic_error("glReadPixels returned unexpected result");
+ }
+ }
+ free(colors);
+
ok = waffle_window_swap_buffers(window);
if (!ok)
return false;
--
1.7.9.5
More information about the waffle
mailing list