X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=cli%2Fsrc%2Fglxsimple.c;h=a4c9560dfb9e908b8d38ba8ca34486f08c67370c;hb=8351c1e187d8f65477db05a07bacd5d184c2b950;hp=0baf27f204955885569eaa8cb52ead2b83e37462;hpb=887c7197b508269486750075ec111a7507c5a236;p=apitrace-tests diff --git a/cli/src/glxsimple.c b/cli/src/glxsimple.c index 0baf27f..a4c9560 100644 --- a/cli/src/glxsimple.c +++ b/cli/src/glxsimple.c @@ -118,11 +118,11 @@ paint_rgb_using_glsl (double r, double g, double b) glUseProgram (0); } -static void -paint_rgb_using_texture (double r, double g, double b) +static GLuint +create_rgb_texture (double r, double g, double b) { uint8_t data[3]; - GLuint texture; + GLuint texture = 0; data[0] = (uint8_t) (255.0 * r); data[1] = (uint8_t) (255.0 * g); @@ -137,6 +137,14 @@ paint_rgb_using_texture (double r, double g, double b) 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, data); + return texture; +} + +static void +paint_using_texture (GLuint texture) +{ + glBindTexture (GL_TEXTURE_2D, texture); + glEnable (GL_TEXTURE_2D); draw_fullscreen_textured_quad (); @@ -147,7 +155,10 @@ paint_rgb_using_texture (double r, double g, double b) static void draw (Display *dpy, Window window, int width, int height) { +#define PASSES 2 + int i; GLenum glew_err; + GLuint texture[PASSES]; int visual_attr[] = { GLX_RGBA, @@ -179,17 +190,33 @@ draw (Display *dpy, Window window, int width, int height) set_2d_projection (); - /* Frame 1: Draw a solid (magenta) frame using glClear. */ - paint_rgb_using_clear (1, 0, 1); - glXSwapBuffers (dpy, window); +/* Simply count through some colors, frame by frame. */ +#define RGB(frame) (((frame+1)/4) % 2), (((frame+1)/2) % 2), ((frame+1) % 2) + + int frame = 0; + for (i = 0; i < PASSES; i++) { + + /* Frame: Draw a solid frame using glClear. */ + paint_rgb_using_clear (RGB(frame)); + glXSwapBuffers (dpy, window); + frame++; - /* Frame 2: Draw a solid (yellow) frame using GLSL. */ - paint_rgb_using_glsl (1, 1, 0); - glXSwapBuffers (dpy, window); + /* Frame: Draw a solid frame using GLSL. */ + paint_rgb_using_glsl (RGB(frame)); + glXSwapBuffers (dpy, window); + frame++; + + /* Frame: Draw a solid frame using a texture. */ + texture[i] = create_rgb_texture (RGB(frame)); + paint_using_texture (texture[i]); + glXSwapBuffers (dpy, window); + frame++; + } - /* Frame 3: Draw a solid (cyan) frame using a texture. */ - paint_rgb_using_texture (0, 1, 1); + /* Draw another frame with a re-used texture. */ + paint_using_texture (texture[0]); glXSwapBuffers (dpy, window); + frame++; /* Cleanup */ glXDestroyContext (dpy, ctx);