radeon: drop unused members of radeon_state.
[mesa.git] / progs / vp / vp-tris.c
index e1ddb2e14d23d75d7ee3ef83bef73939cc7c919c..29cd027b00c2ef70138d0759362b764d0b7161f1 100644 (file)
@@ -9,27 +9,17 @@
 #ifndef WIN32
 #include <unistd.h>
 #include <signal.h>
-#define GL_GLEXT_PROTOTYPES
-#else
-#include <GL/glext.h>
 #endif
 
+#include <GL/glew.h>
 #include <GL/glut.h>
 
-#ifdef WIN32
-static PFNGLBINDPROGRAMARBPROC glBindProgramARB = NULL;
-static PFNGLGENPROGRAMSARBPROC glGenProgramsARB = NULL;
-static PFNGLPROGRAMSTRINGARBPROC glProgramStringARB = NULL;
-static PFNGLISPROGRAMARBPROC glIsProgramARB = NULL;
-
-static PFNGLBINDPROGRAMNVPROC glBindProgramNV = NULL;
-static PFNGLGENPROGRAMSNVPROC glGenProgramsNV = NULL;
-static PFNGLLOADPROGRAMNVPROC glLoadProgramNV = NULL;
-static PFNGLISPROGRAMNVPROC glIsProgramNV = NULL;
-#endif
-
 static const char *filename = NULL;
 static GLuint nr_steps = 4;
+static GLuint prim = GL_TRIANGLES;
+static GLfloat psz = 1.0;
+static GLboolean pointsmooth = 0;
+static GLboolean program_point_size = 0;
 
 static void usage( char *name )
 {
@@ -109,19 +99,14 @@ static void Init( void )
    sz = (GLuint) fread(buf, 1, sizeof(buf), f);
    if (!feof(f)) {
       fprintf(stderr, "file too long\n");
+      fclose(f);
       exit(1);
    }
 
+   fclose(f);
    fprintf(stderr, "%.*s\n", sz, buf);
 
    if (strncmp( buf, "!!VP", 4 ) == 0) {
-#ifdef WIN32
-      glBindProgramNV = (PFNGLBINDPROGRAMNVPROC) wglGetProcAddress( "glBindProgramNV" );
-      glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC) wglGetProcAddress( "glGenProgramsNV" );
-      glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC) wglGetProcAddress( "glLoadProgramNV" );
-      glIsProgramNV = (PFNGLISPROGRAMNVPROC) wglGetProcAddress( "glIsProgramNV" );
-#endif
-
       glEnable( GL_VERTEX_PROGRAM_NV );
       glGenProgramsNV( 1, &prognum );
       glBindProgramNV( GL_VERTEX_PROGRAM_NV, prognum );
@@ -129,13 +114,6 @@ static void Init( void )
       assert( glIsProgramNV( prognum ) );
    }
    else {
-#ifdef WIN32
-      glBindProgramARB = (PFNGLBINDPROGRAMARBPROC) wglGetProcAddress( "glBindProgramARB" );
-      glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) wglGetProcAddress( "glGenProgramsARB" );
-      glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) wglGetProcAddress( "glProgramStringARB" );
-      glIsProgramARB = (PFNGLISPROGRAMARBPROC) wglGetProcAddress( "glIsProgramARB" );
-#endif
-
       glEnable(GL_VERTEX_PROGRAM_ARB);
 
       glGenProgramsARB(1, &prognum);
@@ -143,6 +121,12 @@ static void Init( void )
       glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum);
       glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
                        sz, (const GLubyte *) buf);
+      if (glGetError()) {
+         printf("Program failed to compile:\n%s\n", buf);
+         printf("Error: %s\n",
+                (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB));
+         exit(1);
+      }
       assert(glIsProgramARB(prognum));
    }
 
@@ -214,6 +198,14 @@ static void subdiv( union vert *v0,
    }
 }
 
+static void enable( GLenum value, GLboolean flag )
+{
+   if (flag)
+      glEnable(value);
+   else
+      glDisable(value);
+}
+
 /** Assignment */
 #define ASSIGN_3V( V, V0, V1, V2 )  \
 do {                                \
@@ -226,8 +218,12 @@ static void Display( void )
 {
    glClearColor(0.3, 0.3, 0.3, 1);
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+   glPointSize(psz);
+
+   enable( GL_POINT_SMOOTH, pointsmooth );
+   enable( GL_VERTEX_PROGRAM_POINT_SIZE_ARB, program_point_size );
 
-   glBegin(GL_TRIANGLES);
+   glBegin(prim);
 
 
    {
@@ -271,9 +267,40 @@ static void Key( unsigned char key, int x, int y )
    (void) x;
    (void) y;
    switch (key) {
-      case 27:
-         exit(0);
-         break;
+   case 'p':
+      prim = GL_POINTS;
+      break;
+   case 't':
+      prim = GL_TRIANGLES;
+      break;
+   case 's':
+      psz += .5;
+      break;
+   case 'S':
+      if (psz > .5)
+         psz -= .5;
+      break;
+   case 'm':
+      pointsmooth = !pointsmooth;
+      break;
+   case 'z':
+      program_point_size = !program_point_size;
+      break;
+   case '+':
+      nr_steps++;
+      break; 
+   case '-':
+      if (nr_steps) 
+         nr_steps--;
+      break;
+   case ' ':
+      psz = 1.0;
+      prim = GL_TRIANGLES;
+      nr_steps = 4;
+      break;
+   case 27:
+      exit(0);
+      break;
    }
    glutPostRedisplay();
 }
@@ -288,6 +315,7 @@ int main( int argc, char *argv[] )
    glutInitWindowSize( 250, 250 );
    glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH );
    glutCreateWindow(argv[argc-1]);
+   glewInit();
    glutReshapeFunc( Reshape );
    glutKeyboardFunc( Key );
    glutDisplayFunc( Display );