Mesa (lp-binning): progs/trivial: added two simple texture tests

Brian Paul brianp at kemper.freedesktop.org
Tue Dec 1 11:27:40 PST 2009


Module: Mesa
Branch: lp-binning
Commit: 344a2a9abbe22236e8511d8166023bf81c85b03f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=344a2a9abbe22236e8511d8166023bf81c85b03f

Author: Brian Paul <brianp at vmware.com>
Date:   Mon Nov 30 15:31:30 2009 -0700

progs/trivial: added two simple texture tests

One draws a series of quads with different textures.
The other draws with one texture which is changed with glTexSubImage2D().

---

 progs/trivial/Makefile    |    2 +
 progs/trivial/SConscript  |    2 +
 progs/trivial/sub-tex.c   |  137 +++++++++++++++++++++++++++++++++++++++++++
 progs/trivial/tex-quads.c |  143 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 284 insertions(+), 0 deletions(-)

diff --git a/progs/trivial/Makefile b/progs/trivial/Makefile
index 7072861..a788376 100644
--- a/progs/trivial/Makefile
+++ b/progs/trivial/Makefile
@@ -90,6 +90,8 @@ SOURCES = \
 	quadstrip-flat.c \
 	quadstrip.c \
 	readpixels.c \
+	sub-tex.c \
+	tex-quads.c \
 	tri-alpha.c \
 	tri-alpha-tex.c \
 	tri-array-interleaved.c \
