summaryrefslogtreecommitdiff
path: root/progs/tests
diff options
context:
space:
mode:
Diffstat (limited to 'progs/tests')
-rw-r--r--progs/tests/.gitignore2
-rw-r--r--progs/tests/Makefile5
-rw-r--r--progs/tests/SConscript2
-rw-r--r--progs/tests/getteximage.c217
-rw-r--r--progs/tests/scissor-viewport.c138
-rw-r--r--progs/tests/scissor.c168
6 files changed, 531 insertions, 1 deletions
diff --git a/progs/tests/.gitignore b/progs/tests/.gitignore
index 959ddcc51f..d6a8538767 100644
--- a/progs/tests/.gitignore
+++ b/progs/tests/.gitignore
@@ -62,6 +62,8 @@ readrate
readtex.c
readtex.h
rubberband
+scissor
+scissor-viewport
seccolor
shader_api
shaderutil.c
diff --git a/progs/tests/Makefile b/progs/tests/Makefile
index 628ca41535..5069817be3 100644
--- a/progs/tests/Makefile
+++ b/progs/tests/Makefile
@@ -48,7 +48,8 @@ SOURCES = \
fptest1.c \
fptexture.c \
getprocaddress.c \
- glutfx \
+ getteximage.c \
+ glutfx.c \
interleave.c \
invert.c \
jkrahntest.c \
@@ -70,6 +71,8 @@ SOURCES = \
random.c \
readrate.c \
rubberband.c \
+ scissor.c \
+ scissor-viewport.c \
seccolor.c \
shader_api.c \
sharedtex.c \
diff --git a/progs/tests/SConscript b/progs/tests/SConscript
index 453fcecd9c..9d89ff6a0d 100644
--- a/progs/tests/SConscript
+++ b/progs/tests/SConscript
@@ -95,6 +95,8 @@ progs = [
'random',
'readrate',
'rubberband',
+ 'scissor',
+ 'scissor-viewport',
'seccolor',
'shader_api',
'stencil_twoside',
diff --git a/progs/tests/getteximage.c b/progs/tests/getteximage.c
new file mode 100644
index 0000000000..e4818a8fab
--- /dev/null
+++ b/progs/tests/getteximage.c
@@ -0,0 +1,217 @@
+/**
+ * Test glGetTexImage()
+ * Brian Paul
+ * 9 June 2009
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <GL/glew.h>
+#include <GL/glut.h>
+
+static int Win;
+
+
+static void
+TestGetTexImage(void)
+{
+ GLuint iter;
+ GLubyte *data = (GLubyte *) malloc(1024 * 1024 * 4);
+ GLubyte *data2 = (GLubyte *) malloc(1024 * 1024 * 4);
+
+ glEnable(GL_TEXTURE_2D);
+
+ printf("glTexImage2D + glGetTexImage:\n");
+
+ for (iter = 0; iter < 8; iter++) {
+ GLint p = (iter % 8) + 3;
+ GLint w = (1 << p);
+ GLint h = (1 << p);
+ GLuint i;
+ GLint level = 0;
+
+ printf(" Testing %d x %d tex image\n", w, h);
+
+ /* fill data */
+ for (i = 0; i < w * h * 4; i++) {
+ data[i] = i & 0xff;
+ data2[i] = 0;
+ }
+
+ glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, w, h, 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, data);
+
+ glBegin(GL_POINTS);
+ glVertex2f(0, 0);
+ glEnd();
+
+ /* get */
+ glGetTexImage(GL_TEXTURE_2D, level, GL_RGBA, GL_UNSIGNED_BYTE, data2);
+
+ /* compare */
+ for (i = 0; i < w * h * 4; i++) {
+ if (data2[i] != data[i]) {
+ printf("glTexImage + glGetTexImage failure!\n");
+ printf("Expected value %d, found %d\n", data[i], data2[i]);
+ abort();
+ }
+ }
+ }
+
+ printf("Passed\n");
+ glDisable(GL_TEXTURE_2D);
+ free(data);
+ free(data2);
+}
+
+
+static GLboolean
+ColorsEqual(const GLubyte ref[4], const GLubyte act[4])
+{
+ if (abs((int) ref[0] - (int) act[0]) > 1 ||
+ abs((int) ref[1] - (int) act[1]) > 1 ||
+ abs((int) ref[2] - (int) act[2]) > 1 ||
+ abs((int) ref[3] - (int) act[3]) > 1) {
+ printf("expected %d %d %d %d\n", ref[0], ref[1], ref[2], ref[3]);
+ printf("found %d %d %d %d\n", act[0], act[1], act[2], act[3]);
+ return GL_FALSE;
+ }
+ return GL_TRUE;
+}
+
+
+static void
+TestGetTexImageRTT(void)
+{
+ GLuint iter;
+ GLuint fb, tex;
+ GLint w = 512;
+ GLint h = 256;
+ GLint level = 0;
+
+ glGenTextures(1, &tex);
+ glGenFramebuffersEXT(1, &fb);
+
+ glBindTexture(GL_TEXTURE_2D, tex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0,
+ GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+
+ glBindFramebuffer(GL_FRAMEBUFFER_EXT, fb);
+ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
+ GL_TEXTURE_2D, tex, level);
+
+ printf("Render to texture + glGetTexImage:\n");
+ printf(" Testing %d x %d tex image\n", w, h);
+ for (iter = 0; iter < 8; iter++) {
+ GLubyte color[4];
+ GLubyte *data2 = (GLubyte *) malloc(w * h * 4);
+ GLuint i;
+
+ /* random clear color */
+ for (i = 0; i < 4; i++) {
+ color[i] = rand() % 256;
+ }
+
+ glClearColor(color[0] / 255.0,
+ color[1] / 255.0,
+ color[2] / 255.0,
+ color[3] / 255.0);
+
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ /* get */
+ glGetTexImage(GL_TEXTURE_2D, level, GL_RGBA, GL_UNSIGNED_BYTE, data2);
+
+ /* compare */
+ for (i = 0; i < w * h; i += 4) {
+ if (!ColorsEqual(color, data2 + i * 4)) {
+ printf("Render to texture failure!\n");
+ abort();
+ }
+ }
+
+ free(data2);
+ }
+
+ glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
+ glDeleteFramebuffersEXT(1, &fb);
+ glDeleteTextures(1, &tex);
+
+ printf("Passed\n");
+}
+
+
+
+
+static void
+Draw(void)
+{
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ TestGetTexImage();
+
+ if (glutExtensionSupported("GL_EXT_framebuffer_object") ||
+ glutExtensionSupported("GL_ARB_framebuffer_object"))
+ TestGetTexImageRTT();
+
+ glutDestroyWindow(Win);
+ exit(0);
+
+ glutSwapBuffers();
+}
+
+
+static void
+Reshape(int width, int height)
+{
+ glViewport(0, 0, width, height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(0.0, 0.0, -15.0);
+}
+
+
+static void
+Key(unsigned char key, int x, int y)
+{
+ (void) x;
+ (void) y;
+ switch (key) {
+ case 27:
+ glutDestroyWindow(Win);
+ exit(0);
+ break;
+ }
+ glutPostRedisplay();
+}
+
+
+static void
+Init(void)
+{
+}
+
+
+int
+main(int argc, char *argv[])
+{
+ glutInit(&argc, argv);
+ glutInitWindowPosition(0, 0);
+ glutInitWindowSize(400, 400);
+ glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
+ Win = glutCreateWindow(argv[0]);
+ glewInit();
+ glutReshapeFunc(Reshape);
+ glutKeyboardFunc(Key);
+ glutDisplayFunc(Draw);
+ Init();
+ glutMainLoop();
+ return 0;
+}
diff --git a/progs/tests/scissor-viewport.c b/progs/tests/scissor-viewport.c
new file mode 100644
index 0000000000..582e65fb72
--- /dev/null
+++ b/progs/tests/scissor-viewport.c
@@ -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
index 0000000000..2dfd2174e8
--- /dev/null
+++ b/progs/tests/scissor.c
@@ -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;
+}