123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703 |
- #include "../client/client.h"
- #include "../client/ui_local.h"
- extern void UI_ForceMenuOff( void );
- static const char *s_driver_names[] =
- {
- "[default OpenGL]",
- "[Voodoo OpenGL]",
- "[Custom ]",
- 0
- };
- static const char *s_drivers[] =
- {
- OPENGL_DRIVER_NAME,
- _3DFX_DRIVER_NAME,
- "",
- 0
- };
- /*
- ====================================================================
- MENU INTERACTION
- ====================================================================
- */
- static menuframework_s s_menu;
- static menulist_s s_graphics_options_list;
- static menulist_s s_mode_list;
- static menulist_s s_driver_list;
- static menuslider_s s_tq_slider;
- static menulist_s s_fs_box;
- static menulist_s s_lighting_box;
- static menulist_s s_allow_extensions_box;
- static menulist_s s_texturebits_box;
- static menulist_s s_colordepth_list;
- static menulist_s s_geometry_box;
- static menulist_s s_filter_box;
- static menuaction_s s_driverinfo_action;
- static menuaction_s s_apply_action;
- static menuaction_s s_defaults_action;
- typedef struct
- {
- int mode;
- qboolean fullscreen;
- int tq;
- int lighting;
- int colordepth;
- int texturebits;
- int geometry;
- int filter;
- int driver;
- qboolean extensions;
- } InitialVideoOptions_s;
- static InitialVideoOptions_s s_ivo;
- static InitialVideoOptions_s s_ivo_templates[] =
- {
- {
- 4, qtrue, 2, 0, 2, 2, 1, 1, 0, qtrue // JDC: this was tq 3
- },
- {
- 3, qtrue, 2, 0, 0, 0, 1, 0, 0, qtrue
- },
- {
- 2, qtrue, 1, 0, 1, 0, 0, 0, 0, qtrue
- },
- {
- 1, qtrue, 1, 1, 1, 0, 0, 0, 0, qtrue
- },
- {
- 3, qtrue, 1, 0, 0, 0, 1, 0, 0, qtrue
- }
- };
- #define NUM_IVO_TEMPLATES ( sizeof( s_ivo_templates ) / sizeof( s_ivo_templates[0] ) )
- static void DrvInfo_MenuDraw( void );
- static const char * DrvInfo_MenuKey( int key );
- static void GetInitialVideoVars( void )
- {
- s_ivo.colordepth = s_colordepth_list.curvalue;
- s_ivo.driver = s_driver_list.curvalue;
- s_ivo.mode = s_mode_list.curvalue;
- s_ivo.fullscreen = s_fs_box.curvalue;
- s_ivo.extensions = s_allow_extensions_box.curvalue;
- s_ivo.tq = s_tq_slider.curvalue;
- s_ivo.lighting = s_lighting_box.curvalue;
- s_ivo.geometry = s_geometry_box.curvalue;
- s_ivo.filter = s_filter_box.curvalue;
- s_ivo.texturebits = s_texturebits_box.curvalue;
- }
- static void CheckConfigVsTemplates( void )
- {
- int i;
- for ( i = 0; i < NUM_IVO_TEMPLATES; i++ )
- {
- if ( s_driver_list.curvalue != 1 )
- if ( s_ivo_templates[i].colordepth != s_colordepth_list.curvalue )
- continue;
- #if 0
- if ( s_ivo_templates[i].driver != s_driver_list.curvalue )
- continue;
- #endif
- if ( s_ivo_templates[i].mode != s_mode_list.curvalue )
- continue;
- if ( s_driver_list.curvalue != 1 )
- if ( s_ivo_templates[i].fullscreen != s_fs_box.curvalue )
- continue;
- if ( s_ivo_templates[i].tq != s_tq_slider.curvalue )
- continue;
- if ( s_ivo_templates[i].lighting != s_lighting_box.curvalue )
- continue;
- if ( s_ivo_templates[i].geometry != s_geometry_box.curvalue )
- continue;
- if ( s_ivo_templates[i].filter != s_filter_box.curvalue )
- continue;
- // if ( s_ivo_templates[i].texturebits != s_texturebits_box.curvalue )
- // continue;
- s_graphics_options_list.curvalue = i;
- return;
- }
- s_graphics_options_list.curvalue = 4;
- }
- static void UpdateMenuItemValues( void )
- {
- if ( s_driver_list.curvalue == 1 )
- {
- s_fs_box.curvalue = 1;
- s_fs_box.generic.flags = QMF_GRAYED;
- s_colordepth_list.curvalue = 1;
- }
- else
- {
- s_fs_box.generic.flags = 0;
- }
- if ( s_fs_box.curvalue == 0 || s_driver_list.curvalue == 1 )
- {
- s_colordepth_list.curvalue = 0;
- s_colordepth_list.generic.flags = QMF_GRAYED;
- }
- else
- {
- s_colordepth_list.generic.flags = 0;
- }
- if ( s_allow_extensions_box.curvalue == 0 )
- {
- if ( s_texturebits_box.curvalue == 0 )
- {
- s_texturebits_box.curvalue = 1;
- }
- }
- s_apply_action.generic.flags = QMF_GRAYED;
- if ( s_ivo.mode != s_mode_list.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.fullscreen != s_fs_box.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.extensions != s_allow_extensions_box.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.tq != s_tq_slider.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.lighting != s_lighting_box.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.colordepth != s_colordepth_list.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.driver != s_driver_list.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.texturebits != s_texturebits_box.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.geometry != s_geometry_box.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- if ( s_ivo.filter != s_filter_box.curvalue )
- {
- s_apply_action.generic.flags = QMF_BLINK;
- }
- CheckConfigVsTemplates();
- }
- static void SetMenuItemValues( void )
- {
- s_mode_list.curvalue = Cvar_VariableValue( "r_mode" );
- s_fs_box.curvalue = Cvar_VariableValue("r_fullscreen");
- s_allow_extensions_box.curvalue = Cvar_VariableValue("r_allowExtensions");
- s_tq_slider.curvalue = 3-Cvar_VariableValue( "r_picmip");
- if ( s_tq_slider.curvalue < 0 )
- {
- s_tq_slider.curvalue = 0;
- }
- else if ( s_tq_slider.curvalue > 3 )
- {
- s_tq_slider.curvalue = 3;
- }
- s_lighting_box.curvalue = Cvar_VariableValue( "r_vertexLight" ) != 0;
- switch ( ( int ) Cvar_VariableValue( "r_texturebits" ) )
- {
- case 0:
- default:
- s_texturebits_box.curvalue = 0;
- break;
- case 16:
- s_texturebits_box.curvalue = 1;
- break;
- case 32:
- s_texturebits_box.curvalue = 2;
- break;
- }
- if ( !Q_stricmp( Cvar_VariableString( "r_textureMode" ), "GL_LINEAR_MIPMAP_NEAREST" ) )
- {
- s_filter_box.curvalue = 0;
- }
- else
- {
- s_filter_box.curvalue = 1;
- }
- if ( Cvar_VariableValue( "r_subdivisions" ) == 999 ||
- Cvar_VariableValue( "r_lodBias" ) > 0 )
- {
- s_geometry_box.curvalue = 0;
- }
- else
- {
- s_geometry_box.curvalue = 1;
- }
- switch ( ( int ) Cvar_VariableValue( "r_colorbits" ) )
- {
- default:
- case 0:
- s_colordepth_list.curvalue = 0;
- break;
- case 16:
- s_colordepth_list.curvalue = 1;
- break;
- case 32:
- s_colordepth_list.curvalue = 2;
- break;
- }
- if ( s_fs_box.curvalue == 0 )
- {
- s_colordepth_list.curvalue = 0;
- }
- if ( s_driver_list.curvalue == 1 )
- {
- s_colordepth_list.curvalue = 1;
- }
- }
- static void FullscreenCallback( void *s )
- {
- }
- static void ModeCallback( void *s )
- {
- // clamp 3dfx video modes
- if ( s_driver_list.curvalue == 1 )
- {
- if ( s_mode_list.curvalue < 2 )
- {
- s_mode_list.curvalue = 2;
- }
- else if ( s_mode_list.curvalue > 6 )
- {
- s_mode_list.curvalue = 6;
- }
- }
- }
- static void GraphicsOptionsCallback( void *s )
- {
- InitialVideoOptions_s *ivo = &s_ivo_templates[s_graphics_options_list.curvalue];
- s_mode_list.curvalue = ivo->mode;
- s_tq_slider.curvalue = ivo->tq;
- s_lighting_box.curvalue = ivo->lighting;
- s_colordepth_list.curvalue = ivo->colordepth;
- s_texturebits_box.curvalue = ivo->texturebits;
- s_geometry_box.curvalue = ivo->geometry;
- s_filter_box.curvalue = ivo->filter;
- s_fs_box.curvalue = ivo->fullscreen;
- }
- static void TextureDetailCallback( void *s )
- {
- }
- static void TextureQualityCallback( void *s )
- {
- }
- static void ExtensionsCallback( void *s )
- {
- }
- static void ColorDepthCallback( void *s )
- {
- }
- static void DriverInfoCallback( void *s )
- {
- UI_PushMenu( DrvInfo_MenuDraw, DrvInfo_MenuKey );
- }
- static void LightingCallback( void * s )
- {
- }
- static void ApplyChanges( void *unused )
- {
- switch ( s_texturebits_box.curvalue )
- {
- case 0:
- Cvar_SetValue( "r_texturebits", 0 );
- Cvar_SetValue( "r_ext_compress_textures", 1 );
- break;
- case 1:
- Cvar_SetValue( "r_texturebits", 16 );
- Cvar_SetValue( "r_ext_compress_textures", 0 );
- break;
- case 2:
- Cvar_SetValue( "r_texturebits", 32 );
- Cvar_SetValue( "r_ext_compress_textures", 0 );
- break;
- }
- Cvar_SetValue( "r_picmip", 3 - s_tq_slider.curvalue );
- Cvar_SetValue( "r_allowExtensions", s_allow_extensions_box.curvalue );
- Cvar_SetValue( "r_mode", s_mode_list.curvalue );
- Cvar_SetValue( "r_fullscreen", s_fs_box.curvalue );
- if (*s_drivers[s_driver_list.curvalue] )
- Cvar_Set( "r_glDriver", ( char * ) s_drivers[s_driver_list.curvalue] );
- switch ( s_colordepth_list.curvalue )
- {
- case 0:
- Cvar_SetValue( "r_colorbits", 0 );
- Cvar_SetValue( "r_depthbits", 0 );
- Cvar_SetValue( "r_stencilbits", 0 );
- break;
- case 1:
- Cvar_SetValue( "r_colorbits", 16 );
- Cvar_SetValue( "r_depthbits", 16 );
- Cvar_SetValue( "r_stencilbits", 0 );
- break;
- case 2:
- Cvar_SetValue( "r_colorbits", 32 );
- Cvar_SetValue( "r_depthbits", 24 );
- break;
- }
- Cvar_SetValue( "r_vertexLight", s_lighting_box.curvalue );
- if ( s_geometry_box.curvalue )
- {
- Cvar_SetValue( "r_lodBias", 0 );
- Cvar_SetValue( "r_subdivisions", 4 );
- }
- else
- {
- Cvar_SetValue( "r_lodBias", 1 );
- Cvar_SetValue( "r_subdivisions", 999 );
- }
- if ( s_filter_box.curvalue )
- {
- Cvar_Set( "r_textureMode", "GL_LINEAR_MIPMAP_LINEAR" );
- }
- else
- {
- Cvar_Set( "r_textureMode", "GL_LINEAR_MIPMAP_NEAREST" );
- }
- UI_ForceMenuOff();
- CL_Vid_Restart_f();
- VID_MenuInit();
- // s_fs_box.curvalue = Cvar_VariableValue( "r_fullscreen" );
- }
- /*
- ** VID_MenuInit
- */
- void VID_MenuInit( void )
- {
- static const char *tq_names[] =
- {
- "compressed",
- "16-bit",
- "32-bit",
- 0
- };
- static const char *s_graphics_options_names[] =
- {
- "high quality",
- "normal",
- "fast",
- "fastest",
- "custom",
- 0
- };
- static const char *lighting_names[] =
- {
- "lightmap",
- "vertex",
- 0
- };
- static const char *colordepth_names[] =
- {
- "default",
- "16-bit",
- "32-bit",
- 0
- };
- static const char *resolutions[] =
- {
- "[320 240 ]",
- "[400 300 ]",
- "[512 384 ]",
- "[640 480 ]",
- "[800 600 ]",
- "[960 720 ]",
- "[1024 768 ]",
- "[1152 864 ]",
- "[1280 960 ]",
- "[1600 1200]",
- "[2048 1536]",
- "[856 480 W]",
- 0
- };
- static const char *filter_names[] =
- {
- "bilinear",
- "trilinear",
- 0
- };
- static const char *quality_names[] =
- {
- "low",
- "high",
- 0
- };
- static const char *enabled_names[] =
- {
- "disabled",
- "enabled",
- 0
- };
- int y = 0;
- int i;
- char *p;
- s_menu.x = SCREEN_WIDTH * 0.50;
- s_menu.nitems = 0;
- s_menu.wrapAround = qtrue;
- s_graphics_options_list.generic.type = MTYPE_SPINCONTROL;
- s_graphics_options_list.generic.name = "graphics mode";
- s_graphics_options_list.generic.x = 0;
- s_graphics_options_list.generic.y = y;
- s_graphics_options_list.generic.callback = GraphicsOptionsCallback;
- s_graphics_options_list.itemnames = s_graphics_options_names;
- s_driver_list.generic.type = MTYPE_SPINCONTROL;
- s_driver_list.generic.name = "driver";
- s_driver_list.generic.x = 0;
- s_driver_list.generic.y = y += 18;
- p = Cvar_VariableString( "r_glDriver" );
- for (i = 0; s_drivers[i]; i++) {
- if (strcmp(s_drivers[i], p) == 0)
- break;
- }
- if (!s_drivers[i])
- i--; // go back one, to default 'custom'
- s_driver_list.curvalue = i;
- s_driver_list.itemnames = s_driver_names;
- // references/modifies "r_allowExtensions"
- s_allow_extensions_box.generic.type = MTYPE_SPINCONTROL;
- s_allow_extensions_box.generic.x = 0;
- s_allow_extensions_box.generic.y = y += 18;
- s_allow_extensions_box.generic.name = "OpenGL extensions";
- s_allow_extensions_box.generic.callback = ExtensionsCallback;
- s_allow_extensions_box.itemnames = enabled_names;
- // references/modifies "r_mode"
- s_mode_list.generic.type = MTYPE_SPINCONTROL;
- s_mode_list.generic.name = "video mode";
- s_mode_list.generic.x = 0;
- s_mode_list.generic.y = y += 36;
- s_mode_list.itemnames = resolutions;
- s_mode_list.generic.callback = ModeCallback;
- // references "r_colorbits"
- s_colordepth_list.generic.type = MTYPE_SPINCONTROL;
- s_colordepth_list.generic.name = "color depth";
- s_colordepth_list.generic.x = 0;
- s_colordepth_list.generic.y = y += 18;
- s_colordepth_list.itemnames = colordepth_names;
- s_colordepth_list.generic.callback = ColorDepthCallback;
- // references/modifies "r_fullscreen"
- s_fs_box.generic.type = MTYPE_RADIOBUTTON;
- s_fs_box.generic.x = 0;
- s_fs_box.generic.y = y += 18;
- s_fs_box.generic.name = "fullscreen";
- s_fs_box.generic.callback = FullscreenCallback;
- // references/modifies "r_vertexLight"
- s_lighting_box.generic.type = MTYPE_SPINCONTROL;
- s_lighting_box.generic.x = 0;
- s_lighting_box.generic.y = y += 18;
- s_lighting_box.generic.name = "lighting";
- s_lighting_box.itemnames = lighting_names;
- s_lighting_box.generic.callback = LightingCallback;
- // references/modifies "r_lodBias" & "subdivisions"
- s_geometry_box.generic.type = MTYPE_SPINCONTROL;
- s_geometry_box.generic.x = 0;
- s_geometry_box.generic.y = y += 18;
- s_geometry_box.generic.name = "geometric detail";
- s_geometry_box.itemnames = quality_names;
- // references/modifies "r_picmip"
- s_tq_slider.generic.type = MTYPE_SLIDER;
- s_tq_slider.generic.x = 0;
- s_tq_slider.generic.y = y += 18;
- s_tq_slider.generic.name = "texture detail";
- s_tq_slider.generic.callback = TextureDetailCallback;
- s_tq_slider.minvalue = 0;
- s_tq_slider.maxvalue = 3;
- // references/modifies "r_textureBits"
- s_texturebits_box.generic.type = MTYPE_SPINCONTROL;
- s_texturebits_box.generic.x = 0;
- s_texturebits_box.generic.y = y += 18;
- s_texturebits_box.generic.name = "texture quality";
- s_texturebits_box.generic.callback = TextureQualityCallback;
- s_texturebits_box.itemnames = tq_names;
- // references/modifies "r_textureMode"
- s_filter_box.generic.type = MTYPE_SPINCONTROL;
- s_filter_box.generic.x = 0;
- s_filter_box.generic.y = y += 18;
- s_filter_box.generic.name = "texture filter";
- s_filter_box.itemnames = filter_names;
- s_driverinfo_action.generic.type = MTYPE_ACTION;
- s_driverinfo_action.generic.name = "driver information";
- s_driverinfo_action.generic.x = 0;
- s_driverinfo_action.generic.y = y += 36;
- s_driverinfo_action.generic.callback = DriverInfoCallback;
- s_apply_action.generic.type = MTYPE_ACTION;
- s_apply_action.generic.name = "apply";
- s_apply_action.generic.x = 0;
- s_apply_action.generic.y = y += 36;
- s_apply_action.generic.callback = ApplyChanges;
- s_apply_action.generic.flags = QMF_GRAYED;
- SetMenuItemValues();
- GetInitialVideoVars();
- Menu_AddItem( &s_menu, ( void * ) &s_graphics_options_list );
- Menu_AddItem( &s_menu, ( void * ) &s_driver_list );
- Menu_AddItem( &s_menu, ( void * ) &s_allow_extensions_box );
- Menu_AddItem( &s_menu, ( void * ) &s_mode_list );
- Menu_AddItem( &s_menu, ( void * ) &s_colordepth_list );
- Menu_AddItem( &s_menu, ( void * ) &s_fs_box );
- Menu_AddItem( &s_menu, ( void * ) &s_lighting_box );
- Menu_AddItem( &s_menu, ( void * ) &s_geometry_box );
- Menu_AddItem( &s_menu, ( void * ) &s_tq_slider );
- Menu_AddItem( &s_menu, ( void * ) &s_texturebits_box );
- Menu_AddItem( &s_menu, ( void * ) &s_filter_box );
- Menu_AddItem( &s_menu, ( void * ) &s_driverinfo_action );
- Menu_AddItem( &s_menu, ( void * ) &s_apply_action );
- Menu_Center( &s_menu );
- s_menu.y -= 6;
- }
- /*
- ================
- VID_MenuDraw
- ================
- */
- void VID_MenuDraw (void)
- {
- UpdateMenuItemValues();
- Menu_AdjustCursor( &s_menu, 1 );
- Menu_Draw( &s_menu );
- }
- /*
- ================
- VID_MenuKey
- ================
- */
- const char *VID_MenuKey( int key )
- {
- menuframework_s *m = &s_menu;
- static const char *sound = "sound/misc/menu1.wav";
- if ( key == K_ENTER )
- {
- if ( !Menu_SelectItem( m ) )
- ApplyChanges( NULL );
- return NULL;
- }
- return Default_MenuKey( m, key );
- }
- static void DrvInfo_MenuDraw( void )
- {
- float labelColor[] = { 0, 1.0, 0, 1.0 };
- float textColor[] = { 1, 1, 1, 1 };
- int i = 14;
- char extensionsString[1024], *eptr = extensionsString;
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 3, "VENDOR:", labelColor );
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 4, Cvar_VariableString( "gl_vendor" ), textColor );
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 5.5, "VERSION:", labelColor );
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 6.5, Cvar_VariableString( "gl_version" ), textColor );
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 8, "RENDERER:", labelColor );
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 9, Cvar_VariableString( "gl_renderer" ), textColor );
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 10.5, "PIXELFORMAT:", labelColor );
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 11.5, Cvar_VariableString( "gl_pixelformat" ), textColor );
- SCR_DrawBigStringColor( BIGCHAR_WIDTH * 4, BIGCHAR_HEIGHT * 13, "EXTENSIONS:", labelColor );
- strcpy( extensionsString, Cvar_VariableString( "gl_extensions" ) );
- while ( i < 25 && *eptr )
- {
- while ( *eptr )
- {
- char buf[2] = " ";
- int j = BIGCHAR_WIDTH * 6;
- while ( *eptr && *eptr != ' ' )
- {
- buf[0] = *eptr;
- SCR_DrawBigStringColor( j, i * BIGCHAR_HEIGHT, buf, textColor );
- j += BIGCHAR_WIDTH;
- eptr++;
- }
- i++;
- while ( *eptr && *eptr == ' ' )
- eptr++;
- }
- }
- }
- static const char * DrvInfo_MenuKey( int key )
- {
- if ( key == K_ESCAPE )
- UI_PopMenu();
- return NULL;
- }
|