////////////////////////////////////////////////////////////////// // This function does any needed initialization on the rendering // context. void SetupRC(void) { #ifdef _WIN32 glHistogram = gltGetExtensionPointer("glHistogram"); glGetHistogram = gltGetExtensionPointer("glGetHistogram"); glColorTable = gltGetExtensionPointer("glColorTable"); glConvolutionFilter2D = gltGetExtensionPointer("glConvolutionFilter2D"); #endif // Black background glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Load the horse image glPixelStorei(GL_UNPACK_ALIGNMENT, 1); pImage = (GLubyte *)gltLoadTGA("horse.tga", &iWidth, &iHeight, &iComponents, &eFormat); }
void initGL() { glewInit(); glActiveTexture = (PFNGLACTIVETEXTUREPROC)gltGetExtensionPointer("glActiveTexture"); // Black background glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); // Hidden surface removal glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glPolygonOffset(4.0f, 0.0f); // Set up some lighting state that never changes glShadeModel(GL_SMOOTH); glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); glEnable(GL_NORMALIZE); glEnable(GL_LIGHT0); glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); GLuint shadowTextureID; // Set up some texture state that never changes glActiveTexture(GL_TEXTURE1); glGenTextures(1, &shadowTextureID); glBindTexture(GL_TEXTURE_2D, shadowTextureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY); glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); }
// This function does any needed initialization on the rendering // context. void SetupRC() { const GLubyte *version; GLboolean glVersion15 = GL_FALSE; fprintf(stdout, "Buffer Object Demo\n\n"); // Make sure required functionality is available! version = glGetString(GL_VERSION); if ((version[0] == '1') && (version[1] == '.') && (version[2] >= '5') && (version[2] <= '9')) { glVersion15 = GL_TRUE; } if (!glVersion15 && !gltIsExtSupported("GL_ARB_vertex_buffer_object")) { fprintf(stderr, "Neither OpenGL 1.5 nor GL_ARB_vertex_buffer_object" " extension is available!\n"); sleep(2); exit(0); } // Load the function pointers if (glVersion15) { glBindBuffer = gltGetExtensionPointer("glBindBuffer"); glBufferData = gltGetExtensionPointer("glBufferData"); glBufferSubData = gltGetExtensionPointer("glBufferSubData"); glDeleteBuffers = gltGetExtensionPointer("glDeleteBuffers"); glGenBuffers = gltGetExtensionPointer("glGenBuffers"); glMapBuffer = gltGetExtensionPointer("glMapBuffer"); glUnmapBuffer = gltGetExtensionPointer("glUnmapBuffer"); } else { glBindBuffer = gltGetExtensionPointer("glBindBufferARB"); glBufferData = gltGetExtensionPointer("glBufferDataARB"); glBufferSubData = gltGetExtensionPointer("glBufferSubDataARB"); glDeleteBuffers = gltGetExtensionPointer("glDeleteBuffersARB"); glGenBuffers = gltGetExtensionPointer("glGenBuffersARB"); glMapBuffer = gltGetExtensionPointer("glMapBufferARB"); glUnmapBuffer = gltGetExtensionPointer("glUnmapBufferARB"); } if (!glBindBuffer || !glBufferData || !glBufferSubData || !glDeleteBuffers || !glGenBuffers || !glMapBuffer || !glUnmapBuffer) { fprintf(stderr, "Not all entrypoints were available!\n"); sleep(2); exit(0); } sphereVertexArray = (GLfloat *)malloc(sizeof(GLfloat) * numSphereVertices * 3); if (!sphereVertexArray) { fprintf(stderr, "Unable to allocate system memory for vertex arrays!"); sleep(2); exit(0); } fprintf(stdout, "Controls:\n"); fprintf(stdout, "\tRight-click for menu\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"); // Generate a buffer object glGenBuffers(1, &bufferID); // Create the data store glBindBuffer(GL_ARRAY_BUFFER, bufferID); glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * numSphereVertices * 3, NULL, GL_STATIC_DRAW); // Set up vertex arrays RegenerateSphere(); SetRenderingMethod(); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); // Black background glClearColor(0.3f, 0.3f, 0.3f, 1.0f ); // Hidden surface removal glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); // Set up some lighting state that never changes glShadeModel(GL_SMOOTH); glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); glEnable(GL_NORMALIZE); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight); glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight); }
// 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]); } }