// This function does any needed initialization on the rendering // context. void SetupRC() { GLint i; fprintf(stdout, "Vertex Shaders Demo\n\n"); // Make sure required functionality is available! if (!GLEE_VERSION_2_0 && (!GLEE_ARB_vertex_shader || !GLEE_ARB_shader_objects || !GLEE_ARB_shading_language_100)) { fprintf(stderr, "GLSL extensions not available!\n"); Sleep(2000); exit(0); } // Make sure we have multitexture, cube maps, and texenv add! if (!GLEE_VERSION_1_3 && (!GLEE_ARB_multitexture || !GLEE_ARB_texture_cube_map || !GLEE_ARB_texture_env_add)) { fprintf(stderr, "Neither OpenGL 1.3 nor necessary" " extensions are available!\n"); Sleep(2000); exit(0); } glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); fprintf(stdout, "Controls:\n"); fprintf(stdout, "\tRight-click for menu\n\n"); fprintf(stdout, "\tR/L arrows\t+/- fog density for \"fog\" shader\n"); fprintf(stdout, "\tR/L arrows\t+/- rotate lights for others shaders\n\n"); fprintf(stdout, "\tx/X\t\tMove +/- in x direction, stretch for \"stretch\" shader\n"); fprintf(stdout, "\ty/Y\t\tMove +/- in y direction, stretch for \"stretch\" shader\n"); fprintf(stdout, "\tz/Z\t\tMove +/- in z direction, stretch for \"stretch\" shader\n\n"); fprintf(stdout, "\tq\t\tExit demo\n\n"); // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); // Misc. state glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glShadeModel(GL_SMOOTH); glFogfv(GL_FOG_COLOR, fogColor); glFogi(GL_FOG_MODE, GL_EXP2); glFogi(GL_FOG_COORD_SRC, GL_FOG_COORD); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Texture state glActiveTexture(GL_TEXTURE3); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); glBindTexture(GL_TEXTURE_1D, 3); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); CreatePowMap(0.25, 0.25, 1.0); glActiveTexture(GL_TEXTURE2); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); glBindTexture(GL_TEXTURE_1D, 2); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); CreatePowMap(0.25, 1.0, 0.25); glActiveTexture(GL_TEXTURE1); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); glBindTexture(GL_TEXTURE_1D, 1); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); CreatePowMap(1.0, 0.25, 0.25); glActiveTexture(GL_TEXTURE0); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); glBindTexture(GL_TEXTURE_1D, 0); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); CreatePowMap(1.0, 1.0, 1.0); // Load and compile shaders for (i = 0; i < TOTAL_SHADERS; i++) { PrepareShader(i); } // Install first shader glUseProgram(progObj[whichShader]); }
// This function does any needed initialization on the rendering // context. void SetupRC() { const GLubyte *version; GLint i; fprintf(stdout, "Vertex Blending Demo\n\n"); // Make sure required functionality is available! if (gltIsExtSupported("GL_ARB_vertex_shader") && gltIsExtSupported("GL_ARB_shader_objects") && gltIsExtSupported("GL_ARB_shading_language_100")) { highLevelAvailable = GL_TRUE; } if (gltIsExtSupported("GL_ARB_vertex_program")) { lowLevelAvailable = GL_TRUE; } if (!lowLevelAvailable && !highLevelAvailable) { fprintf(stderr, "Neither vertex shader" " extension is available!\n"); usleep(2000); exit(0); } // Make sure we have 1.3+, multitexture, cube maps, and texenv add! version = glGetString(GL_VERSION); if ( ((version[0] == '1') && ((version[1] != '.') || (version[2] < '3') || (version[2] > '9'))) && (!gltIsExtSupported("GL_ARB_multitexture") || !gltIsExtSupported("GL_ARB_texture_env_add")) ) { fprintf(stderr, "Neither OpenGL 1.3 nor necessary" " extensions are available!\n"); usleep(2000); exit(0); } glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); if (lowLevelAvailable) { glGenProgramsARB = gltGetExtensionPointer("glGenProgramsARB"); glBindProgramARB = gltGetExtensionPointer("glBindProgramARB"); glProgramStringARB = gltGetExtensionPointer("glProgramStringARB"); glDeleteProgramsARB = gltGetExtensionPointer("glDeleteProgramsARB"); glProgramLocalParameter4fARB = gltGetExtensionPointer("glProgramLocalParameter4fARB"); glProgramLocalParameter4fvARB = gltGetExtensionPointer("glProgramLocalParameter4fvARB"); glVertexAttrib1fARB = gltGetExtensionPointer("glVertexAttrib1fARB"); if (!glGenProgramsARB || !glBindProgramARB || !glProgramStringARB || !glDeleteProgramsARB || !glProgramLocalParameter4fARB || !glProgramLocalParameter4fvARB || !glVertexAttrib1fARB) { fprintf(stderr, "Not all entrypoints were available!\n"); usleep(2000); exit(0); } } if (highLevelAvailable) { glCreateShaderObjectARB = gltGetExtensionPointer("glCreateShaderObjectARB"); glCreateProgramObjectARB = gltGetExtensionPointer("glCreateProgramObjectARB"); glAttachObjectARB = gltGetExtensionPointer("glAttachObjectARB"); glDetachObjectARB = gltGetExtensionPointer("glDetachObjectARB"); glDeleteObjectARB = gltGetExtensionPointer("glDeleteObjectARB"); glShaderSourceARB = gltGetExtensionPointer("glShaderSourceARB"); glCompileShaderARB = gltGetExtensionPointer("glCompileShaderARB"); glLinkProgramARB = gltGetExtensionPointer("glLinkProgramARB"); glValidateProgramARB = gltGetExtensionPointer("glValidateProgramARB"); glUseProgramObjectARB = gltGetExtensionPointer("glUseProgramObjectARB"); glGetObjectParameterivARB = gltGetExtensionPointer("glGetObjectParameterivARB"); glGetInfoLogARB = gltGetExtensionPointer("glGetInfoLogARB"); glUniform3fvARB = gltGetExtensionPointer("glUniform3fvARB"); glUniformMatrix3fvARB = gltGetExtensionPointer("glUniformMatrix3fvARB"); glUniformMatrix4fvARB = gltGetExtensionPointer("glUniformMatrix4fvARB"); glVertexAttrib1fARB = gltGetExtensionPointer("glVertexAttrib1fARB"); glGetUniformLocationARB = gltGetExtensionPointer("glGetUniformLocationARB"); glGetAttribLocationARB = gltGetExtensionPointer("glGetAttribLocationARB"); if (!glCreateShaderObjectARB || !glCreateProgramObjectARB || !glAttachObjectARB || !glDetachObjectARB || !glDeleteObjectARB || !glShaderSourceARB || !glCompileShaderARB || !glLinkProgramARB || !glValidateProgramARB || !glUseProgramObjectARB || !glGetObjectParameterivARB || !glGetInfoLogARB || !glUniformMatrix4fvARB || !glUniformMatrix4fvARB || !glUniform3fvARB || !glVertexAttrib1fARB || !glGetUniformLocationARB || !glGetAttribLocationARB) { fprintf(stderr, "Not all entrypoints were available!\n"); usleep(2000); exit(0); } useHighLevel = GL_TRUE; } fprintf(stdout, "Controls:\n"); fprintf(stdout, "\tRight-click for menu\n\n"); fprintf(stdout, "\tL/R arrows\tChange sphere of influence\n"); fprintf(stdout, "\tU/D arrows\tChange angle of forearm\n\n"); fprintf(stdout, "\tx/X\t\tMove +/- in x direction\n"); fprintf(stdout, "\ty/Y\t\tMove +/- in y direction\n"); fprintf(stdout, "\tz/Z\t\tMove +/- in z direction\n\n"); fprintf(stdout, "\tq\t\tExit demo\n\n"); // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); // Hidden surface removal glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); // Misc. glShadeModel(GL_SMOOTH); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPointSize(10.0f); glLineWidth(5.0f); // Texture state glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); glBindTexture(GL_TEXTURE_1D, 0+1); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP); CreatePowMap(1.0, 1.0, 1.0); glEnable(GL_TEXTURE_1D); if (lowLevelAvailable) { glGenProgramsARB(TOTAL_SHADERS, ids); // Low-level will always be enabled, but high-level // will take precedence if they're both enabled glEnable(GL_VERTEX_PROGRAM_ARB); } // Load and compile low- and high-level shaders for (i = 0; i < TOTAL_SHADERS; i++) { PrepareShader(i); } // Install first shader if (lowLevelAvailable) { glBindProgramARB(GL_VERTEX_PROGRAM_ARB, ids[0]); } if (useHighLevel) { glUseProgramObjectARB(progObj[0]); } }
// This function does any needed initialization on the rendering // context. void SetupRC() { GLint i; fprintf(stdout, "Vertex Blending Demo\n\n"); // Make sure required functionality is available! if (!GLEE_VERSION_2_0 && (!GLEE_ARB_vertex_shader || !GLEE_ARB_shader_objects || !GLEE_ARB_shading_language_100)) { fprintf(stderr, "GLSL extensions not available!\n"); Sleep(2000); exit(0); } // Make sure we have multitexture, cube maps, and texenv add! if (!GLEE_VERSION_1_3 && (!GLEE_ARB_multitexture || !GLEE_ARB_texture_cube_map || !GLEE_ARB_texture_env_add)) { fprintf(stderr, "Neither OpenGL 1.3 nor necessary" " extensions are available!\n"); Sleep(2000); exit(0); } glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); fprintf(stdout, "Controls:\n"); fprintf(stdout, "\tRight-click for menu\n\n"); fprintf(stdout, "\tL/R arrows\tChange sphere of influence\n"); fprintf(stdout, "\tU/D arrows\tChange angle of forearm\n\n"); fprintf(stdout, "\tx/X\t\tMove +/- in x direction\n"); fprintf(stdout, "\ty/Y\t\tMove +/- in y direction\n"); fprintf(stdout, "\tz/Z\t\tMove +/- in z direction\n\n"); fprintf(stdout, "\tq\t\tExit demo\n\n"); // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); // Hidden surface removal glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); // Misc. glShadeModel(GL_SMOOTH); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPointSize(10.0f); glLineWidth(5.0f); // Texture state glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD); glBindTexture(GL_TEXTURE_1D, 0); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP); CreatePowMap(1.0, 1.0, 1.0); glEnable(GL_TEXTURE_1D); // Load and compile shaders for (i = 0; i < TOTAL_SHADERS; i++) { PrepareShader(i); } // Install first shader glUseProgram(progObj[0]); }