Clone of mesa.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

noise2.c 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. /*
  2. * GLSL noise demo.
  3. *
  4. * Michal Krol
  5. * 20 February 2006
  6. *
  7. * Based on the original demo by:
  8. * Stefan Gustavson (stegu@itn.liu.se) 2004, 2005
  9. */
  10. #ifdef WIN32
  11. #include <windows.h>
  12. #endif
  13. #include <stdio.h>
  14. #include <stdlib.h>
  15. #include <GL/gl.h>
  16. #include <GL/glut.h>
  17. #include <GL/glext.h>
  18. #ifdef WIN32
  19. #define GETPROCADDRESS(F) wglGetProcAddress(F)
  20. #else
  21. #define GETPROCADDRESS(F) glutGetProcAddress(F)
  22. #endif
  23. static GLhandleARB fragShader;
  24. static GLhandleARB vertShader;
  25. static GLhandleARB program;
  26. static GLint uTime;
  27. static GLint t0 = 0;
  28. static GLint frames = 0;
  29. static GLfloat u_time = 0.0f;
  30. static PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = NULL;
  31. static PFNGLSHADERSOURCEARBPROC glShaderSourceARB = NULL;
  32. static PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL;
  33. static PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;
  34. static PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL;
  35. static PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL;
  36. static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL;
  37. static PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = NULL;
  38. static PFNGLUNIFORM1FARBPROC glUniform1fARB = NULL;
  39. static void Redisplay (void)
  40. {
  41. GLint t;
  42. glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  43. glUniform1fARB (uTime, 0.5f * u_time);
  44. glPushMatrix ();
  45. glutSolidSphere (2.0, 20, 10);
  46. glPopMatrix ();
  47. glutSwapBuffers();
  48. frames++;
  49. t = glutGet (GLUT_ELAPSED_TIME);
  50. if (t - t0 >= 5000) {
  51. GLfloat seconds = (GLfloat) (t - t0) / 1000.0f;
  52. GLfloat fps = frames / seconds;
  53. printf ("%d frames in %6.3f seconds = %6.3f FPS\n", frames, seconds, fps);
  54. fflush(stdout);
  55. t0 = t;
  56. frames = 0;
  57. }
  58. }
  59. static void Idle (void)
  60. {
  61. u_time += 0.1f;
  62. glutPostRedisplay ();
  63. }
  64. static void Reshape (int width, int height)
  65. {
  66. glViewport (0, 0, width, height);
  67. glMatrixMode (GL_PROJECTION);
  68. glLoadIdentity ();
  69. glFrustum (-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
  70. glMatrixMode (GL_MODELVIEW);
  71. glLoadIdentity ();
  72. glTranslatef (0.0f, 0.0f, -15.0f);
  73. }
  74. static void Key (unsigned char key, int x, int y)
  75. {
  76. (void) x;
  77. (void) y;
  78. switch (key)
  79. {
  80. case 27:
  81. exit(0);
  82. break;
  83. }
  84. glutPostRedisplay ();
  85. }
  86. static void Init (void)
  87. {
  88. static const char *fragShaderText =
  89. "uniform float time;\n"
  90. "varying vec3 position;\n"
  91. "void main () {\n"
  92. " gl_FragColor = vec4 (vec3 (0.5 + 0.5 * noise1 (vec4 (position, time))), 1.0);\n"
  93. "}\n"
  94. ;
  95. static const char *vertShaderText =
  96. "varying vec3 position;\n"
  97. "void main () {\n"
  98. " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
  99. " position = 4.0 * gl_Vertex.xyz;\n"
  100. "}\n"
  101. ;
  102. if (!glutExtensionSupported ("GL_ARB_fragment_shader"))
  103. {
  104. printf ("Sorry, this demo requires GL_ARB_fragment_shader\n");
  105. exit(1);
  106. }
  107. if (!glutExtensionSupported ("GL_ARB_shader_objects"))
  108. {
  109. printf ("Sorry, this demo requires GL_ARB_shader_objects\n");
  110. exit(1);
  111. }
  112. if (!glutExtensionSupported ("GL_ARB_shading_language_100"))
  113. {
  114. printf ("Sorry, this demo requires GL_ARB_shading_language_100\n");
  115. exit(1);
  116. }
  117. if (!glutExtensionSupported ("GL_ARB_vertex_shader"))
  118. {
  119. printf ("Sorry, this demo requires GL_ARB_vertex_shader\n");
  120. exit(1);
  121. }
  122. glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)
  123. GETPROCADDRESS("glCreateShaderObjectARB");
  124. glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)
  125. GETPROCADDRESS("glShaderSourceARB");
  126. glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)
  127. GETPROCADDRESS("glCompileShaderARB");
  128. glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)
  129. GETPROCADDRESS("glCreateProgramObjectARB");
  130. glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)
  131. GETPROCADDRESS("glAttachObjectARB");
  132. glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)
  133. GETPROCADDRESS ("glLinkProgramARB");
  134. glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)
  135. GETPROCADDRESS("glUseProgramObjectARB");
  136. glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)
  137. GETPROCADDRESS("glGetUniformLocationARB");
  138. glUniform1fARB = (PFNGLUNIFORM1FARBPROC)
  139. GETPROCADDRESS("glUniform1fARB");
  140. fragShader = glCreateShaderObjectARB (GL_FRAGMENT_SHADER_ARB);
  141. glShaderSourceARB (fragShader, 1, &fragShaderText, NULL);
  142. glCompileShaderARB (fragShader);
  143. vertShader = glCreateShaderObjectARB (GL_VERTEX_SHADER_ARB);
  144. glShaderSourceARB (vertShader, 1, &vertShaderText, NULL);
  145. glCompileShaderARB (vertShader);
  146. program = glCreateProgramObjectARB ();
  147. glAttachObjectARB (program, fragShader);
  148. glAttachObjectARB (program, vertShader);
  149. glLinkProgramARB (program);
  150. glUseProgramObjectARB (program);
  151. uTime = glGetUniformLocationARB (program, "time");
  152. glClearColor (0.0f, 0.1f, 0.3f, 1.0f);
  153. glEnable (GL_CULL_FACE);
  154. glEnable (GL_DEPTH_TEST);
  155. printf ("GL_RENDERER = %s\n", (const char *) glGetString (GL_RENDERER));
  156. }
  157. int main (int argc, char *argv[])
  158. {
  159. glutInit (&argc, argv);
  160. glutInitWindowSize (200, 200);
  161. glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  162. glutCreateWindow (argv[0]);
  163. glutReshapeFunc (Reshape);
  164. glutKeyboardFunc (Key);
  165. glutDisplayFunc (Redisplay);
  166. glutIdleFunc (Idle);
  167. Init ();
  168. glutMainLoop ();
  169. return 0;
  170. }