[Piglit] [PATCH 04/16] util: Allow non-ES2 code to draw_rect with non-fixed-function arrays
Ian Romanick
idr at freedesktop.org
Mon Aug 26 11:37:03 PDT 2013
From: Ian Romanick <ian.d.romanick at intel.com>
This will be used in future commits.
Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Cc: Matt Turner <mattst88 at gmail.com>
Cc: Paul Berry <stereoytpe441 at gmail.com>
---
tests/util/piglit-util-gl-common.c | 86 ++++++++++++++++++++++++--------------
tests/util/piglit-util-gl-common.h | 3 +-
2 files changed, 56 insertions(+), 33 deletions(-)
diff --git a/tests/util/piglit-util-gl-common.c b/tests/util/piglit-util-gl-common.c
index b5e87bf..c097d8f 100644
--- a/tests/util/piglit-util-gl-common.c
+++ b/tests/util/piglit-util-gl-common.c
@@ -599,46 +599,68 @@ required_gl_version_from_glsl_version(unsigned glsl_version)
* float tex[4][2];
*
* if not NULL.
+ *
+ * \param fixed_function_attribute Should fixed-function attributes (e.g.,
+ * \c glVertexPointer) be used? In an OpenGL
+ * core profile this must be \c true. In
+ * OpenGL ES the value is ignored.
*/
void
-piglit_draw_rect_from_arrays(const void *verts, const void *tex)
+piglit_draw_rect_from_arrays(const void *verts, const void *tex,
+ bool fixed_function_attributes)
{
+#if defined(PIGLIT_USE_OPENGL_ES1)
+#define USE_FF(x) true
+#elif defined(PIGLIT_USE_OPENGL_ES2) || defined(PIGLIT_USE_OPENGL_ES3)
+#define USE_FF(x) false
+#elif defined(PIGLIT_USE_OPENGL)
+#define USE_FF(x) x
+#else
+#error "don't know how to draw arrays"
+#endif
+
#if defined(PIGLIT_USE_OPENGL_ES1) || defined(PIGLIT_USE_OPENGL)
- if (verts) {
- glVertexPointer(4, GL_FLOAT, 0, verts);
- glEnableClientState(GL_VERTEX_ARRAY);
- }
+ if (USE_FF(fixed_function_attributes)) {
+ if (verts) {
+ glVertexPointer(4, GL_FLOAT, 0, verts);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ }
- if (tex) {
- glTexCoordPointer(2, GL_FLOAT, 0, tex);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- }
+ if (tex) {
+ glTexCoordPointer(2, GL_FLOAT, 0, tex);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ }
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
- if (verts)
- glDisableClientState(GL_VERTEX_ARRAY);
- if (tex)
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
-#elif defined(PIGLIT_USE_OPENGL_ES2) ||defined(PIGLIT_USE_OPENGL_ES3)
- if (verts) {
- glVertexAttribPointer(PIGLIT_ATTRIB_POS, 4, GL_FLOAT, GL_FALSE, 0, verts);
- glEnableVertexAttribArray(PIGLIT_ATTRIB_POS);
+ if (verts)
+ glDisableClientState(GL_VERTEX_ARRAY);
+ if (tex)
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
+#endif
+#if defined(PIGLIT_USE_OPENGL_ES2) || defined(PIGLIT_USE_OPENGL_ES3) \
+ || defined(PIGLIT_USE_OPENGL)
+ if (!USE_FF(fixed_function_attributes)) {
+ if (verts) {
+ glVertexAttribPointer(PIGLIT_ATTRIB_POS, 4, GL_FLOAT,
+ GL_FALSE, 0, verts);
+ glEnableVertexAttribArray(PIGLIT_ATTRIB_POS);
+ }
- if (tex) {
- glVertexAttribPointer(PIGLIT_ATTRIB_TEX, 2, GL_FLOAT, GL_FALSE, 0, tex);
- glEnableVertexAttribArray(PIGLIT_ATTRIB_TEX);
- }
+ if (tex) {
+ glVertexAttribPointer(PIGLIT_ATTRIB_TEX, 2, GL_FLOAT,
+ GL_FALSE, 0, tex);
+ glEnableVertexAttribArray(PIGLIT_ATTRIB_TEX);
+ }
- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
- if (verts)
- glDisableVertexAttribArray(PIGLIT_ATTRIB_POS);
- if (tex)
- glDisableVertexAttribArray(PIGLIT_ATTRIB_TEX);
-#else
-# error "don't know how to draw arrays"
+ if (verts)
+ glDisableVertexAttribArray(PIGLIT_ATTRIB_POS);
+ if (tex)
+ glDisableVertexAttribArray(PIGLIT_ATTRIB_TEX);
+ }
#endif
}
@@ -667,7 +689,7 @@ piglit_draw_rect(float x, float y, float w, float h)
verts[3][2] = 0.0;
verts[3][3] = 1.0;
- piglit_draw_rect_from_arrays(verts, NULL);
+ piglit_draw_rect_from_arrays(verts, NULL, true);
}
/**
@@ -695,7 +717,7 @@ piglit_draw_rect_z(float z, float x, float y, float w, float h)
verts[3][2] = z;
verts[3][3] = 1.0;
- piglit_draw_rect_from_arrays(verts, NULL);
+ piglit_draw_rect_from_arrays(verts, NULL, true);
}
/**
@@ -734,5 +756,5 @@ piglit_draw_rect_tex(float x, float y, float w, float h,
tex[3][0] = tx + tw;
tex[3][1] = ty + th;
- piglit_draw_rect_from_arrays(verts, tex);
+ piglit_draw_rect_from_arrays(verts, tex, true);
}
diff --git a/tests/util/piglit-util-gl-common.h b/tests/util/piglit-util-gl-common.h
index ef87514..44e46ac 100644
--- a/tests/util/piglit-util-gl-common.h
+++ b/tests/util/piglit-util-gl-common.h
@@ -162,7 +162,8 @@ GLvoid piglit_draw_rect_z(float z, float x, float y, float w, float h);
GLvoid piglit_draw_rect_tex(float x, float y, float w, float h,
float tx, float ty, float tw, float th);
GLvoid piglit_draw_rect_back(float x, float y, float w, float h);
-void piglit_draw_rect_from_arrays(const void *verts, const void *tex);
+void piglit_draw_rect_from_arrays(const void *verts, const void *tex,
+ bool fixed_function_attributes);
unsigned short piglit_half_from_float(float val);
--
1.8.1.4
More information about the Piglit
mailing list