Add support for NVIDIA programs.
authorMichal Krol <michal@tungstengraphics.com>
Tue, 19 Aug 2008 12:43:19 +0000 (14:43 +0200)
committerMichal Krol <michal@tungstengraphics.com>
Tue, 19 Aug 2008 12:43:19 +0000 (14:43 +0200)
progs/vp/vp-tris.c

index a65ac11dc3d90674fded6ebce285d70f59c4ce16..3fe35f7e3e6f3a76752c41af5b592999ee55de37 100644 (file)
@@ -20,6 +20,11 @@ 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;
@@ -108,20 +113,37 @@ static void Init( void )
 
    fprintf(stderr, "%.*s\n", sz, buf);
 
+   if (strncmp( buf, "!!VP", 4 ) == 0) {
 #ifdef WIN32
-   glBindProgramARB = (PFNGLBINDPROGRAMARBPROC) wglGetProcAddress( "glBindProgramARB" );
-   glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) wglGetProcAddress( "glGenProgramsARB" );
-   glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) wglGetProcAddress( "glProgramStringARB" );
-   glIsProgramARB = (PFNGLISPROGRAMARBPROC) wglGetProcAddress( "glIsProgramARB" );
+      glBindProgramNV = (PFNGLBINDPROGRAMNVPROC) wglGetProcAddress( "glBindProgramNV" );
+      glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC) wglGetProcAddress( "glGenProgramsNV" );
+      glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC) wglGetProcAddress( "glLoadProgramNV" );
+      glIsProgramNV = (PFNGLISPROGRAMNVPROC) wglGetProcAddress( "glIsProgramNV" );
 #endif
 
-   glEnable(GL_VERTEX_PROGRAM_ARB);
+      glEnable( GL_VERTEX_PROGRAM_NV );
+      glGenProgramsNV( 1, &prognum );
+      glBindProgramNV( GL_VERTEX_PROGRAM_NV, prognum );
+      glLoadProgramNV( GL_VERTEX_PROGRAM_NV, prognum, sz, (const GLubyte *) buf );
+      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);
+      glGenProgramsARB(1, &prognum);
 
-   glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum);
-   glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
-                     sz, (const GLubyte *) buf);
+      glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum);
+      glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+                       sz, (const GLubyte *) buf);
+      assert(glIsProgramARB(prognum));
+   }
 
    errno = glGetError();
    printf("glGetError = %d\n", errno);
@@ -133,7 +155,6 @@ static void Init( void )
       printf("errorpos: %d\n", errorpos);
       printf("%s\n", (char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB));
    }
-   assert(glIsProgramARB(prognum));
 }