summaryrefslogtreecommitdiffstats
path: root/progs/tests
diff options
context:
space:
mode:
Diffstat (limited to 'progs/tests')
-rw-r--r--progs/tests/texwrap.c181
1 files changed, 181 insertions, 0 deletions
diff --git a/progs/tests/texwrap.c b/progs/tests/texwrap.c
new file mode 100644
index 00000000000..dce8b4fbda4
--- /dev/null
+++ b/progs/tests/texwrap.c
@@ -0,0 +1,181 @@
+/* $Id: texwrap.c,v 1.1 2001/03/26 19:45:57 brianp Exp $ */
+
+/*
+ * Test texture wrap modes.
+ *
+ * Brian Paul March 2001
+ */
+
+
+#define GL_GLEXT_PROTOTYPES
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <GL/glut.h>
+
+
+#ifndef GL_CLAMP_TO_BORDER_ARB
+#define GL_CLAMP_TO_BORDER_ARB 0x812D
+#endif
+
+
+#define SIZE 4
+static GLubyte TexImage[SIZE+2][SIZE+2][4];
+
+
+static void
+PrintString(const char *s)
+{
+ while (*s) {
+ glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s);
+ s++;
+ }
+}
+
+
+static void Display( void )
+{
+ static const GLenum modes[] = {
+ GL_REPEAT,
+ GL_CLAMP,
+ GL_CLAMP_TO_EDGE,
+ GL_CLAMP_TO_BORDER_ARB
+ };
+ static const char *names[] = {
+ "GL_REPEAT",
+ "GL_CLAMP",
+ "GL_CLAMP_TO_EDGE",
+ "GL_CLAMP_TO_BORDER_ARB"
+ };
+
+ GLint i, j;
+ GLint numModes;
+
+ numModes = glutExtensionSupported("GL_ARB_texture_border_clamp") ? 4 : 3;
+
+ glClearColor(0.5, 0.5, 0.5, 1.0);
+ glClear( GL_COLOR_BUFFER_BIT );
+
+#if 0
+ /* draw texture as image */
+ glDisable(GL_TEXTURE_2D);
+ glWindowPos2iMESA(1, 1);
+ glDrawPixels(6, 6, GL_RGBA, GL_UNSIGNED_BYTE, (void *) TexImage);
+#endif
+
+ glEnable(GL_TEXTURE_2D);
+
+ /* loop over min/mag filters */
+ for (i = 0; i < 2; i++) {
+ if (i) {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ }
+ else {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ }
+
+ /* loop over border modes */
+ for (j = 0; j < numModes; j++) {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, modes[j]);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, modes[j]);
+
+ glPushMatrix();
+ glTranslatef(j * 150 + 10, i * 150 + 25, 0);
+
+ glBegin(GL_POLYGON);
+ glTexCoord2f(-0.2, -0.2); glVertex2f( 0, 0);
+ glTexCoord2f( 1.2, -0.2); glVertex2f(140, 0);
+ glTexCoord2f( 1.2, 1.2); glVertex2f(140, 140);
+ glTexCoord2f(-0.2, 1.2); glVertex2f( 0, 140);
+ glEnd();
+
+ glPopMatrix();
+ }
+ }
+
+ glDisable(GL_TEXTURE_2D);
+ for (i = 0; i < numModes; i++) {
+ glWindowPos2iMESA( i * 150 + 10, 5);
+ PrintString(names[i]);
+ }
+
+ glutSwapBuffers();
+}
+
+
+static void Reshape( int width, int height )
+{
+ glViewport( 0, 0, width, height );
+ glMatrixMode( GL_PROJECTION );
+ glLoadIdentity();
+ glOrtho(0, width, 0, height, -1, 1);
+ glMatrixMode( GL_MODELVIEW );
+ glLoadIdentity();
+}
+
+
+static void Key( unsigned char key, int x, int y )
+{
+ (void) x;
+ (void) y;
+ switch (key) {
+ case 27:
+ exit(0);
+ break;
+ }
+ glutPostRedisplay();
+}
+
+
+static void Init( void )
+{
+ static const GLubyte border[4] = { 0, 255, 0, 255 };
+ GLint i, j;
+
+ for (i = 0; i < SIZE+2; i++) {
+ for (j = 0; j < SIZE+2; j++) {
+ if (i == 0 || j == 0 || i == SIZE+1 || j == SIZE+1) {
+ /* border color */
+ TexImage[i][j][0] = border[0];
+ TexImage[i][j][1] = border[1];
+ TexImage[i][j][2] = border[2];
+ TexImage[i][j][3] = border[3];
+ }
+ else if ((i + j) & 1) {
+ /* white */
+ TexImage[i][j][0] = 255;
+ TexImage[i][j][1] = 255;
+ TexImage[i][j][2] = 255;
+ TexImage[i][j][3] = 255;
+ }
+ else {
+ /* black */
+ TexImage[i][j][0] = 0;
+ TexImage[i][j][1] = 0;
+ TexImage[i][j][2] = 0;
+ TexImage[i][j][3] = 0;
+ }
+ }
+ }
+
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, SIZE+2, SIZE+2, 1,
+ GL_RGBA, GL_UNSIGNED_BYTE, (void *) TexImage);
+}
+
+
+int main( int argc, char *argv[] )
+{
+ glutInit( &argc, argv );
+ glutInitWindowPosition( 0, 0 );
+ glutInitWindowSize( 650, 340 );
+ glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
+ glutCreateWindow(argv[0]);
+ glutReshapeFunc( Reshape );
+ glutKeyboardFunc( Key );
+ glutDisplayFunc( Display );
+ Init();
+ glutMainLoop();
+ return 0;
+}