static void CheckForShaders(NSOpenGLPixelFormatAttribute *thePixelAttributes) { const GLubyte *extensions = glGetString(GL_EXTENSIONS); GLboolean bShaderObjectAvailable = CheckForExtension("GL_ARB_shader_objects", extensions); GLboolean bShaderLanguage100Available = CheckForExtension("GL_ARB_shading_language_100", extensions); GLboolean bVertexShaderAvailable = CheckForExtension("GL_ARB_vertex_shader", extensions); GLboolean bFragmentShaderAvailable = CheckForExtension("GL_ARB_fragment_shader", extensions); GLboolean bForceSoftwareRendering = (bShaderObjectAvailable == GL_FALSE) || (bShaderLanguage100Available == GL_FALSE) || (bVertexShaderAvailable == GL_FALSE) || (bFragmentShaderAvailable == GL_FALSE); if( bForceSoftwareRendering ) { // Force software rendering, so fragment shaders will execute CheckForAndLogExtensionAvailable(bShaderObjectAvailable, "GL_ARB_shader_objects"); CheckForAndLogExtensionAvailable(bShaderLanguage100Available, "GL_ARB_shading_language_100"); CheckForAndLogExtensionAvailable(bVertexShaderAvailable, "GL_ARB_vertex_shader"); CheckForAndLogExtensionAvailable(bFragmentShaderAvailable, "GL_ARB_fragment_shader"); thePixelAttributes [3] = NSOpenGLPFARendererID; thePixelAttributes [4] = kCGLRendererGenericFloatID; } // if } // CheckForShaders
int main(int argc, char *argv[]) { glutInit(&argc, argv); printf("Written by Christopher Niederauer\n"); printf("[email protected]\n"); InitGL(); InitSpecial(); #ifdef CCN_DEBUG printf(" Vendor: %s\n", glGetString(GL_VENDOR)); printf(" Renderer: %s\n", glGetString(GL_RENDERER)); printf(" Version: %s\n", glGetString(GL_VERSION)); printf("Extensions: %s\n", glGetString(GL_EXTENSIONS)); #endif if (CheckForExtension(TEST_EXTENSION_STRING)) { printf("Extension %s supported. Executing...\n", TEST_EXTENSION_STRING); } else { printf("Error: %s not supported. Exiting.\n", TEST_EXTENSION_STRING); return 0; } glutMainLoop(); return 0; }
static void CheckForClipVolumeHint(NSOpenGLPixelFormatAttribute *thePixelAttributes) { const GLubyte *extensions = glGetString(GL_EXTENSIONS); // Inform OpenGL that the geometry is entirely within the // view volume and that view-volume clipping is unnecessary. // Normal clipping can be resumed by setting this hint to // GL_DONT_CARE. When clipping is disabled with this hint, // results are undefined if geometry actually falls outside //the view volume. GLboolean bClipVolumeHintExtAvailable = CheckForExtension("GL_EXT_clip_volume_hint", extensions); if( bClipVolumeHintExtAvailable == GL_TRUE) { glHint(GL_CLIP_VOLUME_CLIPPING_HINT_EXT,GL_FASTEST); } // if } // CheckForClipVolumeHint