progs/tests: Add some scissor tests
authorJakob Bornecrantz <jakob@vmware.com>
Wed, 3 Jun 2009 14:33:56 +0000 (16:33 +0200)
committerJakob Bornecrantz <jakob@vmware.com>
Mon, 8 Jun 2009 12:45:40 +0000 (14:45 +0200)
progs/tests/.gitignore
progs/tests/Makefile
progs/tests/SConscript
progs/tests/scissor-viewport.c [new file with mode: 0644]
progs/tests/scissor.c [new file with mode: 0644]

index 959ddcc51f625ba96fa1ef0d3d7bf54c43f51148..d6a8538767645056347b766ec33c62859e7b99f7 100644 (file)
@@ -62,6 +62,8 @@ readrate
 readtex.c
 readtex.h
 rubberband
+scissor
+scissor-viewport
 seccolor
 shader_api
 shaderutil.c
index 628ca41535493527489cde638744843add2628b5..7604b227887934f0f7914326fb847713d7bde864 100644 (file)
@@ -70,6 +70,8 @@ SOURCES = \
        random.c \
        readrate.c \
        rubberband.c \
+       scissor.c \
+       scissor-viewport.c \
        seccolor.c \
        shader_api.c \
        sharedtex.c \
index 453fcecd9c16e9591db27e4650ef7392d5c22a1e..9d89ff6a0d019cf3f6fe8846b042986db589135a 100644 (file)
@@ -95,6 +95,8 @@ progs = [
     'random',
     'readrate',
     'rubberband',
+    'scissor',
+    'scissor-viewport',
     'seccolor',
     'shader_api',
     'stencil_twoside',
diff --git a/progs/tests/scissor-viewport.c b/progs/tests/scissor-viewport.c
new file mode 100644 (file)
index 0000000..582e65f
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
+ * Copyright (c) 2009 VMware, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the name of
+ * Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
+ * ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <GL/glut.h>
+
+struct program
+{
+   unsigned width;
+   unsigned height;
+   int i;
+};
+
+struct program prog;
+
+static void init(void)
+{
+   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));
+   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));
+   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR));
+   fflush(stderr);
+
+   prog.i = 0;
+}
+
+static void reshape(int width, int height)
+{
+   glViewport(0, 0, 100, 100);
+
+   prog.width = width;
+   prog.height = height;
+
+   glMatrixMode(GL_PROJECTION);
+   glLoadIdentity();
+   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
+   glMatrixMode(GL_MODELVIEW);
+}
+
+static void key(unsigned char key, int x, int y)
+{
+
+   switch (key) {
+   case 27:
+      exit(1);
+   default:
+      glutPostRedisplay();
+      return;
+   }
+}
+
+static void drawQuad(void)
+{
+   glBegin(GL_QUADS);
+   glVertex2d(-1.0, -1.0);
+   glVertex2d( 1.0, -1.0);
+   glVertex2d( 1.0,  1.0);
+   glVertex2d(-1.0,  1.0);
+   glEnd();
+}
+
+static void draw(void)
+{
+   int i;
+
+   glClearColor(0.0, 0.0, 1.0, 0.0);
+   glClear(GL_COLOR_BUFFER_BIT);
+
+   i = prog.i++;
+   if (prog.i >= 3)
+      prog.i = 0;
+
+   glEnable(GL_SCISSOR_TEST);
+
+   {
+      glColor4d(1.0, 0.0, 0.0, 1.0);
+
+      glScissor(i, i, 10 - 2*i, 10 - 2*i);
+      drawQuad();
+   }
+
+   glDisable(GL_SCISSOR_TEST);
+
+   //glutSwapBuffers();
+   glFlush();
+}
+
+int main(int argc, char **argv)
+{
+   GLenum type;
+
+   glutInit(&argc, argv);
+
+   prog.width = 200;
+   prog.height = 200;
+
+   glutInitWindowPosition(100, 0);
+   glutInitWindowSize(prog.width, prog.height);
+
+   //type = GLUT_RGB | GLUT_DOUBLE;
+   type = GLUT_RGB | GLUT_SINGLE;
+   glutInitDisplayMode(type);
+
+   if (glutCreateWindow(*argv) == GL_FALSE) {
+      exit(1);
+   }
+
+   init();
+
+   glutReshapeFunc(reshape);
+   glutKeyboardFunc(key);
+   glutDisplayFunc(draw);
+   glutMainLoop();
+   return 0;
+}
diff --git a/progs/tests/scissor.c b/progs/tests/scissor.c
new file mode 100644 (file)
index 0000000..2dfd217
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
+ * Copyright (c) 2009 VMware, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the name of
+ * Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
+ * ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <GL/glut.h>
+
+struct program
+{
+   unsigned width;
+   unsigned height;
+   unsigned quads;
+};
+
+struct program prog;
+
+static void init(void)
+{
+   fprintf(stderr, "GL_RENDERER   = %s\n", (char *) glGetString(GL_RENDERER));
+   fprintf(stderr, "GL_VERSION    = %s\n", (char *) glGetString(GL_VERSION));
+   fprintf(stderr, "GL_VENDOR     = %s\n", (char *) glGetString(GL_VENDOR));
+   fflush(stderr);
+}
+
+static void reshape(int width, int height)
+{
+
+   glViewport(0, 0, (GLint)width, (GLint)height);
+
+   prog.width = width;
+   prog.height = height;
+
+   glMatrixMode(GL_PROJECTION);
+   glLoadIdentity();
+   glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
+   glMatrixMode(GL_MODELVIEW);
+}
+
+static void key(unsigned char key, int x, int y)
+{
+
+   switch (key) {
+   case 27:
+      exit(1);
+   default:
+      prog.quads = !prog.quads;
+      glutPostRedisplay();
+      return;
+   }
+}
+
+static void drawQuad(void)
+{
+
+   if (prog.quads) {
+      glBegin(GL_QUADS);
+      glVertex2d(-1.0, -1.0);
+      glVertex2d( 1.0, -1.0);
+      glVertex2d( 1.0,  1.0);
+      glVertex2d(-1.0,  1.0);
+      glEnd();
+   } else {
+      glClear(GL_COLOR_BUFFER_BIT);
+   }
+}
+
+static void draw(void)
+{
+   glClearColor(0.0, 0.0, 1.0, 0.0);
+   glClear(GL_COLOR_BUFFER_BIT);
+
+   printf("drawing with %s\n", prog.quads ? "quads" : "clears");
+
+   glEnable(GL_SCISSOR_TEST);
+
+   {
+      glClearColor(1.0, 0.0, 0.0, 1.0);
+      glColor4d(1.0, 0.0, 0.0, 1.0);
+
+      glScissor(1, 1, 10, 10);
+      drawQuad();
+      glScissor(1, prog.height -  11, 10, 10);
+      drawQuad();
+      glScissor(prog.width - 11, prog.height -  11, 10, 10);
+      drawQuad();
+   }
+
+   {
+      glClearColor(0.0, 1.0, 0.0, 1.0);
+      glColor4d(0.0, 1.0, 0.0, 1.0);
+
+      glScissor(12, 1, 10, 10);
+      drawQuad();
+      glScissor(12, prog.height -  11, 10, 10);
+      drawQuad();
+      glScissor(prog.width - 22, prog.height -  11, 10, 10);
+      drawQuad();
+   }
+
+   {
+      glClearColor(1.0, 1.0, 0.0, 1.0);
+      glColor4d(1.0, 1.0, 0.0, 1.0);
+
+      glScissor(1, 12, 10, 10);
+      drawQuad();
+      glScissor(1, prog.height -  22, 10, 10);
+      drawQuad();
+      glScissor(prog.width - 11, prog.height -  22, 10, 10);
+      drawQuad();
+   }
+
+   glDisable(GL_SCISSOR_TEST);
+
+   //glutSwapBuffers();
+   glFlush();
+}
+
+int main(int argc, char **argv)
+{
+   GLenum type;
+
+   glutInit(&argc, argv);
+
+   prog.width = 200;
+   prog.height = 200;
+
+   glutInitWindowPosition(100, 0);
+   glutInitWindowSize(prog.width, prog.height);
+
+   //type = GLUT_RGB | GLUT_DOUBLE;
+   type = GLUT_RGB | GLUT_SINGLE;
+   glutInitDisplayMode(type);
+
+   if (glutCreateWindow(*argv) == GL_FALSE) {
+      exit(1);
+   }
+
+   init();
+
+   glutReshapeFunc(reshape);
+   glutKeyboardFunc(key);
+   glutDisplayFunc(draw);
+   glutMainLoop();
+   return 0;
+}