Clone of mesa.
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

vptest1.c 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /* Test glGenProgramsNV(), glIsProgramNV(), glLoadProgramNV() */
  2. #include <assert.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <math.h>
  7. #define GL_GLEXT_PROTOTYPES
  8. #include <GL/glut.h>
  9. static void Display( void )
  10. {
  11. glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  12. glPushMatrix();
  13. glBegin(GL_POLYGON);
  14. glVertexAttrib2fNV(0, -1, -1);
  15. glVertexAttrib2fNV(0, 1, -1);
  16. glVertexAttrib2fNV(0, 0, 1);
  17. glEnd();
  18. glPopMatrix();
  19. glutSwapBuffers();
  20. }
  21. static void Reshape( int width, int height )
  22. {
  23. glViewport( 0, 0, width, height );
  24. glMatrixMode( GL_PROJECTION );
  25. glLoadIdentity();
  26. glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
  27. glMatrixMode( GL_MODELVIEW );
  28. glLoadIdentity();
  29. glTranslatef( 0.0, 0.0, -15.0 );
  30. }
  31. static void Key( unsigned char key, int x, int y )
  32. {
  33. (void) x;
  34. (void) y;
  35. switch (key) {
  36. case 27:
  37. exit(0);
  38. break;
  39. }
  40. glutPostRedisplay();
  41. }
  42. static void Init( void )
  43. {
  44. static const char *prog1 =
  45. "!!VP1.0\n"
  46. "MUL o[COL0].xyz, R0, c[35]; \n"
  47. "END\n";
  48. static const char *prog2 =
  49. "!!VP1.0\n"
  50. "#\n"
  51. "# c[0-3] = modelview projection (composite) matrix\n"
  52. "# c[32] = normalized light direction in object-space\n"
  53. "# c[35] = yellow diffuse material, (1.0, 1.0, 0.0, 1.0)\n"
  54. "# c[64].x = 0.0\n"
  55. "# c[64].z = 0.125, a scaling factor\n"
  56. "#\n"
  57. "# outputs diffuse illumination for color and perturbed position\n"
  58. "#\n"
  59. "DP3 R0, c[32], v[NRML]; # light direction DOT normal\n"
  60. "MUL o[COL0].xyz, R0, c[35]; \n"
  61. "MAX R0, c[64].x, R0; \n"
  62. "MUL R0, R0, v[NRML]; \n"
  63. "MUL R0, R0, c[64].z; \n"
  64. "ADD R1, v[OPOS], -R0; # perturb object space position\n"
  65. "DP4 o[HPOS].x, c[0], R1; \n"
  66. "DP4 o[HPOS].y, c[1], R1; \n"
  67. "DP4 o[HPOS].z, c[2], R1; \n"
  68. "DP4 o[HPOS].w, c[3], R1; \n"
  69. "END\n";
  70. static const char *prog3 =
  71. "!!VP1.0\n"
  72. "DP4 o[HPOS].x, c[0], v[OPOS];\n"
  73. "DP4 o[HPOS].y, c[1], v[OPOS];\n"
  74. "DP4 o[HPOS].z, c[2], v[OPOS];\n"
  75. "DP4 o[HPOS].w, c[3], v[OPOS];\n"
  76. "DP3 R0.x, c[4], v[NRML];\n"
  77. "DP3 R0.y, c[5], v[NRML]; \n"
  78. "DP3 R0.z, c[6], v[NRML]; # R0 = n' = transformed normal\n"
  79. "DP3 R1.x, c[32], R0; # R1.x = Lpos DOT n'\n"
  80. "DP3 R1.y, c[33], R0; # R1.y = hHat DOT n'\n"
  81. "MOV R1.w, c[38].x; # R1.w = specular power\n"
  82. "LIT R2, R1; # Compute lighting values\n"
  83. "MAD R3, c[35].x, R2.y, c[35].y; # diffuse + emissive\n"
  84. "MAD o[COL0].xyz, c[36], R2.z, R3; # + specular\n"
  85. "END\n";
  86. static const char *prog4 =
  87. "!!VP1.0\n"
  88. "DP4 R2, R3, c[A0.x];\n"
  89. "DP4 R2, R3, c[A0.x + 5];\n"
  90. "DP4 o[HPOS], R3, c[A0.x - 4];\n"
  91. "END\n";
  92. static const char *prog5 =
  93. "!!VSP1.0\n"
  94. "DP4 R2, R3, c[A0.x];\n"
  95. "DP4 R2, R3, v[0];\n"
  96. "DP4 c[3], R3, R2;\n"
  97. "END\n";
  98. GLuint progs[5];
  99. glGenProgramsNV(2, progs);
  100. assert(progs[0]);
  101. assert(progs[1]);
  102. assert(progs[0] != progs[1]);
  103. glGenProgramsNV(3, progs + 2);
  104. assert(progs[2]);
  105. assert(progs[3]);
  106. assert(progs[2] != progs[3]);
  107. assert(progs[0] != progs[2]);
  108. glLoadProgramNV(GL_VERTEX_PROGRAM_NV, 1,
  109. strlen(prog1),
  110. (const GLubyte *) prog1);
  111. assert(!glIsProgramNV(1));
  112. glLoadProgramNV(GL_VERTEX_PROGRAM_NV, 2,
  113. strlen(prog2),
  114. (const GLubyte *) prog2);
  115. assert(glIsProgramNV(2));
  116. glLoadProgramNV(GL_VERTEX_PROGRAM_NV, 3,
  117. strlen(prog3),
  118. (const GLubyte *) prog3);
  119. assert(glIsProgramNV(3));
  120. glLoadProgramNV(GL_VERTEX_PROGRAM_NV, 4,
  121. strlen(prog4),
  122. (const GLubyte *) prog4);
  123. assert(glIsProgramNV(4));
  124. glLoadProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 5,
  125. strlen(prog5),
  126. (const GLubyte *) prog5);
  127. assert(glIsProgramNV(5));
  128. printf("glGetError = %d\n", (int) glGetError());
  129. }
  130. int main( int argc, char *argv[] )
  131. {
  132. glutInit( &argc, argv );
  133. glutInitWindowPosition( 0, 0 );
  134. glutInitWindowSize( 250, 250 );
  135. glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
  136. glutCreateWindow(argv[0]);
  137. glutReshapeFunc( Reshape );
  138. glutKeyboardFunc( Key );
  139. glutDisplayFunc( Display );
  140. Init();
  141. glutMainLoop();
  142. return 0;
  143. }