Clone of mesa.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

glslnoise.c 5.1KB

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. t0 = t;
  55. frames = 0;
  56. }
  57. }
  58. static void Idle (void)
  59. {
  60. u_time += 0.1f;
  61. glutPostRedisplay ();
  62. }
  63. static void Reshape (int width, int height)
  64. {
  65. glViewport (0, 0, width, height);
  66. glMatrixMode (GL_PROJECTION);
  67. glLoadIdentity ();
  68. glFrustum (-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
  69. glMatrixMode (GL_MODELVIEW);
  70. glLoadIdentity ();
  71. glTranslatef (0.0f, 0.0f, -15.0f);
  72. }
  73. static void Key (unsigned char key, int x, int y)
  74. {
  75. (void) x;
  76. (void) y;
  77. switch (key)
  78. {
  79. case 27:
  80. exit(0);
  81. break;
  82. }
  83. glutPostRedisplay ();
  84. }
  85. static void Init (void)
  86. {
  87. static const char *fragShaderText =
  88. "uniform float time;\n"
  89. "varying vec3 position;\n"
  90. "void main () {\n"
  91. " gl_FragColor = vec4 (vec3 (0.5 + 0.5 * noise1 (vec4 (position, time))), 1.0);\n"
  92. "}\n"
  93. ;
  94. static const char *vertShaderText =
  95. "varying vec3 position;\n"
  96. "void main () {\n"
  97. " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
  98. " position = 4.0 * gl_Vertex.xyz;\n"
  99. "}\n"
  100. ;
  101. if (!glutExtensionSupported ("GL_ARB_fragment_shader"))
  102. {
  103. printf ("Sorry, this demo requires GL_ARB_fragment_shader\n");
  104. exit(1);
  105. }
  106. if (!glutExtensionSupported ("GL_ARB_shader_objects"))
  107. {
  108. printf ("Sorry, this demo requires GL_ARB_shader_objects\n");
  109. exit(1);
  110. }
  111. if (!glutExtensionSupported ("GL_ARB_shading_language_100"))
  112. {
  113. printf ("Sorry, this demo requires GL_ARB_shading_language_100\n");
  114. exit(1);
  115. }
  116. if (!glutExtensionSupported ("GL_ARB_vertex_shader"))
  117. {
  118. printf ("Sorry, this demo requires GL_ARB_vertex_shader\n");
  119. exit(1);
  120. }
  121. glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)
  122. GETPROCADDRESS("glCreateShaderObjectARB");
  123. glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)
  124. GETPROCADDRESS("glShaderSourceARB");
  125. glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)
  126. GETPROCADDRESS("glCompileShaderARB");
  127. glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)
  128. GETPROCADDRESS("glCreateProgramObjectARB");
  129. glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)
  130. GETPROCADDRESS("glAttachObjectARB");
  131. glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)
  132. GETPROCADDRESS ("glLinkProgramARB");
  133. glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)
  134. GETPROCADDRESS("glUseProgramObjectARB");
  135. glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)
  136. GETPROCADDRESS("glGetUniformLocationARB");
  137. glUniform1fARB = (PFNGLUNIFORM1FARBPROC)
  138. GETPROCADDRESS("glUniform1fARB");
  139. fragShader = glCreateShaderObjectARB (GL_FRAGMENT_SHADER_ARB);
  140. glShaderSourceARB (fragShader, 1, &fragShaderText, NULL);
  141. glCompileShaderARB (fragShader);
  142. vertShader = glCreateShaderObjectARB (GL_VERTEX_SHADER_ARB);
  143. glShaderSourceARB (vertShader, 1, &vertShaderText, NULL);
  144. glCompileShaderARB (vertShader);
  145. program = glCreateProgramObjectARB ();
  146. glAttachObjectARB (program, fragShader);
  147. glAttachObjectARB (program, vertShader);
  148. glLinkProgramARB (program);
  149. glUseProgramObjectARB (program);
  150. uTime = glGetUniformLocationARB (program, "time");
  151. glClearColor (0.0f, 0.1f, 0.3f, 1.0f);
  152. glEnable (GL_CULL_FACE);
  153. glEnable (GL_DEPTH_TEST);
  154. printf ("GL_RENDERER = %s\n", (const char *) glGetString (GL_RENDERER));
  155. }
  156. int main (int argc, char *argv[])
  157. {
  158. glutInit (&argc, argv);
  159. glutInitWindowPosition ( 0, 0);
  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. }