218 lines
15 KiB
C++
218 lines
15 KiB
C++
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Crytek Engine Source File.
|
|
// Copyright (C), Crytek Studios, 2002.
|
|
// -------------------------------------------------------------------------
|
|
// File name: cvars.cpp
|
|
// Version: v1.00
|
|
// Created: 28/5/2001 by Vladimir Kajalin
|
|
// Compilers: Visual Studio.NET
|
|
// Description: console variables used in 3dengine
|
|
// -------------------------------------------------------------------------
|
|
// History:
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "3dEngine.h"
|
|
#include "irenderer.h"
|
|
|
|
// can not be changed by user
|
|
#define INIT_CVAR_CHEAT(_var,_def_val,_comment)\
|
|
(_var) = GetConsole()->Register((#_var), &(_var), (_def_val), VF_CHEAT, _comment);
|
|
|
|
// can be changed in options menu, will be saved into ini file
|
|
#define INIT_CVAR_SER__( _var, _def_val,_comment )\
|
|
( _var ) = GetConsole()->Register( (#_var), &(_var), (_def_val), (e_allow_cvars_serialization ? VF_DUMPTODISK : 0), _comment );
|
|
|
|
// can be changed in options menu, will be saved into ini file, require level restart
|
|
#define INIT_CVAR_SER_R( _var, _def_val,_comment )\
|
|
( _var ) = GetConsole()->Register( (#_var), &(_var), (_def_val), (e_allow_cvars_serialization ? VF_DUMPTODISK : 0)|VF_REQUIRE_LEVEL_RELOAD, _comment );
|
|
|
|
#define INIT_CVAR_SER_R_NET( _var, _def_val,_comment )\
|
|
( _var ) = GetConsole()->Register( (#_var), &(_var), (_def_val), (e_allow_cvars_serialization ? VF_DUMPTODISK : 0)|VF_REQUIRE_LEVEL_RELOAD|VF_REQUIRE_NET_SYNC, _comment );
|
|
|
|
// can be changed by game or user
|
|
#define INIT_CVAR_PUBL_(_var,_def_val,_comment)\
|
|
(_var) = GetConsole()->Register((#_var), &(_var), (_def_val), 0, _comment);
|
|
|
|
void CVars::Init()
|
|
{
|
|
// Ints
|
|
INIT_CVAR_CHEAT(e_allow_cvars_serialization, 1, "If set to zero - will not save cvars to cfg file");
|
|
INIT_CVAR_CHEAT(e_detail_objects, 1, "Activates drawing of detail objects");
|
|
INIT_CVAR_CHEAT(e_fog, 1, "Activates distance based fog");
|
|
INIT_CVAR_CHEAT(e_motion_blur, 0, "Activates motion blur, values from 1 to 7 will change blur type");
|
|
INIT_CVAR_SER_R(e_beach, 1, "Activates drawing of shore on the border of the ocean");
|
|
INIT_CVAR_CHEAT(e_detail_texture, 1, "Activates drawing of detail textures on terrain ground");
|
|
INIT_CVAR_SER_R(e_detail_texture_quality, 1, "0 - use one single texture per entire level, 1 - use multiple textures");
|
|
INIT_CVAR_CHEAT(e_particles, 1, "Activates drawing of particles");
|
|
INIT_CVAR_CHEAT(e_particles_debug, 0, "Debug");
|
|
INIT_CVAR_SER__(e_particles_max_count, 2048, "Maximum number of particles");
|
|
INIT_CVAR_SER__(e_decals, 1, "Activates drawing of decals (marks from bullets and explosions)");
|
|
INIT_CVAR_CHEAT(e_bflyes, 1, "Activates drawing of butterflies around the camera");
|
|
INIT_CVAR_CHEAT(e_vegetation_bending, 2, "Debug");
|
|
INIT_CVAR_CHEAT(e_vegetation, 1, "Activates drawing of distributed objects like trees");
|
|
INIT_CVAR_CHEAT(e_vegetation_sprites, 1, "Activates drawing of sprites instead of distributed objects at far distance");
|
|
INIT_CVAR_CHEAT(e_entities, 1, "Activates drawing of entities and brushes");
|
|
INIT_CVAR_CHEAT(e_entities_debug, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_sky_box, 1, "Activates drawing of skybox and moving cloud layers");
|
|
INIT_CVAR_CHEAT(e_terrain, 1, "Activates drawing of terain ground");
|
|
INIT_CVAR_CHEAT(e_terrain_debug, 0, "Debug");
|
|
INIT_CVAR_SER_R(e_shadow_maps, 1, "Activates drawing of shadow maps");
|
|
INIT_CVAR_SER_R(e_shadow_maps_from_static_objects,1, "Activates drawing of shadow maps from distributed objects");
|
|
INIT_CVAR_CHEAT(e_water_ocean, 1, "Activates drawing of ocean");
|
|
INIT_CVAR_CHEAT(e_vegetation_debug, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_shadow_maps_frustums, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_terrain_occlusion_culling, 1, "heightmap occlusion culling with time coherency 0=off, 1=on(distant occluders not processed),\n"
|
|
"4=on(distant occluders still processed but with less precision) ]");
|
|
INIT_CVAR_CHEAT(e_terrain_texture_bind, 1, "Debug");
|
|
INIT_CVAR_CHEAT(e_terrain_log, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_out_space, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_sun, 1, "Activates sun light source");
|
|
INIT_CVAR_CHEAT(e_terrain_merge_far_sectors, 1, "Render far heightmap sectors as one mesh");
|
|
INIT_CVAR_CHEAT(e_terrain_texture_mipmaps, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_timedemo_frames, 0, "Will quit appication in X number of frames, r_DisplayInfo must be also enabled");
|
|
INIT_CVAR_CHEAT(e_timedemo_milliseconds, 0, "Will quit appication in X number of milliseconds");
|
|
INIT_CVAR_CHEAT(e_terrain_texture_pool, 0, "Debug");
|
|
|
|
#ifdef _DEBUG
|
|
INIT_CVAR_CHEAT(e_cbuffer, 0, "Activates usage of software coverage buffer");
|
|
#else
|
|
INIT_CVAR_CHEAT(e_cbuffer, 1, "Activates usage of software coverage buffer");
|
|
#endif
|
|
|
|
INIT_CVAR_SER_R(e_stencil_shadows, 1, "Activates drawing of shadow volumes");
|
|
INIT_CVAR_CHEAT(e_shadow_maps_debug, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_dynamic_light, 1, "Activates dynamic light sources");
|
|
INIT_CVAR_CHEAT(e_dynamic_light_exact_vis_test,1, "Use more exact visibility test (based on last draw frame)");
|
|
INIT_CVAR_CHEAT(e_dynamic_light_debug, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_hw_occlusion_culling_water, 1, "Activates usage of HW occlusion test for ocean");
|
|
INIT_CVAR_CHEAT(e_hw_occlusion_culling_objects,0, "Activates usage of HW occlusion test for objects");
|
|
INIT_CVAR_PUBL_(e_hires_screenshoot, 0, "Writes screenshot to disk, X is scale of image resolution relative to current one, big values can cause crash");
|
|
INIT_CVAR_CHEAT(e_portals, 1, "Activates drawing of visareas content (indoors), values 2,3,4 used for debugging");
|
|
INIT_CVAR_SER__(e_max_entity_lights, 4, "Set maximum number of lights affecting object");
|
|
INIT_CVAR_PUBL_(e_max_shadow_map_size, 512, "Set maximum resolution of shadow map, this value is alos limited by screen resolution in OpenGL");
|
|
INIT_CVAR_CHEAT(e_water_volumes, 1, "Activates drawing of water volumes");
|
|
INIT_CVAR_CHEAT(e_bboxes, 0, "Activates drawing of bounding boxes");
|
|
INIT_CVAR_CHEAT(e_register_in_sectors, 1, "Debug, can cause crash");
|
|
INIT_CVAR_CHEAT(e_stream_cgf, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_stream_for_physics, 1, "Debug");
|
|
INIT_CVAR_CHEAT(e_stream_for_visuals, 1, "Debug");
|
|
INIT_CVAR_CHEAT(e_scissor_debug, 0, "Debug");
|
|
INIT_CVAR_CHEAT(e_projector_exact_test, 1, "Debug");
|
|
INIT_CVAR_CHEAT(e_ccgf_load, 0, "Load CCGF if found");
|
|
INIT_CVAR_CHEAT(e_ccgf_make_if_not_found, 0, "Make CCGF if not found");
|
|
INIT_CVAR_CHEAT(e_check_number_of_physicalized_polygons, 1,
|
|
"Activates check (during loading) for number of tris in the objects physics representation\n Current maximum is 100 + overall number of tris divided by 2");
|
|
INIT_CVAR_CHEAT(e_materials, 1, "Activates material support for non animated objects");
|
|
INIT_CVAR_CHEAT(e_vegetation_sprites_slow_switch, 1, "Orient 3d vegetations and sprites to much each other");
|
|
INIT_CVAR_CHEAT(e_terrain_single_pass, 1, "Draw all terrain detail layers in single pass");
|
|
INIT_CVAR_CHEAT(e_light_maps, 1, "Use lightmaps on brushes");
|
|
INIT_CVAR_CHEAT(e_stream_areas, 0, "Stream content of terrain and indoor sectors");
|
|
INIT_CVAR_CHEAT(e_stream_preload_textures, 0, "If texture streaming in renderer enabled - dynamicaly preload textures in x neibhour indoor sectors");
|
|
INIT_CVAR_CHEAT(e_area_merging_distance, 0, "Merge sectror geometry in specified range for rendering speedup");
|
|
INIT_CVAR_CHEAT(e_area_merging_draw_merged_geometry_only, 0, "Do not draw not merged objects");
|
|
INIT_CVAR_CHEAT(e_brushes, 1, "Draw brushes");
|
|
INIT_CVAR_CHEAT(e_brushes_merging_debug, 0, "Print debug info of merged brushes");
|
|
INIT_CVAR_SER_R(e_brushes_merging, 1, "Merge marked brushes during loading");
|
|
INIT_CVAR_CHEAT(e_brushes_onlymerged, 0, "Show only merged brushes");
|
|
INIT_CVAR_CHEAT(e_on_demand_physics, 0, "Turns on on-demand physicalization");
|
|
INIT_CVAR_SER_R(e_light_maps_quality, 1, "define quality for lightmaps (0-2)");
|
|
INIT_CVAR_CHEAT(e_sleep, 0, "Sleep X in C3DEngine::Draw");
|
|
INIT_CVAR_CHEAT(e_objects, 1, "Render or not all objects on terrain");
|
|
INIT_CVAR_CHEAT(e_terrain_draw_this_sector_only, 0, "1 - render only sector where camera is and objects registered in sector 00, 2 - render only sector where camera is");
|
|
INIT_CVAR_CHEAT(e_sun_stencil, 0, "Enable stencil shadows from sun light");
|
|
INIT_CVAR_CHEAT(e_terrain_single_pass_vol_fog,0, "Use single pass volumetric fog on terrain where possible");
|
|
INIT_CVAR_CHEAT(e_occlusion_volumes, 1, "Enable occlusion volumes(antiportals)");
|
|
INIT_CVAR_CHEAT(e_terrain_texture_mip_offset, 0, "Allows to reduce terrain texture resolution by selecting more low mips from texture file");
|
|
INIT_CVAR_SER__(e_overlay_geometry, 1, "Enable rendering of overlay geometry");
|
|
INIT_CVAR_CHEAT(e_player, 1, "Draw main player");
|
|
INIT_CVAR_CHEAT(e_vegetation_sprites_texres, 0, "Sprite texture size modifier. 0 - no scale, 1 - scale 2 times down and so on");
|
|
INIT_CVAR_SER__(e_active_shadow_maps_receving,0, "Allow shadow map receiving from all objects");
|
|
INIT_CVAR_PUBL_(e_shadow_maps_fade_from_light_bit, 1, "Fade shadow maps on terrain if caster is in dark area");
|
|
INIT_CVAR_PUBL_(e_capture_frames, 0, "If set to 1 - will save every frame to tga file");
|
|
INIT_CVAR_PUBL_(e_water_ocean_tesselation, -1, "0 - default tesselation, 2 - high tesselation, -1 - select automatically depends on per pixel projection support");
|
|
INIT_CVAR_PUBL_(e_shadow_maps_size_ratio, 500,"Controls how shadow map resolution depends from distance to object from camera");
|
|
INIT_CVAR_SER__(e_shadow_spots, 0, "Draw shadow spot under entities");
|
|
INIT_CVAR_SER_R(e_use_global_fog_in_fog_volumes,0, "simulate ocean volume fog using global fog");
|
|
INIT_CVAR_CHEAT(e_precache_level, 1, "Pre-render objects right after level loading");
|
|
INIT_CVAR_PUBL_(e_shadow_maps_max_casters_per_object, 8, "Maximum number of active shadow casters per object");
|
|
INIT_CVAR_PUBL_(e_water_ocean_sun_reflection, 0, "Draw sun reflection in the ocean");
|
|
INIT_CVAR_CHEAT(e_objects_fade_on_distance, 1, "Objects fading out on distance");
|
|
INIT_CVAR_PUBL_(e_area_merging_max_tris_in_input_brush, 512, "Merge only objects containing no more than x triangles");
|
|
INIT_CVAR_SER__(e_stencil_shadows_only_from_strongest_light, 0, "Cast no more than one stencil shadow from object");
|
|
INIT_CVAR_SER_R(e_cgf_load_lods, 1, "Load LOD models for CGFs if found");
|
|
INIT_CVAR_CHEAT(e_optimized_render_object, 1, "test");
|
|
INIT_CVAR_CHEAT(e_stencil_shadows_build_on_load, 1, "Build connectivity during level loading");
|
|
INIT_CVAR_PUBL_(e_vegetation_update_shadow_every_frame, 1, "Allow updating vegetations shadow maps every frame");
|
|
INIT_CVAR_CHEAT(e_particles_receive_shadows, 0, "Enable shadow maps receiving for particles");
|
|
INIT_CVAR_CHEAT(e_light_maps_occlusion, 0, "Enable usage of occlusion maps");
|
|
INIT_CVAR_CHEAT(e_shadow_maps_self_shadowing, 0, "Allow self-shadowing with shadow maps");
|
|
INIT_CVAR_CHEAT(e_voxel_build, 0, "Regenerate voxel world");
|
|
INIT_CVAR_CHEAT(e_voxel_debug, 0, "Draw voxel debug info");
|
|
INIT_CVAR_CHEAT(e_voxel_realtime_light_update,0, "Recalculate voxel terrain vertex colors every frame");
|
|
INIT_CVAR_CHEAT(e_widescreen, 0, "Activate wide screen mode");
|
|
INIT_CVAR_PUBL_(e_shadow_maps_receiving, 1, "Allow shadow maps receiving by brushes, vegetation and entities");
|
|
|
|
// Floats
|
|
INIT_CVAR_PUBL_(e_vegetation_sprites_min_distance, 8.0f, "Sets minimal distance when distributed object can be replaced with sprite");
|
|
INIT_CVAR_PUBL_(e_rain_amount, 0.0f, "Values between 0 and 1 controls density of the rain");
|
|
INIT_CVAR_SER__(e_vegetation_sprites_distance_ratio, 1.0f, "Allows changing distance on what vegetation switch into sprite");
|
|
INIT_CVAR_SER__(e_obj_lod_ratio, 10.0f, "LOD for vegetation, brushes and entities");
|
|
INIT_CVAR_CHEAT(e_obj_view_dist_ratio, 55.0f, "View distance for vegetation, brushes and entities");
|
|
INIT_CVAR_CHEAT(e_dynamic_ambient_ratio, 1.0f, "Controls how object ambient level dependinds from surrounding lights");
|
|
INIT_CVAR_PUBL_(e_detail_texture_min_fov,0.55f,"If FOV is less - alternative version of terrain detail texturing will be used");
|
|
INIT_CVAR_SER_R_NET(e_vegetation_min_size, 0.0f, "Minimal size of static object, smaller objects will be not rendered");
|
|
INIT_CVAR_CHEAT(e_terrain_occlusion_culling_precision, 0.15f, "Density of rays");
|
|
INIT_CVAR_PUBL_(e_terrain_lod_ratio, 1.f, "Set heightmap LOD");
|
|
INIT_CVAR_SER__(e_particles_lod, 1.f, "1 - full LOD, 0.5 - scale frequency and count down twice");
|
|
INIT_CVAR_CHEAT(e_debug_lights, 0, "Use different colors for objects affected by different number of lights\n 0 - back, 1 - blue, 2 - green, 3 or more - red");
|
|
INIT_CVAR_SER__(e_shadow_maps_view_dist_ratio, 10, "View dist ratio for shadow maps");
|
|
INIT_CVAR_SER__(e_decals_life_time_scale, 1.f, "Allows to increase or reduce decals life time for different specs");
|
|
INIT_CVAR_CHEAT(e_obj_min_view_dist, 0.f, "Min distance on what far objects will be culled out");
|
|
INIT_CVAR_CHEAT(e_decals_neighbor_max_life_time, 4.f, "If not zero - new decals will force old decals to fade in X seconds");
|
|
INIT_CVAR_CHEAT(e_explosion_scale, 0.6666f, "Scale size of terrain deformations and explosion decals");
|
|
|
|
e_capture_folder = GetConsole()->CreateVariable("e_capture_folder", "CaptureOutput", 0, "Set output folder for video capturing");
|
|
e_capture_file_format = GetConsole()->CreateVariable("e_capture_file_format", "JPG", 0, "Set output image file format for video capturing. Can be JPG or TGA");
|
|
|
|
e_deformable_terrain = GetConsole()->CreateVariable("e_deformable_terrain","1",VF_REQUIRE_NET_SYNC,
|
|
"Toggles terrain deforming.\n"
|
|
"Usage: e_deformable_terrain [0/1]\n"
|
|
"Default is 1 (on). Terrain is deformed by explosions. Set\n"
|
|
"to 0 to disable terrain deforming.");
|
|
|
|
if(e_water_ocean_tesselation<0)
|
|
{
|
|
ICVar * pVar = GetConsole()->GetCVar("e_water_ocean_tesselation");
|
|
if(GetRenderer()->GetFeatures()&RFT_HW_ENVBUMPPROJECTED)
|
|
pVar->Set(0);
|
|
else
|
|
pVar->Set(1);
|
|
}
|
|
|
|
// vars validation
|
|
if(ICVar * pVar0 = GetConsole()->GetCVar("r_Quality_BumpMapping"))
|
|
if(pVar0->GetIVal()==0)
|
|
{
|
|
if(ICVar * pVar1 = GetConsole()->GetCVar("e_shadow_maps"))
|
|
pVar1->Set(0);
|
|
if(ICVar * pVar1 = GetConsole()->GetCVar("e_stencil_shadows"))
|
|
pVar1->Set(0);
|
|
}
|
|
|
|
int nGPU = GetRenderer()->GetFeatures() & RFT_HW_MASK;
|
|
if(nGPU == RFT_HW_GF2)
|
|
{
|
|
if(ICVar * pVar1 = GetConsole()->GetCVar("e_detail_texture_quality"))
|
|
pVar1->Set(0);
|
|
}
|
|
|
|
if(!(GetRenderer()->GetFeatures() & (RFT_DEPTHMAPS|RFT_SHADOWMAP_SELFSHADOW)))
|
|
{
|
|
if(ICVar * pVar1 = GetConsole()->GetCVar("e_shadow_maps_receiving"))
|
|
pVar1->Set(0);
|
|
}
|
|
} |