This moves the GLES implementation of piglit_rgbw_texture much closer to
the GL version.

Signed-off-by: Josh Triplett <j...@joshtriplett.org>
---
 tests/util/piglit-util-gles.c | 82 ++++++++++++++++++++++++-------------------
 1 file changed, 45 insertions(+), 37 deletions(-)

diff --git a/tests/util/piglit-util-gles.c b/tests/util/piglit-util-gles.c
index 29e8c4d..e4b3ec4 100644
--- a/tests/util/piglit-util-gles.c
+++ b/tests/util/piglit-util-gles.c
@@ -35,6 +35,46 @@
 
 #include "piglit-util-gl-common.h"
 
+static GLubyte *
+piglit_rgbw_image_ubyte(int w, int h, GLboolean alpha)
+{
+       GLubyte red[4]   = {255, 0, 0, 0};
+       GLubyte green[4] = {0, 255, 0, 64};
+       GLubyte blue[4]  = {0, 0, 255, 128};
+       GLubyte white[4] = {255, 255, 255, 255};
+       GLubyte *data;
+       int x, y;
+
+       if (!alpha) {
+               red[3] = 255;
+               green[3] = 255;
+               blue[3] = 255;
+               white[3] = 255;
+       }
+
+       data = malloc(w * h * 4 * sizeof(GLubyte));
+
+       for (y = 0; y < h; y++) {
+               for (x = 0; x < w; x++) {
+                       const GLubyte *color;
+
+                       if (x < w / 2 && y < h / 2)
+                               color = red;
+                       else if (y < h / 2)
+                               color = green;
+                       else if (x < w / 2)
+                               color = blue;
+                       else
+                               color = white;
+
+                       memcpy(data + (y * w + x) * 4, color,
+                              4 * sizeof(GLubyte));
+               }
+       }
+
+       return data;
+}
+
 /**
  * Generates a texture with the given internalFormat, w, h with a
  * teximage of r, g, b w quadrants.
@@ -47,20 +87,8 @@ GLuint
 piglit_rgbw_texture(GLenum format, int w, int h, GLboolean mip,
                    GLboolean alpha, GLenum basetype)
 {
-       GLubyte *data;
-       int size, x, y, level;
+       int size, level;
        GLuint tex;
-       GLubyte red[4]   = {255, 0, 0, 0};
-       GLubyte green[4] = {0, 255, 0, 64};
-       GLubyte blue[4]  = {0, 0, 255, 128};
-       GLubyte white[4] = {255, 255, 255, 255};
-
-       if (!alpha) {
-               red[3] = 255;
-               green[3] = 255;
-               blue[3] = 255;
-               white[3] = 255;
-       }
 
        glGenTextures(1, &tex);
        glBindTexture(GL_TEXTURE_2D, tex);
@@ -77,33 +105,14 @@ piglit_rgbw_texture(GLenum format, int w, int h, GLboolean 
mip,
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
                                GL_NEAREST);
        }
-       data = malloc(w * h * 4 * sizeof(GLubyte));
-
-       /* XXX: Do we want non-square textures?  Surely some day. */
-       assert(w == h);
-
-       for (level = 0, size = w; size > 0; level++, size >>= 1) {
-               for (y = 0; y < size; y++) {
-                       for (x = 0; x < size; x++) {
-                               const GLubyte *color;
 
-                               if (x < size / 2 && y < size / 2)
-                                       color = red;
-                               else if (y < size / 2)
-                                       color = green;
-                               else if (x < size / 2)
-                                       color = blue;
-                               else
-                                       color = white;
-
-                               memcpy(data + (y * size + x) * 4, color,
-                                      4 * sizeof(GLubyte));
-                       }
-               }
+       for (level = 0, size = w > h ? w : h; size > 0; level++, size >>= 1) {
+               GLubyte *data = piglit_rgbw_image_ubyte(w, h, alpha);
                glTexImage2D(GL_TEXTURE_2D, level,
                             format,
-                            size, size, 0,
+                            w, h, 0,
                             GL_RGBA, GL_UNSIGNED_BYTE, data);
+               free(data);
 
                if (!mip)
                        break;
@@ -113,6 +122,5 @@ piglit_rgbw_texture(GLenum format, int w, int h, GLboolean 
mip,
                if (h > 1)
                        h >>= 1;
        }
-       free(data);
        return tex;
 }
-- 
2.0.1

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to