diff options
author | ftrapero <frantracer@gmail.com> | 2017-06-15 14:15:08 +0200 |
---|---|---|
committer | ftrapero <frantracer@gmail.com> | 2017-06-15 14:15:08 +0200 |
commit | 459021c165c7023ee75f524060ca270985b547c1 (patch) | |
tree | ed3dfb281a1c00a9cf59ebf9d165e5a7a0f346bf /nx-X11/extras/Mesa_6.4.1/progs/tests/vptest2.c | |
parent | 4f216e7cf7571885f2995433580c9a3ec068eef4 (diff) | |
parent | 8667d4d97a3e958a7f63c18c34a62469ba5d2079 (diff) | |
download | nx-libs-459021c165c7023ee75f524060ca270985b547c1.tar.gz nx-libs-459021c165c7023ee75f524060ca270985b547c1.tar.bz2 nx-libs-459021c165c7023ee75f524060ca270985b547c1.zip |
Include mesa-6.4.1 project
Diffstat (limited to 'nx-X11/extras/Mesa_6.4.1/progs/tests/vptest2.c')
-rw-r--r-- | nx-X11/extras/Mesa_6.4.1/progs/tests/vptest2.c | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/nx-X11/extras/Mesa_6.4.1/progs/tests/vptest2.c b/nx-X11/extras/Mesa_6.4.1/progs/tests/vptest2.c new file mode 100644 index 000000000..2158e07f0 --- /dev/null +++ b/nx-X11/extras/Mesa_6.4.1/progs/tests/vptest2.c @@ -0,0 +1,151 @@ +/* Test vertex state program execution */ + +#include <assert.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#define GL_GLEXT_PROTOTYPES +#include <GL/glut.h> + + + +static void Display( void ) +{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + glPushMatrix(); + glutSolidCube(2.0); + glPopMatrix(); + 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: + exit(0); + break; + } + glutPostRedisplay(); +} + + +static void Test1( void ) +{ + static const GLfloat p[4] = {9, 8, 7, 6}; + GLfloat q[4]; + /* test addition */ + static const char *prog = + "!!VSP1.0\n" + "MOV R0, c[0];\n" + "MOV R1, c[1];\n" + "ADD c[2], R0, R1;\n" + "END\n"; + + glLoadProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1, + strlen(prog), + (const GLubyte *) prog); + assert(glIsProgramNV(1)); + + glProgramParameter4fNV(GL_VERTEX_PROGRAM_NV, 0, 1, 2, 3, 4); + glProgramParameter4fNV(GL_VERTEX_PROGRAM_NV, 1, 10, 20, 30, 40); + + glExecuteProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1, p); + + glGetProgramParameterfvNV(GL_VERTEX_PROGRAM_NV, 2, GL_PROGRAM_PARAMETER_NV, q); + printf("Result c[2] = %g %g %g %g (should be 11 22 33 44)\n", + q[0], q[1], q[2], q[3]); +} + + +static void Test2( void ) +{ + static const GLfloat p[4] = {9, 8, 7, 6}; + GLfloat q[4]; + /* test swizzling */ + static const char *prog = + "!!VSP1.0\n" + "MOV R0, c[0].wzyx;\n" + "MOV R1, c[1].wzyx;\n" + "ADD c[2], R0, R1;\n" + "END\n"; + + glLoadProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1, + strlen(prog), + (const GLubyte *) prog); + assert(glIsProgramNV(1)); + + glProgramParameter4fNV(GL_VERTEX_PROGRAM_NV, 0, 1, 2, 3, 4); + glProgramParameter4fNV(GL_VERTEX_PROGRAM_NV, 1, 10, 20, 30, 40); + + glExecuteProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1, p); + + glGetProgramParameterfvNV(GL_VERTEX_PROGRAM_NV, 2, GL_PROGRAM_PARAMETER_NV, q); + printf("Result c[2] = %g %g %g %g (should be 44 33 22 11)\n", + q[0], q[1], q[2], q[3]); +} + + +static void Test3( void ) +{ + static const GLfloat p[4] = {0, 0, 0, 0}; + GLfloat q[4]; + /* normalize vector */ + static const char *prog = + "!!VSP1.0\n" + "# c[0] = (nx,ny,nz)\n" + "# R0.xyz = normalize(R1)\n" + "# R0.w = 1/sqrt(nx*nx + ny*ny + nz*nz)\n" + "# c[2] = R0\n" + "DP3 R0.w, c[0], c[0];\n" + "RSQ R0.w, R0.w;\n" + "MUL R0.xyz, c[0], R0.w;\n" + "MOV c[2], R0;\n" + "END\n"; + + glLoadProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1, + strlen(prog), + (const GLubyte *) prog); + assert(glIsProgramNV(1)); + + glProgramParameter4fNV(GL_VERTEX_PROGRAM_NV, 0, 0, 10, 0, 0); + + glExecuteProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1, p); + + glGetProgramParameterfvNV(GL_VERTEX_PROGRAM_NV, 2, GL_PROGRAM_PARAMETER_NV, q); + printf("Result c[2] = %g %g %g %g (should be 0, 1, 0, 0.1)\n", + q[0], q[1], q[2], q[3]); +} + + +int main( int argc, char *argv[] ) +{ + glutInit( &argc, argv ); + glutInitWindowPosition( 0, 0 ); + glutInitWindowSize( 50, 50 ); + glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); + glutCreateWindow(argv[0]); + glutReshapeFunc( Reshape ); + glutKeyboardFunc( Key ); + glutDisplayFunc( Display ); + Test1(); + Test2(); + Test3(); + glutMainLoop(); + return 0; +} |