7
* Based on the original demo by:
8
* Stefan Gustavson (stegu@itn.liu.se) 2004, 2005
22
#define GETPROCADDRESS(F) wglGetProcAddress(F)
24
#define GETPROCADDRESS(F) glutGetProcAddress(F)
27
static GLhandleARB fragShader;
28
static GLhandleARB vertShader;
29
static GLhandleARB program;
34
static GLint frames = 0;
36
static GLfloat u_time = 0.0f;
38
static PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = NULL;
39
static PFNGLSHADERSOURCEARBPROC glShaderSourceARB = NULL;
40
static PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL;
41
static PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;
42
static PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL;
43
static PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL;
44
static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL;
45
static PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = NULL;
46
static PFNGLUNIFORM1FARBPROC glUniform1fARB = NULL;
48
static void Redisplay (void)
52
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
54
glUniform1fARB (uTime, 0.5f * u_time);
57
glutSolidSphere (2.0, 20, 10);
63
t = glutGet (GLUT_ELAPSED_TIME);
65
GLfloat seconds = (GLfloat) (t - t0) / 1000.0f;
66
GLfloat fps = frames / seconds;
67
printf ("%d frames in %6.3f seconds = %6.3f FPS\n", frames, seconds, fps);
74
static void Idle (void)
80
static void Reshape (int width, int height)
82
glViewport (0, 0, width, height);
83
glMatrixMode (GL_PROJECTION);
85
glFrustum (-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
86
glMatrixMode (GL_MODELVIEW);
88
glTranslatef (0.0f, 0.0f, -15.0f);
91
static void Key (unsigned char key, int x, int y)
102
glutPostRedisplay ();
105
static void Init (void)
107
static const char *fragShaderText =
108
"uniform float time;\n"
109
"varying vec3 position;\n"
111
" gl_FragColor = vec4 (vec3 (0.5 + 0.5 * noise1 (vec4 (position, time))), 1.0);\n"
114
static const char *vertShaderText =
115
"varying vec3 position;\n"
117
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
118
" position = 4.0 * gl_Vertex.xyz;\n"
122
if (!glutExtensionSupported ("GL_ARB_fragment_shader"))
124
printf ("Sorry, this demo requires GL_ARB_fragment_shader\n");
127
if (!glutExtensionSupported ("GL_ARB_shader_objects"))
129
printf ("Sorry, this demo requires GL_ARB_shader_objects\n");
132
if (!glutExtensionSupported ("GL_ARB_shading_language_100"))
134
printf ("Sorry, this demo requires GL_ARB_shading_language_100\n");
137
if (!glutExtensionSupported ("GL_ARB_vertex_shader"))
139
printf ("Sorry, this demo requires GL_ARB_vertex_shader\n");
143
glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)
144
GETPROCADDRESS("glCreateShaderObjectARB");
145
glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)
146
GETPROCADDRESS("glShaderSourceARB");
147
glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)
148
GETPROCADDRESS("glCompileShaderARB");
149
glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)
150
GETPROCADDRESS("glCreateProgramObjectARB");
151
glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)
152
GETPROCADDRESS("glAttachObjectARB");
153
glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)
154
GETPROCADDRESS ("glLinkProgramARB");
155
glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)
156
GETPROCADDRESS("glUseProgramObjectARB");
158
glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)
159
GETPROCADDRESS("glGetUniformLocationARB");
160
glUniform1fARB = (PFNGLUNIFORM1FARBPROC)
161
GETPROCADDRESS("glUniform1fARB");
163
fragShader = glCreateShaderObjectARB (GL_FRAGMENT_SHADER_ARB);
164
glShaderSourceARB (fragShader, 1, &fragShaderText, NULL);
165
glCompileShaderARB (fragShader);
167
vertShader = glCreateShaderObjectARB (GL_VERTEX_SHADER_ARB);
168
glShaderSourceARB (vertShader, 1, &vertShaderText, NULL);
169
glCompileShaderARB (vertShader);
171
program = glCreateProgramObjectARB ();
172
glAttachObjectARB (program, fragShader);
173
glAttachObjectARB (program, vertShader);
174
glLinkProgramARB (program);
175
glUseProgramObjectARB (program);
177
uTime = glGetUniformLocationARB (program, "time");
179
glClearColor (0.0f, 0.1f, 0.3f, 1.0f);
180
glEnable (GL_CULL_FACE);
181
glEnable (GL_DEPTH_TEST);
183
printf ("GL_RENDERER = %s\n", (const char *) glGetString (GL_RENDERER));
186
int main (int argc, char *argv[])
188
glutInit (&argc, argv);
189
glutInitWindowSize (200, 200);
190
glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
191
glutCreateWindow (argv[0]);
192
glutReshapeFunc (Reshape);
193
glutKeyboardFunc (Key);
194
glutDisplayFunc (Redisplay);