diff options
Diffstat (limited to 'progs/demos/glslnoise.c')
-rwxr-xr-x | progs/demos/glslnoise.c | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/progs/demos/glslnoise.c b/progs/demos/glslnoise.c new file mode 100755 index 00000000000..10414393371 --- /dev/null +++ b/progs/demos/glslnoise.c @@ -0,0 +1,176 @@ +/* + * GLSL noise demo. + *
+ * Michal Krol
+ * 17 February 2006 + *
+ * Based on the original demo by: + * Stefan Gustavson ([email protected]) 2004, 2005 + */
+
+#ifdef WIN32
+#include <windows.h>
+#endif + +#include <stdio.h> +#include <stdlib.h> +#include <GL/gl.h>
+#include <GL/glut.h>
+#include <GL/glext.h>
+
+#ifdef WIN32
+#define GETPROCADDRESS wglGetProcAddress
+#else
+#define GETPROCADDRESS glutGetProcAddress
+#endif
+ +static GLhandleARB fragShader; +static GLhandleARB vertShader;
+static GLhandleARB program;
+
+static GLfloat u_time = 0.0f;
+ +static PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = NULL;
+static PFNGLSHADERSOURCEARBPROC glShaderSourceARB = NULL;
+static PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL;
+static PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;
+static PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL;
+static PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL;
+static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL; + +static void Redisplay (void) +{ + glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ /* XXX source from uniform time */
+ glTexCoord1f (u_time); + + glPushMatrix (); + glutSolidSphere (2.0, 20, 10);
+ glPopMatrix (); + + glutSwapBuffers(); +} + +static void Idle (void) +{
+ u_time += 0.1f; + glutPostRedisplay (); +} + +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.0f, 0.0f, -15.0f); +} + +static void Key (unsigned char key, int x, int y) +{ + (void) x; + (void) y;
+ + switch (key)
+ { + case 27: + exit(0); + break; + } + glutPostRedisplay (); +} + +static void Init (void) +{ + static const char *fragShaderText = + "void main () {\n"
+
+ /* XXX source from uniform time */
+ " float time;\n"
+ " time = gl_TexCoord[1].x;\n"
+
+ " vec4 v;\n"
+ " v = vec4 (4.0 * gl_TexCoord[0].xyz, 0.5 * time);\n"
+ " gl_FragColor = gl_Color * vec4 ((0.5 + 0.5 * vec3 (noise1 (v))), 1.0);\n"
+ "}\n" + ; + static const char *vertShaderText = + "void main () {\n"
+ " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
+ " gl_TexCoord[0] = gl_Vertex;\n"
+ " gl_FrontColor = gl_Color;\n"
+
+ /* XXX source from uniform time */
+ " gl_TexCoord[1] = gl_MultiTexCoord0;\n"
+ "}\n" + ; +
+ if (!glutExtensionSupported ("GL_ARB_fragment_shader"))
+ { + printf ("Sorry, this demo requires GL_ARB_fragment_shader\n"); + exit(1); + }
+ if (!glutExtensionSupported ("GL_ARB_shader_objects"))
+ {
+ printf ("Sorry, this demo requires GL_ARB_shader_objects\n");
+ exit(1);
+ }
+ if (!glutExtensionSupported ("GL_ARB_shading_language_100"))
+ {
+ printf ("Sorry, this demo requires GL_ARB_shading_language_100\n");
+ exit(1);
+ }
+ if (!glutExtensionSupported ("GL_ARB_vertex_shader"))
+ {
+ printf ("Sorry, this demo requires GL_ARB_vertex_shader\n");
+ exit(1);
+ } + + glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) wglGetProcAddress ("glCreateShaderObjectARB");
+ glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) wglGetProcAddress ("glShaderSourceARB");
+ glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) wglGetProcAddress ("glCompileShaderARB");
+ glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) wglGetProcAddress ("glCreateProgramObjectARB");
+ glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) wglGetProcAddress ("glAttachObjectARB");
+ glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) wglGetProcAddress ("glLinkProgramARB");
+ glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) wglGetProcAddress ("glUseProgramObjectARB");
+
+ fragShader = glCreateShaderObjectARB (GL_FRAGMENT_SHADER_ARB);
+ glShaderSourceARB (fragShader, 1, &fragShaderText, NULL);
+ glCompileShaderARB (fragShader); +
+ vertShader = glCreateShaderObjectARB (GL_VERTEX_SHADER_ARB);
+ glShaderSourceARB (vertShader, 1, &vertShaderText, NULL);
+ glCompileShaderARB (vertShader);
+
+ program = glCreateProgramObjectARB ();
+ glAttachObjectARB (program, fragShader);
+ glAttachObjectARB (program, vertShader);
+ glLinkProgramARB (program);
+ glUseProgramObjectARB (program);
+ + glClearColor (0.0f, 0.1f, 0.3f, 1.0f);
+ glEnable (GL_CULL_FACE); + glEnable (GL_DEPTH_TEST); + + printf ("GL_RENDERER = %s\n", (const char *) glGetString (GL_RENDERER)); +} + +int main (int argc, char *argv[]) +{ + glutInit (&argc, argv); + glutInitWindowPosition ( 0, 0); + glutInitWindowSize (200, 200); + glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); + glutCreateWindow (argv[0]); + glutReshapeFunc (Reshape); + glutKeyboardFunc (Key); + glutDisplayFunc (Redisplay); + glutIdleFunc (Idle); + Init (); + glutMainLoop (); + return 0; +} +
|