bool hasGLSLSupport(void) { bGeometryShader = hasGeometryShaderSupport(); bGPUShader4 = hasShaderModel4(); if (useGLSL) return true; // already initialized and GLSL is available useGLSL = true; if (!extensions_init) InitOpenGLExtensions(); // extensions were not yet initialized!! /* if (GLEW_VERSION_2_0) { cerr << "OpenGL 2.0 (or higher) is available!" << endl; } else if (GLEW_VERSION_1_5) { cerr << "OpenGL 1.5 core functions are available" << endl; } else if (GLEW_VERSION_1_4) { cerr << "OpenGL 1.4 core functions are available" << endl; } else if (GLEW_VERSION_1_3) { cerr << "OpenGL 1.3 core functions are available" << endl; } else if (GLEW_VERSION_1_2) { cerr << "OpenGL 1.2 core functions are available" << endl; } */ if (GL_TRUE != glewGetExtension("GL_ARB_fragment_shader")) { cerr << "[WARNING] GL_ARB_fragment_shader extension is not available!\n"; useGLSL = false; } if (GL_TRUE != glewGetExtension("GL_ARB_vertex_shader")) { cerr << "[WARNING] GL_ARB_vertex_shader extension is not available!\n"; useGLSL = false; } if (GL_TRUE != glewGetExtension("GL_ARB_shader_objects")) { cerr << "[WARNING] GL_ARB_shader_objects extension is not available!\n"; useGLSL = false; } if (!useGLSL) { cerr << "[FAILED] OpenGL Shading Language is not available...\n\n"; } return useGLSL; }
qboolean VR_Enable() { int i; if( ovr_Initialize(NULL) != ovrSuccess ) { Con_Printf("Failed to Initialize Oculus SDK"); return false; } if( ovrHmd_Create(0, &hmd) != ovrSuccess ) { Con_Printf("Failed to get HMD"); return false; } if( !InitOpenGLExtensions() ) { Con_Printf("Failed to initialize OpenGL extensions"); return false; } ovrHmd_CreateMirrorTextureGL(hmd, GL_RGBA, glwidth, glheight, (ovrTexture**)&mirror_texture); glGenFramebuffersEXT(1, &mirror_fbo); glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, mirror_fbo); glFramebufferTexture2DEXT(GL_READ_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, mirror_texture->OGL.TexId, 0); glFramebufferRenderbufferEXT(GL_READ_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, 0); glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0); for( i = 0; i < 2; i++ ) { ovrSizei size = ovrHmd_GetFovTextureSize(hmd, (ovrEyeType)i, hmd->DefaultEyeFov[i], 1); eyes[i].index = i; eyes[i].fbo = CreateFBO(size.w, size.h); eyes[i].render_desc = ovrHmd_GetRenderDesc(hmd, (ovrEyeType)i, hmd->DefaultEyeFov[i]); eyes[i].fov_x = (atan(hmd->DefaultEyeFov[i].LeftTan) + atan(hmd->DefaultEyeFov[i].RightTan)) / M_PI_DIV_180; eyes[i].fov_y = (atan(hmd->DefaultEyeFov[i].UpTan) + atan(hmd->DefaultEyeFov[i].DownTan)) / M_PI_DIV_180; } ovrHmd_SetEnabledCaps(hmd, ovrHmdCap_LowPersistence|ovrHmdCap_DynamicPrediction); ovrHmd_ConfigureTracking(hmd, ovrTrackingCap_Orientation|ovrTrackingCap_MagYawCorrection|ovrTrackingCap_Position, 0); wglSwapIntervalEXT(0); // Disable V-Sync vr_initialized = true; return true; }
/** ** Initialize OpenGL */ static void InitOpenGL(void) { InitOpenGLExtensions(); glViewport(0, 0, (GLsizei)Video.Width, (GLsizei)Video.Height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrthof(0, Video.Width, Video.Height, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.375, 0.375, 0.); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepthf(1.0f); glShadeModel(GL_FLAT); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_LINE_SMOOTH); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glGetIntegerv(GL_MAX_TEXTURE_SIZE, &GLMaxTextureSize); if (GLMaxTextureSize == 0) { // FIXME: try to use GL_PROXY_TEXTURE_2D to get a valid size #if 0 glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA, size, size, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glGetTexLevelParameterfv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &internalFormat); #endif fprintf(stderr, "GL_MAX_TEXTURE_SIZE is 0, using 256 by default\n"); GLMaxTextureSize = 256; } if (GLMaxTextureSize > GLMaxTextureSizeOverride && GLMaxTextureSizeOverride > 0) { GLMaxTextureSize = GLMaxTextureSizeOverride; } }
void C_API Program::Initialize(int window_width, int window_height, int argc, char * argv[]) { // Init Glut: glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(window_width, window_height); glutInitWindowPosition(0,0); m_WinId = glutCreateWindow("Wavefront Object Viewer"); // Set Glut Function Pointers: glutReshapeFunc(Program::ResizeWindow); glutDisplayFunc(Program::Render); glutIdleFunc(Program::Render); glutKeyboardFunc(Program::KeyboardCallback); glutMouseFunc(Program::MouseCallback); glutMotionFunc(Program::MouseMotionCallback); atexit(Program::Shutdown); ResizeWindow(window_width, window_height); glCullFace(GL_NONE); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); memset(&m_LoadedObj, 0, sizeof(Program::UserObjectInfo)); m_MenuIds[0] = -1; // Set To An Invalid Menu Id. m_MenuIds[1] = -1; SetUpMenus(NULL); if (InitOpenGLExtensions() == 0) MessageBox(0, "Warning! Some OpenGL Extensions Are Not Available! The Program May Not Work Properly.", "Warning!", (MB_OK | MB_ICONWARNING)); glClearColor(0.3f, 0.3f, 0.3f, 1.0f); }
bool HasOpenGL2Support(void) { if (!extensions_init) InitOpenGLExtensions(); return (GLEW_VERSION_2_0 == GL_TRUE); }