void RE_InitOpenGl(void) { //Clear the screen with a black color thanks Glimp_ClearScreen(); glConfig.driverType = GLDRV_ICD; glConfig.hardwareType = GLHW_GENERIC; // Get extension strings #ifndef FEATURE_RENDERER2 Q_strncpyz(glConfig.extensions_string, ( char * ) glGetString(GL_EXTENSIONS), sizeof(glConfig.extensions_string)); #else { int i = 0, exts = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &exts); glConfig.extensions_string[0] = 0; for (i = 0; i < exts; i++) { if (strlen(glConfig.extensions_string) + 100 >= sizeof(glConfig.extensions_string)) { //Just so we wont error out when there are really a lot of extensions break; } Q_strcat(glConfig.extensions_string, sizeof(glConfig.extensions_string), va("%s ", glGetStringi(GL_EXTENSIONS, i))); } } #endif // initialize extensions #ifdef FEATURE_RENDERER2 GLimp_InitExtensionsR2(); // renderer2 #else GLimp_InitExtensions(); // vanilla renderer #endif }
/** * @brief This routine is responsible for initializing the OS specific portions of OpenGL */ void GLimp_Init(void) { r_allowSoftwareGL = ri.Cvar_Get("r_allowSoftwareGL", "0", CVAR_LATCH); r_allowResize = ri.Cvar_Get("r_allowResize", "0", CVAR_ARCHIVE); r_centerWindow = ri.Cvar_Get("r_centerWindow", "0", CVAR_ARCHIVE); if (ri.Cvar_VariableIntegerValue("com_abnormalExit")) { ri.Cvar_Set("r_mode", va("%d", R_MODE_FALLBACK)); ri.Cvar_Set("r_fullscreen", "0"); ri.Cvar_Set("r_centerWindow", "0"); ri.Cvar_Set("com_abnormalExit", "0"); } ri.Sys_GLimpInit(); // Create the window and set up the context if (GLimp_StartDriverAndSetMode(r_mode->integer, r_fullscreen->integer, r_noborder->integer)) { goto success; } // Try again, this time in a platform specific "safe mode" ri.Sys_GLimpSafeInit(); if (GLimp_StartDriverAndSetMode(r_mode->integer, r_fullscreen->integer, qfalse)) { goto success; } // Finally, try the default screen resolution if (r_mode->integer != R_MODE_FALLBACK) { Ren_Print("Setting r_mode %d failed, falling back on r_mode %d\n", r_mode->integer, R_MODE_FALLBACK); if (GLimp_StartDriverAndSetMode(R_MODE_FALLBACK, qfalse, qfalse)) { goto success; } } // Nothing worked, give up Ren_Fatal("GLimp_Init() - could not load OpenGL subsystem\n"); success: //Clear the screen with a black color thanks Glimp_ClearScreen(); #ifdef FEATURE_RENDERER2 if (glConfig.driverType != GLDRV_OPENGL3) { glConfig.driverType = GLDRV_ICD; } #else // This values force the UI to disable driver selection glConfig.driverType = GLDRV_ICD; #endif glConfig.hardwareType = GLHW_GENERIC; // Only using SDL_SetWindowBrightness to determine if hardware gamma is supported glConfig.deviceSupportsGamma = !r_ignorehwgamma->integer && SDL_SetWindowBrightness(main_window, 1.0f) >= 0; // Get extension strings if (glConfig.driverType != GLDRV_OPENGL3) { Q_strncpyz(glConfig.extensions_string, ( char * ) glGetString(GL_EXTENSIONS), sizeof(glConfig.extensions_string)); } #ifndef FEATURE_RENDERER_GLES else { int i = 0, exts = 0; glGetIntegerv(GL_NUM_EXTENSIONS, &exts); glConfig.extensions_string[0] = 0; for (i = 0; i < exts; i++) { if (strlen(glConfig.extensions_string) + 100 >= sizeof(glConfig.extensions_string)) { //Just so we wont error out when there are really a lot of extensions break; } Q_strcat(glConfig.extensions_string, sizeof(glConfig.extensions_string), va("%s ", glGetStringi(GL_EXTENSIONS, i))); } } #endif // FEATURE_RENDERER_GLES // initialize extensions GLimp_SetHardware(); #ifdef FEATURE_RENDERER2 GLimp_InitExtensionsR2(); // renderer2 #else GLimp_InitExtensions(); // vanilla renderer #endif ri.Cvar_Get("r_availableModes", "", CVAR_ROM); // This depends on SDL_INIT_VIDEO, hence having it here ri.IN_Init(); }