@@ -481,6 +481,13 @@ void GL_UpdateSwapInterval( void )
481
481
}
482
482
}
483
483
484
+ #define SAFE_NO 0
485
+ #define SAFE_NOACC 1
486
+ #define SAFE_NODEPTH 2
487
+ #define SAFE_NOATTRIB 3
488
+ #define SAFE_DONTCARE 4
489
+
490
+
484
491
/*
485
492
==================
486
493
GL_SetupAttributes
@@ -495,15 +502,8 @@ void GL_SetupAttributes()
495
502
SDL_SetHint ( "SDL_VIDEO_X11_XVIDMODE" , "1" );
496
503
#endif
497
504
498
- SDL_GL_SetAttribute ( SDL_GL_DOUBLEBUFFER , 1 );
499
- SDL_GL_SetAttribute ( SDL_GL_ACCELERATED_VISUAL , 1 );
505
+ SDL_GL_ResetAttributes ();
500
506
501
- SDL_GL_SetAttribute ( SDL_GL_DEPTH_SIZE , 24 );
502
- SDL_GL_SetAttribute ( SDL_GL_RED_SIZE , 8 );
503
- SDL_GL_SetAttribute ( SDL_GL_GREEN_SIZE , 8 );
504
- SDL_GL_SetAttribute ( SDL_GL_BLUE_SIZE , 8 );
505
- SDL_GL_SetAttribute ( SDL_GL_ALPHA_SIZE , 8 );
506
- SDL_GL_SetAttribute ( SDL_GL_STENCIL_SIZE , gl_stencilbits -> integer );
507
507
508
508
#ifdef XASH_GLES
509
509
SDL_GL_SetAttribute ( SDL_GL_CONTEXT_PROFILE_MASK , SDL_GL_CONTEXT_PROFILE_ES );
@@ -527,6 +527,52 @@ void GL_SetupAttributes()
527
527
528
528
#endif // XASH_GLES
529
529
530
+ SDL_GL_SetAttribute ( SDL_GL_DOUBLEBUFFER , 1 );
531
+
532
+ if ( glw_state .safe > SAFE_DONTCARE )
533
+ {
534
+ glw_state .safe = -1 ;
535
+ return ;
536
+ }
537
+
538
+ if ( glw_state .safe > SAFE_NO )
539
+ Msg ("Trying safe opengl mode %d\n" , glw_state .safe );
540
+
541
+ if ( glw_state .safe >= SAFE_NOACC )
542
+ SDL_GL_SetAttribute ( SDL_GL_ACCELERATED_VISUAL , 1 );
543
+
544
+ Msg ("bpp %d\n" , glw_state .desktopBitsPixel );
545
+
546
+ if ( glw_state .safe < SAFE_NODEPTH )
547
+ SDL_GL_SetAttribute ( SDL_GL_DEPTH_SIZE , 24 );
548
+ else if ( glw_state .safe < 5 )
549
+ SDL_GL_SetAttribute ( SDL_GL_DEPTH_SIZE , 8 );
550
+
551
+
552
+ if ( glw_state .safe < SAFE_NOATTRIB )
553
+ {
554
+ if ( glw_state .desktopBitsPixel >= 24 )
555
+ {
556
+ if ( glw_state .desktopBitsPixel == 32 )
557
+ SDL_GL_SetAttribute ( SDL_GL_ALPHA_SIZE , 8 );
558
+
559
+ SDL_GL_SetAttribute ( SDL_GL_RED_SIZE , 8 );
560
+ SDL_GL_SetAttribute ( SDL_GL_GREEN_SIZE , 8 );
561
+ SDL_GL_SetAttribute ( SDL_GL_BLUE_SIZE , 8 );
562
+ }
563
+ else
564
+ {
565
+ SDL_GL_SetAttribute ( SDL_GL_RED_SIZE , 5 );
566
+ SDL_GL_SetAttribute ( SDL_GL_GREEN_SIZE , 6 );
567
+ SDL_GL_SetAttribute ( SDL_GL_BLUE_SIZE , 5 );
568
+ }
569
+ }
570
+
571
+ if ( glw_state .safe >= SAFE_DONTCARE )
572
+ return ;
573
+
574
+ SDL_GL_SetAttribute ( SDL_GL_STENCIL_SIZE , gl_stencilbits -> integer );
575
+
530
576
switch ( gl_msaa -> integer )
531
577
{
532
578
case 2 :
@@ -904,6 +950,24 @@ R_Init_OpenGL
904
950
*/
905
951
qboolean R_Init_OpenGL ( void )
906
952
{
953
+ SDL_DisplayMode displayMode ;
954
+ string safe ;
955
+
956
+ SDL_GetCurrentDisplayMode (0 , & displayMode );
957
+ glw_state .desktopBitsPixel = SDL_BITSPERPIXEL (displayMode .format );
958
+ glw_state .desktopWidth = displayMode .w ;
959
+ glw_state .desktopHeight = displayMode .h ;
960
+
961
+ if ( !glw_state .safe && Sys_GetParmFromCmdLine ( "-safegl" , safe ) )
962
+ {
963
+ glw_state .safe = Q_atoi ( safe );
964
+ if ( glw_state .safe < SAFE_NOACC || glw_state .safe > SAFE_DONTCARE )
965
+ glw_state .safe = SAFE_DONTCARE ;
966
+ }
967
+
968
+ if ( glw_state .safe < SAFE_NO || glw_state .safe > SAFE_DONTCARE )
969
+ return false;
970
+
907
971
GL_SetupAttributes ();
908
972
909
973
if ( SDL_GL_LoadLibrary ( EGL_LIB ) )
0 commit comments