diff --git a/progs/trivial/SConscript b/progs/trivial/SConscript
index 9a1f357..37a5329 100644
--- a/progs/trivial/SConscript
+++ b/progs/trivial/SConscript
@@ -77,6 +77,8 @@ progs = [
 	'quadstrip-cont',
 	'quadstrip-flat',
 	'quadstrip',
+	'sub-tex',
+	'tex-quads',
 	'tri-alpha',
 	'tri-blend-color',
 	'tri-blend-max',
diff --git a/progs/trivial/sub-tex.c b/progs/trivial/sub-tex.c
new file mode 100644
index 0000000..0b8bb28
--- /dev/null
+++ b/progs/trivial/sub-tex.c
@@ -0,0 +1,137 @@
+/**
+ * Draw a series of textured quads after each quad, use glTexSubImage()
+ * to change one row of the texture image.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <GL/glew.h>
+#include <GL/glut.h>
+
+
+static GLint Win = 0;
+static GLuint Tex = 0;
+
+
+static void Init(void)
+{
+   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));
+   fflush(stderr);
+
+   glGenTextures(1, &Tex);
+   glBindTexture(GL_TEXTURE_2D, Tex);
+
+   glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+}
+
+
+static void Reshape(int width, int height)
+{
+   float ar = (float) width / height;
+   glViewport(0, 0, width, height);
+   glMatrixMode(GL_PROJECTION);
+   glLoadIdentity();
+   glOrtho(-ar, ar, -1.0, 1.0, -1.0, 1.0);
+   glMatrixMode(GL_MODELVIEW);
+}
+
+
+static void Key(unsigned char key, int x, int y)
+{
+   if (key == 27) {
+      glDeleteTextures(1, &Tex);
+      glutDestroyWindow(Win);
+      exit(1);
+   }
+   glutPostRedisplay();
+}
+
+
+static void Draw(void)
+{
+   GLubyte tex[16][16][4];
+   GLubyte row[16][4];
+   int i, j;
+
+   for (i = 0; i < 16; i++) {
+      for (j = 0; j < 16; j++) {
+         if ((i + j) & 1) {
+            tex[i][j][0] = 128;
+            tex[i][j][1] = 128;
+            tex[i][j][2] = 128;
+            tex[i][j][3] = 255;
+         }
+         else {
+            tex[i][j][0] = 255;
+            tex[i][j][1] = 255;
+            tex[i][j][2] = 255;
+            tex[i][j][3] = 255;
+         }
+      }
+   }
+
+   for (i = 0; i < 16; i++) {
+      row[i][0] = 255;
+      row[i][1] = 0;
+      row[i][2] = 0;
+      row[i][3] = 255;
+   }
+
+   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0,
+                GL_RGBA, GL_UNSIGNED_BYTE, tex);
+   glEnable(GL_TEXTURE_2D);
+
+   glClear(GL_COLOR_BUFFER_BIT);
+
+   for (i = 0; i < 9; i++) {
+
+      glPushMatrix();
+      glTranslatef(-4.0 + i, 0, 0);
+      glScalef(0.5, 0.5, 1.0);
+
+      glBegin(GL_QUADS);
+      glTexCoord2f(1,0);
+      glVertex3f( 0.9, -0.9, 0.0);
+      glTexCoord2f(1,1);
+      glVertex3f( 0.9,  0.9, 0.0);
+      glTexCoord2f(0,1);
+      glVertex3f(-0.9,  0.9, 0.0);
+      glTexCoord2f(0,0);
+      glVertex3f(-0.9,  -0.9, 0.0);
+      glEnd();
+
+      glPopMatrix();
+
+      /* replace a row of the texture image with red texels */
+      if (i * 2 < 16)
+         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, i*2, 16, 1,
+                         GL_RGBA, GL_UNSIGNED_BYTE, row);
+   }
+
+
+   glutSwapBuffers();
+}
+
+
+int main(int argc, char **argv)
+{
+   glutInit(&argc, argv);
+   glutInitWindowSize(900, 200);
+   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
+   Win = glutCreateWindow(*argv);
+   if (!Win) {
+      exit(1);
+   }
+   glewInit();
+   Init();
+   glutReshapeFunc(Reshape);
+   glutKeyboardFunc(Key);
+   glutDisplayFunc(Draw);
+   glutMainLoop();
+   return 0;
+}
diff --git a/progs/trivial/tex-quads.c b/progs/trivial/tex-quads.c
new file mode 100644
index 0000000..626e178
--- /dev/null
+++ b/progs/trivial/tex-quads.c
@@ -0,0 +1,143 @@
+/**
+ * Draw a series of quads, each with a different texture.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <GL/glew.h>
+#include <GL/glut.h>
+
+#define NUM_TEX 10
+
+static GLint Win = 0;
+static GLuint Tex[NUM_TEX];
+
+
+static void Init(void)
+{
+   int i;
+
+   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));
+   fflush(stderr);
+
+   glGenTextures(NUM_TEX, Tex);
+
+   for (i = 0; i < NUM_TEX; i++) {
+      glBindTexture(GL_TEXTURE_2D, Tex[i]);
+
+      glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+      glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+   }
+}
+
+
+static void Reshape(int width, int height)
+{
+   float ar = (float) width / height;
+   glViewport(0, 0, width, height);
+   glMatrixMode(GL_PROJECTION);
+   glLoadIdentity();
+   glOrtho(-ar, ar, -1.0, 1.0, -1.0, 1.0);
+   glMatrixMode(GL_MODELVIEW);
+}
+
+
+static void Key(unsigned char key, int x, int y)
+{
+   if (key == 27) {
+      glDeleteTextures(NUM_TEX, Tex);
+      glutDestroyWindow(Win);
+      exit(1);
+   }
+   glutPostRedisplay();
+}
+
+
+static void Draw(void)
+{
+   GLubyte tex[16][16][4];
+   int t, i, j;
+
+   for (t = 0; t < NUM_TEX; t++) {
+
+      for (i = 0; i < 16; i++) {
+         for (j = 0; j < 16; j++) {
+            if (i < t) {
+               /* red row */
+               tex[i][j][0] = 255;
+               tex[i][j][1] = 0;
+               tex[i][j][2] = 0;
+               tex[i][j][3] = 255;
+            }
+            else if ((i + j) & 1) {
+               tex[i][j][0] = 128;
+               tex[i][j][1] = 128;
+               tex[i][j][2] = 128;
+               tex[i][j][3] = 255;
+            }
+            else {
+               tex[i][j][0] = 255;
+               tex[i][j][1] = 255;
+               tex[i][j][2] = 255;
+               tex[i][j][3] = 255;
+            }
+         }
+      }
+
+      glBindTexture(GL_TEXTURE_2D, Tex[t]);
+      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0,
+                   GL_RGBA, GL_UNSIGNED_BYTE, tex);
+   }
+
+   glEnable(GL_TEXTURE_2D);
+
+   glClear(GL_COLOR_BUFFER_BIT);
+
+   for (i = 0; i < NUM_TEX; i++) {
+
+      glBindTexture(GL_TEXTURE_2D, Tex[i]);
+
+      glPushMatrix();
+      glTranslatef(-4.0 + i, 0, 0);
+      glScalef(0.5, 0.5, 1.0);
+
+      glBegin(GL_QUADS);
+      glTexCoord2f(1,0);
+      glVertex3f( 0.9, -0.9, 0.0);
+      glTexCoord2f(1,1);
+      glVertex3f( 0.9,  0.9, 0.0);
+      glTexCoord2f(0,1);
+      glVertex3f(-0.9,  0.9, 0.0);
+      glTexCoord2f(0,0);
+      glVertex3f(-0.9,  -0.9, 0.0);
+      glEnd();
+
+      glPopMatrix();
+   }
+
+
+   glutSwapBuffers();
+}
+
+
+int main(int argc, char **argv)
+{
+   glutInit(&argc, argv);
+   glutInitWindowSize(900, 200);
+   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
+   Win = glutCreateWindow(*argv);
+   if (!Win) {
+      exit(1);
+   }
+   glewInit();
+   Init();
+   glutReshapeFunc(Reshape);
+   glutKeyboardFunc(Key);
+   glutDisplayFunc(Draw);
+   glutMainLoop();
+   return 0;
+}



More information about the mesa-commit mailing list