Merge branch 'development' into LYN-5265_state_tracker_impl

This commit is contained in:
John
2021-10-13 18:53:11 +01:00
384 changed files with 4227 additions and 5012 deletions
-13
View File
@@ -1,18 +1,5 @@
<settings>
<r_PostProcessEffects value="1"/>
<r_HDREyeAdaptationSpeed value="100000000"/>
<r_MotionBlur value="0"/>
<e_ScreenShotQuality value="0"/>
<e_ViewDistRatio value="100000000"/>
<r_DisplayInfo value="0"/>
<e_StreamCgfPoolSize value="128" />
<e_ViewDistRatioVegetation value="100"/>
<e_Lods value="0"/>
<e_Vegetation value="0"/>
<e_TerrainOcclusionCulling value="0"/>
<e_OcclusionVolumes value="0"/>
<e_shadows value="0"/>
<e_portals value="3"/>
<e_fog value="0"/>
<r_hdrdebug value="0"/>
</settings>
-2
View File
@@ -7,8 +7,6 @@
<Tool Title="| Draw Helpers" Command="p_draw_helpers" EditorCmd="" ToggleVar="1"/>
<Tool Title="| AI Debug Draw" Command="ai_DebugDraw" EditorCmd="" ToggleVar="1"/>
<Tool Title="| Toggle Music" Command="s_MusicEnable" EditorCmd="" ToggleVar="1"/>
<Tool Title="| Toggle Sound" Command="s_SoundEnable" EditorCmd="" ToggleVar="1"/>
<Tool Title="| Toggle ForcefeedBack" Command="i_forcefeedback" EditorCmd="" ToggleVar="1"/>
<Tool Title="| Freeze Camera " Command="e_CameraFreeze" EditorCmd="" ToggleVar="1"/>
<Tool Title="| Log Verbosity 0" Command="log_Verbosity 0" EditorCmd="" ToggleVar="0"/>
<Tool Title="| SaveLevelStats" Command="savelevelstats" EditorCmd="" ToggleVar="0"/>
-11
View File
@@ -1,16 +1,5 @@
ConsoleHide
g_godMode=1
sys_warnings=0
con_showonload=1
i_forcefeedback=0
g_infiniteammo=1
e_ObjectLayersActivation=0
e_ObjectLayersActivationPhysics=0
g_flashrenderingduringloading=0
sys_maxfps=0
r_vsync=0
p_max_substeps=1
demo_file=autotest
demo_num_runs=0
demo_quit=1
demo_ai=1
-10
View File
@@ -1,15 +1,5 @@
ConsoleHide
g_godMode=1
g_infiniteammo=1
r_displayinfo=1
s_profiling=1
sys_maxfps=0
e_ObjectLayersActivation=0
e_ObjectLayersActivationPhysics=0
demo_file=autotest
demo_num_runs=2
demo_quit=1
demo_savestats=1
demo_profile=-1
demo
+1 -8
View File
@@ -1,12 +1,5 @@
ConsoleHide
g_godMode=1
g_infiniteammo=1
r_displayinfo=1
s_profiling=1
sys_maxfps=0
demo_file=playthru
demo_num_runs=2
demo_quit=1
demo_savestats=1
demo_profile=-1
demo
demo
@@ -11,113 +11,16 @@
; default of this CVarGroup
= 7
sys_spec_ObjectDetail=7
sys_spec_Shading=7
sys_spec_VolumetricEffects=7
sys_spec_Shadows=7
sys_spec_Texture=7
sys_spec_Physics=7
sys_spec_PostProcessing=7
sys_spec_Particles=7
sys_spec_Sound=7
sys_spec_Water=7
sys_spec_GameEffects=7
sys_spec_light=7
[1]
sys_spec_ObjectDetail=1
sys_spec_Shading=1
sys_spec_VolumetricEffects=1
sys_spec_Shadows=1
sys_spec_Texture=1
sys_spec_Physics=1
sys_spec_PostProcessing=1
sys_spec_Particles=1
sys_spec_Sound=1
sys_spec_Water=1
sys_spec_GameEffects=1
sys_spec_light=1
[2]
sys_spec_ObjectDetail=2
sys_spec_Shading=2
sys_spec_VolumetricEffects=2
sys_spec_Shadows=2
sys_spec_Texture=2
sys_spec_Physics=2
sys_spec_PostProcessing=2
sys_spec_Particles=2
sys_spec_Sound=2
sys_spec_Water=2
sys_spec_GameEffects=2
sys_spec_light=2
[3]
sys_spec_ObjectDetail=3
sys_spec_Shading=3
sys_spec_VolumetricEffects=3
sys_spec_Shadows=3
sys_spec_Texture=3
sys_spec_Physics=3
sys_spec_PostProcessing=3
sys_spec_Particles=3
sys_spec_Sound=3
sys_spec_Water=3
sys_spec_GameEffects=3
sys_spec_light=3
[4]
sys_spec_ObjectDetail=4
sys_spec_Shading=4
sys_spec_VolumetricEffects=4
sys_spec_Shadows=4
sys_spec_Texture=4
sys_spec_Physics=4
sys_spec_PostProcessing=4
sys_spec_Particles=4
sys_spec_Sound=4
sys_spec_Water=4
sys_spec_GameEffects=4
sys_spec_light=4
[5]
sys_spec_ObjectDetail=5
sys_spec_Shading=5
sys_spec_VolumetricEffects=5
sys_spec_Shadows=5
sys_spec_Texture=5
sys_spec_Physics=5
sys_spec_PostProcessing=5
sys_spec_Particles=5
sys_spec_Sound=5
sys_spec_Water=5
sys_spec_GameEffects=5
sys_spec_light=5
[6]
sys_spec_ObjectDetail=6
sys_spec_Shading=6
sys_spec_VolumetricEffects=6
sys_spec_Shadows=6
sys_spec_Texture=6
sys_spec_Physics=6
sys_spec_PostProcessing=6
sys_spec_Particles=6
sys_spec_Sound=6
sys_spec_Water=6
sys_spec_GameEffects=6
sys_spec_light=6
[8]
sys_spec_ObjectDetail=8
sys_spec_Shading=8
sys_spec_VolumetricEffects=8
sys_spec_Shadows=8
sys_spec_Texture=8
sys_spec_Physics=8
sys_spec_PostProcessing=8
sys_spec_Particles=8
sys_spec_Sound=8
sys_spec_Water=8
sys_spec_GameEffects=8
sys_spec_light=8
@@ -1,8 +0,0 @@
[default]
; default of this CVarGroup
= 7
mfx_Timeout = 0.01
@@ -1,160 +0,0 @@
[default]
; default of this CVarGroup
= 7
ca_AttachmentCullingRation=360
es_DebrisLifetimeScale=1
e_CoverageBufferReproj=6
e_DecalsAllowGameDecals=1
e_DecalsLifeTimeScale=2
e_DecalsOverlapping=1
e_Dissolve=2
e_LightQuality=3
e_LodMin=0
e_LodRatio=20
e_MaxViewDistSpecLerp=1
e_MergedMeshesInstanceDist=1.0
e_MergedMeshesPool=8192
e_ObjQuality=3
e_OcclusionCullingViewDistRatio=1
e_ProcVegetation=1
e_StatObjBufferRenderTasks=1
e_StreamCgf=0
e_TerrainLodRatio=1
e_TerrainOcclusionCullingMaxDist=200
e_Tessellation=0
e_VegetationMinSize=0
e_ViewDistMin=10
e_ViewDistRatio=100
e_ViewDistRatioCustom=100
e_ViewDistRatioDetail=100
e_ViewDistRatioLights=50
e_ViewDistRatioVegetation=100
r_DrawNearZRange=0.12
r_FlaresTessellationRatio=1
r_SilhouettePOM=0
r_usezpass=2
[1]
ca_AttachmentCullingRation=145
es_DebrisLifetimeScale=0.6
e_DecalsLifeTimeScale=1
e_Dissolve=0
e_LightQuality=1
e_LodRatio=10
e_MaxViewDistSpecLerp=0.5
e_ObjQuality=1
e_TerrainOcclusionCullingMaxDist=130
e_VegetationMinSize=0.5
e_ViewDistRatioCustom=60
e_ViewDistRatioDetail=25
e_ViewDistRatioLights=25
e_ViewDistRatioVegetation=21
r_FlaresTessellationRatio=0.25
r_usezpass=1
e_ProcVegetation=0
e_ViewDistRatio=50
[2]
ca_AttachmentCullingRation=145
es_DebrisLifetimeScale=0.6
e_DecalsLifeTimeScale=1
e_Dissolve=0
e_LightQuality=2
e_LodRatio=10
e_MaxViewDistSpecLerp=0.5
e_ObjQuality=2
e_TerrainOcclusionCullingMaxDist=130
e_VegetationMinSize=0.5
e_ViewDistRatioCustom=60
e_ViewDistRatioDetail=25
e_ViewDistRatioLights=25
e_ViewDistRatioVegetation=50
r_FlaresTessellationRatio=0.25
r_usezpass=1
e_ProcVegetation=1
e_ViewDistRatio=50
[3]
ca_AttachmentCullingRation=145
es_DebrisLifetimeScale=0.6
e_DecalsLifeTimeScale=1
e_Dissolve=0
e_LightQuality=3
e_LodRatio=10
e_MaxViewDistSpecLerp=0.5
e_ObjQuality=3
e_TerrainOcclusionCullingMaxDist=130
e_VegetationMinSize=0.5
e_ViewDistRatioCustom=60
e_ViewDistRatioDetail=25
e_ViewDistRatioLights=25
e_ViewDistRatioVegetation=50
r_FlaresTessellationRatio=0.25
r_usezpass=1
e_ProcVegetation=1
e_ViewDistRatio=75
[4]
ca_AttachmentCullingRation=145
es_DebrisLifetimeScale=0.6
e_DecalsLifeTimeScale=1
e_Dissolve=0
e_LightQuality=4
e_LodRatio=10
e_MaxViewDistSpecLerp=0.5
e_ObjQuality=4
e_TerrainOcclusionCullingMaxDist=130
e_VegetationMinSize=0.5
e_ViewDistRatioCustom=60
e_ViewDistRatioDetail=25
e_ViewDistRatioLights=25
e_ViewDistRatioVegetation=50
r_FlaresTessellationRatio=0.25
r_usezpass=1
e_ProcVegetation=1
e_ViewDistRatio=75
[5]
ca_AttachmentCullingRation=145
es_DebrisLifetimeScale=0.6
e_DecalsLifeTimeScale=1
e_LightQuality=1
e_LodRatio=10
e_MaxViewDistSpecLerp=0.5
e_ObjQuality=1
e_TerrainOcclusionCullingMaxDist=130
e_VegetationMinSize=0.5
e_ViewDistRatio=50
e_ViewDistRatioCustom=60
e_ViewDistRatioDetail=25
e_ViewDistRatioLights=25
e_ViewDistRatioVegetation=50
r_FlaresTessellationRatio=0.25
[6]
ca_AttachmentCullingRation=300
es_DebrisLifetimeScale=0.8
e_LightQuality=2
e_LodRatio=15
e_ObjQuality=2
e_ViewDistRatio=75
e_ViewDistRatioDetail=35
e_ViewDistRatioVegetation=75
[8]
ca_AttachmentCullingRation=400
e_LightQuality=4
e_LodRatio=40
e_MergedMeshesInstanceDist=2.0
e_MergedMeshesPool=16384
e_ObjQuality=4
e_TerrainLodRatio=0.5
e_Tessellation=1
e_ViewDistRatio=125
e_ViewDistRatioCustom=125
e_ViewDistRatioDetail=125
e_ViewDistRatioLights=75
e_ViewDistRatioVegetation=125
r_DrawNearZRange = 0.08
r_SilhouettePOM=1
@@ -1,94 +0,0 @@
[default]
; default of this CVarGroup
= 7
e_ParticlesGI=1
e_ParticlesPreload=0
e_ParticlesMaxScreenFill=128
e_ParticlesMinDrawPixels=1
e_ParticlesMotionBlur=0
e_ParticlesObjectCollisions=2
e_ParticlesQuality=3
e_ParticlesSortQuality=0
e_ParticlesPoolSize=16384
r_ParticlesHalfRes=0
r_ParticlesTessellation=1
r_ParticlesInstanceVertices=1
r_ParticlesGpuMaxEmitCount=10000
[1]
e_ParticlesGI=0
e_ParticlesPreload=1
e_ParticlesMaxScreenFill=16
e_ParticlesMinDrawPixels=2
e_ParticlesObjectCollisions=1
e_ParticlesQuality=2
e_ParticlesPoolSize=4096
r_ParticlesHalfRes=1
r_ParticlesTessellation=0
r_ParticlesInstanceVertices=0
r_ParticlesGpuMaxEmitCount=10
[2]
e_ParticlesGI=0
e_ParticlesPreload=1
e_ParticlesMaxScreenFill=16
e_ParticlesMinDrawPixels=2
e_ParticlesObjectCollisions=1
e_ParticlesQuality=2
e_ParticlesPoolSize=4096
r_ParticlesHalfRes=1
r_ParticlesTessellation=0
r_ParticlesInstanceVertices=0
r_ParticlesGpuMaxEmitCount=100
[3]
e_ParticlesGI=0
e_ParticlesPreload=1
e_ParticlesMaxScreenFill=16
e_ParticlesMinDrawPixels=2
e_ParticlesObjectCollisions=1
e_ParticlesQuality=2
e_ParticlesPoolSize=4096
r_ParticlesHalfRes=1
r_ParticlesTessellation=0
r_ParticlesInstanceVertices=0
r_ParticlesGpuMaxEmitCount=500
[4]
e_ParticlesGI=0
e_ParticlesPreload=1
e_ParticlesMaxScreenFill=16
e_ParticlesMinDrawPixels=2
e_ParticlesObjectCollisions=1
e_ParticlesQuality=2
e_ParticlesPoolSize=4096
r_ParticlesHalfRes=1
r_ParticlesTessellation=0
r_ParticlesInstanceVertices=0
r_ParticlesGpuMaxEmitCount=1000
[5]
e_ParticlesMaxScreenFill=32
e_ParticlesMinDrawPixels=1.5
e_ParticlesObjectCollisions=1
e_ParticlesQuality=1
r_ParticlesHalfRes=1
r_ParticlesTessellation=0
r_ParticlesGpuMaxEmitCount=3000
[6]
e_ParticlesMaxScreenFill=64
e_ParticlesObjectCollisions=1
e_ParticlesQuality=2
r_ParticlesGpuMaxEmitCount=5000
[8]
e_ParticlesMaxScreenFill=160
e_ParticlesMotionBlur=1
e_ParticlesQuality=4
r_ParticlesGpuMaxEmitCount=1048576
@@ -1,100 +0,0 @@
[default]
; default of this CVarGroup
= 7
es_MaxPhysDist=100
es_MaxPhysDistInvisible=25
e_CullVegActivation=50
e_FoliageWindActivationDist=25
e_PhysMinCellSize=4
e_PhysOceanCell=0.5
e_PhysProxyTriLimit=10000
g_breakage_mem_limit=0
g_breakage_particles_limit=160
g_no_secondary_breaking=0
g_tree_cut_reuse_dist=0
p_gravity_z=-13
p_max_entity_cells=300000
p_max_MC_iters=6000
p_max_object_splashes=3
p_max_substeps=5
p_max_substeps_large_group=5
p_num_bodies_large_group=100
p_splash_dist0=7
p_splash_dist1=30
p_splash_force0=10
p_splash_force1=100
p_splash_vel0=4.5
p_splash_vel1=10
v_vehicle_quality=4
[1]
es_MaxPhysDistInvisible=15
e_CullVegActivation=30
e_FoliageWindActivationDist=10
e_PhysMinCellSize=16
e_PhysOceanCell=1
g_breakage_mem_limit=2000
g_breakage_particles_limit=40
g_no_secondary_breaking=1
g_tree_cut_reuse_dist=1
p_max_entity_cells=75000
p_max_MC_iters=2000
p_max_substeps=2
[2]
es_MaxPhysDistInvisible=15
e_CullVegActivation=30
e_FoliageWindActivationDist=10
e_PhysMinCellSize=16
e_PhysOceanCell=1
g_breakage_mem_limit=2000
g_breakage_particles_limit=40
g_no_secondary_breaking=1
g_tree_cut_reuse_dist=1
p_max_entity_cells=75000
p_max_MC_iters=2000
p_max_substeps=2
[3]
es_MaxPhysDistInvisible=15
e_CullVegActivation=30
e_FoliageWindActivationDist=10
e_PhysMinCellSize=16
e_PhysOceanCell=1
g_breakage_mem_limit=2000
g_breakage_particles_limit=40
g_no_secondary_breaking=1
g_tree_cut_reuse_dist=1
p_max_entity_cells=75000
p_max_MC_iters=2000
p_max_substeps=2
[4]
es_MaxPhysDistInvisible=15
e_CullVegActivation=30
e_FoliageWindActivationDist=10
e_PhysMinCellSize=16
e_PhysOceanCell=1
g_breakage_mem_limit=2000
g_breakage_particles_limit=40
g_no_secondary_breaking=1
g_tree_cut_reuse_dist=1
p_max_entity_cells=75000
p_max_MC_iters=2000
p_max_substeps=2
[5]
es_MaxPhysDist=50
es_MaxPhysDistInvisible=15
e_CullVegActivation=30
e_FoliageWindActivationDist=10
e_PhysOceanCell=1
g_breakage_particles_limit=80
g_tree_cut_reuse_dist=0.35
p_max_MC_iters=4000
p_max_substeps=2
[6]
[8]
@@ -1,114 +0,0 @@
[default]
; default of this CVarGroup
= 7
r_PostProcessEffects=1
q_ShaderHDR=2
q_ShaderPostProcess=2
r_ChromaticAberration=0
r_ColorGradingChartsCache=0
r_DepthOfField=2
r_Flares=1
r_HDRBloomQuality=2
r_MotionBlur=2
r_MotionBlurMaxViewDist=100000
r_MotionBlurQuality=1
r_MotionBlurShutterSpeed=125
r_Rain=2
r_RainMaxViewDist_Deferred=150
r_Sharpening=0
r_Snow=2
r_SunShafts=2
r_TranspDepthFixup=1
r_ToneMapTechnique=0
r_ToneMapExposureType=0
r_HDRBloom=1
r_ColorGrading=1
r_ColorSpace=0
[1]
q_ShaderHDR=1
q_ShaderPostProcess=1
r_ColorGrading=0
r_DepthOfField=0
r_Flares=0
r_HDRBloom=0
r_HDRBloomQuality=0
r_MotionBlur=0
r_MotionBlurMaxViewDist=16
r_MotionBlurQuality=0
r_Rain=1
r_RainMaxViewDist_Deferred=40
r_Snow=1
r_SunShafts=0
r_TranspDepthFixup=0
r_ToneMapTechnique=3
r_ToneMapExposureType=1
r_ColorSpace=2
[2]
q_ShaderHDR=1
q_ShaderPostProcess=1
r_ColorGradingChartsCache=4
r_DepthOfField=1
r_Flares=0
r_HDRBloomQuality=0
r_MotionBlur=0
r_MotionBlurMaxViewDist=16
r_MotionBlurQuality=0
r_Rain=1
r_RainMaxViewDist_Deferred=40
r_Snow=1
r_SunShafts=1
r_TranspDepthFixup=0
[3]
q_ShaderHDR=1
q_ShaderPostProcess=2
r_ColorGradingChartsCache=4
r_DepthOfField=1
r_HDRBloomQuality=1
r_MotionBlur=0
r_MotionBlurMaxViewDist=16
r_MotionBlurQuality=0
r_Rain=1
r_RainMaxViewDist_Deferred=40
r_Snow=1
r_SunShafts=1
r_TranspDepthFixup=0
[4]
q_ShaderHDR=1
q_ShaderPostProcess=2
r_ColorGradingChartsCache=4
r_DepthOfField=1
r_HDRBloomQuality=1
r_MotionBlur=0
r_MotionBlurMaxViewDist=16
r_MotionBlurQuality=0
r_Rain=1
r_RainMaxViewDist_Deferred=40
r_Snow=1
r_SunShafts=1
r_TranspDepthFixup=0
[5]
q_ShaderHDR=1
q_ShaderPostProcess=1
r_ColorGradingChartsCache=4
r_MotionBlurMaxViewDist=16
r_MotionBlurQuality=0
r_RainMaxViewDist_Deferred=40
r_TranspDepthFixup=0
[6]
q_ShaderHDR=1
q_ShaderPostProcess=1
r_RainMaxViewDist_Deferred=100
[8]
q_ShaderHDR=3
q_ShaderPostProcess=3
r_MotionBlurQuality=2
@@ -1,98 +0,0 @@
[default]
; default of this CVarGroup
= 7
q_ShaderGeneral=2
q_ShaderMetal=2
q_ShaderGlass=2
q_ShaderVegetation=2
q_ShaderIce=2
q_ShaderTerrain=2
q_ShaderShadow=2
q_ShaderFX=2
q_ShaderSky=2
q_Renderer=2
[1]
q_ShaderGeneral=1
q_ShaderMetal=1
q_ShaderGlass=1
q_ShaderVegetation=1
q_ShaderIce=1
q_ShaderTerrain=1
q_ShaderShadow=1
q_ShaderFX=1
q_ShaderSky=1
q_Renderer=1
[2]
q_ShaderGeneral=1
q_ShaderMetal=1
q_ShaderGlass=1
q_ShaderVegetation=1
q_ShaderIce=1
q_ShaderTerrain=1
q_ShaderShadow=1
q_ShaderFX=1
q_ShaderSky=1
q_Renderer=1
[3]
q_ShaderGeneral=1
q_ShaderMetal=1
q_ShaderGlass=1
q_ShaderVegetation=1
q_ShaderIce=1
q_ShaderTerrain=1
q_ShaderShadow=1
q_ShaderFX=1
q_ShaderSky=1
q_Renderer=2
[4]
q_ShaderGeneral=1
q_ShaderMetal=1
q_ShaderGlass=1
q_ShaderVegetation=1
q_ShaderIce=1
q_ShaderTerrain=1
q_ShaderShadow=1
q_ShaderFX=1
q_ShaderSky=1
q_Renderer=2
[5]
q_ShaderGeneral=1
q_ShaderMetal=1
q_ShaderGlass=1
q_ShaderVegetation=1
q_ShaderIce=1
q_ShaderTerrain=1
q_ShaderShadow=1
q_ShaderFX=1
q_ShaderSky=1
q_Renderer=1
[6]
q_ShaderGeneral=1
q_ShaderMetal=1
q_ShaderGlass=1
q_ShaderVegetation=1
q_ShaderIce=1
q_ShaderTerrain=1
q_ShaderShadow=1
q_ShaderFX=1
q_ShaderSky=1
q_Renderer=1
[8]
q_ShaderGeneral=3
q_ShaderMetal=3
q_ShaderGlass=3
q_ShaderVegetation=3
q_ShaderIce=3
q_ShaderTerrain=3
q_ShaderShadow=3
q_ShaderFX=3
q_ShaderSky=3
q_Renderer=3
@@ -1,120 +0,0 @@
[default]
; default of this CVarGroup
= 7
e_CacheNearestCubePicking=1
e_DynamicLightsMaxEntityLights=16
e_GI=1
e_LightVolumes=1
e_SkyUpdateRate=1
e_TerrainAo=0
e_VegetationUseTerrainColor=1
r_DeferredShadingDepthBoundsTest=1
r_DeferredShadingTiled=2
r_DeferredShadingTiledHairQuality=1
r_deferredShadingFilterGBuffer=0
r_DeferredShadingSSS=1
r_AntialiasingMode=3
r_DetailDistance=8
r_EnvTexUpdateInterval=0.05
r_Refraction=1
r_RefractionPartialResolves=2
r_ssdo=1
r_ssdoHalfRes=2
r_ssdoColorBleeding=1
r_SSReflections=1
r_SSReflHalfRes=1
r_VisAreaClipLightsPerPixel=1
sys_spec_Quality=7
[1]
e_DynamicLightsMaxEntityLights=2
e_GI=0
e_SkyUpdateRate=0.5
e_VegetationUseTerrainColor=0
r_DeferredShadingTiled=0
r_DeferredShadingTiledHairQuality=0
r_DeferredShadingSSS=0
r_AntialiasingMode=0
r_DetailDistance=4
r_EnvTexUpdateInterval=0.075
r_Refraction=0
r_RefractionPartialResolves=0
r_ssdo=0
r_ssdoHalfRes=1
r_ssdoColorBleeding=0
r_SSReflections=0
sys_spec_Quality=1
[2]
e_DynamicLightsMaxEntityLights=2
e_GI=0
e_SkyUpdateRate=0.5
e_VegetationUseTerrainColor=0
r_DeferredShadingTiled=0
r_DeferredShadingTiledHairQuality=0
r_DeferredShadingSSS=0
r_AntialiasingMode=0
r_DetailDistance=4
r_EnvTexUpdateInterval=0.075
r_RefractionPartialResolves=0
r_ssdo=0
r_ssdoHalfRes=1
r_ssdoColorBleeding=0
r_SSReflections=0
sys_spec_Quality=2
[3]
e_DynamicLightsMaxEntityLights=2
e_GI=0
e_SkyUpdateRate=0.5
e_VegetationUseTerrainColor=0
r_DeferredShadingTiled=0
r_DeferredShadingTiledHairQuality=0
r_DeferredShadingSSS=0
r_AntialiasingMode=0
r_DetailDistance=4
r_EnvTexUpdateInterval=0.075
r_RefractionPartialResolves=0
r_ssdo=0
r_ssdoColorBleeding=0
r_SSReflections=0
sys_spec_Quality=3
[4]
e_DynamicLightsMaxEntityLights=2
e_GI=0
e_SkyUpdateRate=0.5
e_VegetationUseTerrainColor=0
r_DeferredShadingTiled=0
r_DeferredShadingTiledHairQuality=0
r_DeferredShadingSSS=0
r_AntialiasingMode=0
r_DetailDistance=4
r_EnvTexUpdateInterval=0.075
r_RefractionPartialResolves=0
r_ssdo=1
r_ssdoHalfRes=1
r_ssdoColorBleeding=0
r_SSReflections=0
sys_spec_Quality=4
[5]
e_DynamicLightsMaxEntityLights=7
e_GI=0
e_SkyUpdateRate=0.5
r_DetailDistance=4
r_EnvTexUpdateInterval=0.075
r_SSReflections=0
r_DeferredShadingTiledHairQuality=0
r_DeferredShadingSSS=0
sys_spec_Quality=5
[6]
e_DynamicLightsMaxEntityLights=11
sys_spec_Quality=6
[8]
r_DeferredShadingTiledHairQuality=2
r_SSReflHalfRes=0
sys_spec_Quality=8
@@ -1,116 +0,0 @@
[default]
; default of this CVarGroup
= 7
e_GsmLodsNum=5
e_GsmRange=3
e_ParticlesShadows=1
e_Shadows=1
e_ShadowsBlendCascades=1
e_ShadowsClouds=1
e_ShadowsCastViewDistRatio=1
e_ShadowsLodBiasFixed=0
e_ShadowsMaxTexRes=1024
e_ShadowsOnAlphaBlend=0
e_ShadowsPoolSize=4096
e_ShadowsResScale=4
e_ShadowsTessellateCascades=1
e_ShadowsTessellateDLights=0
e_ShadowsUpdateViewDistRatio=256
r_DrawNearShadows=1
r_FogShadows=2
r_FogShadowsWater=0
r_ShadowJittering=2.5
r_ShadowPoolMaxFrames=30
r_ShadowPoolMaxTimeslicedUpdatesPerFrame=100
r_ShadowsPCFiltering=1
r_ShadowsCache=4
r_ShadowsCacheFormat=1
r_ShadowsCacheResolutions=6324,4214
r_ShadowsUseClipVolume=1
e_ObjShadowCastSpec=3
[1]
e_GsmLodsNum=3
e_ParticlesShadows=0
e_ShadowsBlendCascades=0
e_ShadowsCastViewDistRatio=0.8
e_ShadowsLodBiasFixed=1
e_ShadowsMaxTexRes=512
r_DrawNearShadows=0
r_FogShadows=0
r_ShadowJittering=0
r_ShadowsCacheFormat=0
r_ShadowsCacheResolutions=3162,2107
e_ObjShadowCastSpec=1
e_ShadowsPoolSize=1024
[2]
e_GsmLodsNum=4
e_ParticlesShadows=0
e_ShadowsBlendCascades=0
e_ShadowsCastViewDistRatio=0.8
e_ShadowsLodBiasFixed=1
e_ShadowsMaxTexRes=512
r_DrawNearShadows=0
r_FogShadows=0
r_ShadowJittering=0
r_ShadowsCacheFormat=0
r_ShadowsCacheResolutions=3162,2107
e_ObjShadowCastSpec=1
e_ShadowsPoolSize=1024
[3]
e_GsmLodsNum=4
e_ParticlesShadows=0
e_ShadowsBlendCascades=0
e_ShadowsCastViewDistRatio=0.8
e_ShadowsLodBiasFixed=1
e_ShadowsMaxTexRes=512
r_DrawNearShadows=0
r_FogShadows=0
r_ShadowJittering=0
r_ShadowsCacheFormat=0
r_ShadowsCacheResolutions=3162,2107
e_ObjShadowCastSpec=1
e_ShadowsPoolSize=1024
[4]
e_GsmLodsNum=4
e_ParticlesShadows=0
e_ShadowsBlendCascades=0
e_ShadowsCastViewDistRatio=0.8
e_ShadowsLodBiasFixed=1
e_ShadowsMaxTexRes=512
r_DrawNearShadows=0
r_FogShadows=0
r_ShadowJittering=0
r_ShadowsCacheFormat=0
r_ShadowsCacheResolutions=3162,2107
e_ObjShadowCastSpec=1
e_ShadowsPoolSize=1024
[5]
e_GsmLodsNum=4
e_ParticlesShadows=0
e_ShadowsBlendCascades=0
e_ShadowsCastViewDistRatio=0.8
e_ShadowsLodBiasFixed=1
e_ShadowsMaxTexRes=512
r_FogShadows=0
r_ShadowJittering=1
e_ObjShadowCastSpec=1
r_ShadowsCacheResolutions=3162,2107
[6]
r_ShadowJittering=1
e_ObjShadowCastSpec=2
[8]
r_FogShadows=1
r_FogShadowsWater=1
r_ShadowPoolMaxFrames=0
r_ShadowPoolMaxTimeslicedUpdatesPerFrame=100
e_ObjShadowCastSpec=4
r_ShadowsCache=5
r_ShadowsCacheResolutions=4214
@@ -1,17 +0,0 @@
[default]
; default of this CVarGroup
= 7
[1]
[2]
[3]
[4]
[5]
[6]
[8]
@@ -1,94 +0,0 @@
[default]
; default of this CVarGroup
= 7
e_TerrainTextureStreamingPoolItemsNum=64
r_DynTexAtlasCloudsMaxSize=32
r_DynTexAtlasSpritesMaxSize=32
r_DynTexMaxSize=80
r_EnvCMResolution=2
r_EnvTexResolution=3
r_ImposterRatio=1
r_TexAtlasSize=2048
r_TexMaxAnisotropy=4
r_TexMinAnisotropy=4
r_TexNoAnisoAlphaTest=0
[1]
e_TerrainTextureStreamingPoolItemsNum=16
r_DynTexAtlasCloudsMaxSize=8
r_DynTexAtlasSpritesMaxSize=8
r_DynTexMaxSize=20
r_EnvCMResolution=0
r_EnvTexResolution=1
r_ImposterRatio=2
r_TexAtlasSize=512
r_TexMaxAnisotropy=2
r_TexMinAnisotropy=2
r_TexNoAnisoAlphaTest=1
[2]
e_TerrainTextureStreamingPoolItemsNum=16
r_DynTexAtlasCloudsMaxSize=8
r_DynTexAtlasSpritesMaxSize=8
r_DynTexMaxSize=20
r_EnvCMResolution=0
r_EnvTexResolution=1
r_ImposterRatio=2
r_TexAtlasSize=512
r_TexMaxAnisotropy=2
r_TexMinAnisotropy=2
r_TexNoAnisoAlphaTest=1
[3]
e_TerrainTextureStreamingPoolItemsNum=16
r_DynTexAtlasCloudsMaxSize=8
r_DynTexAtlasSpritesMaxSize=8
r_DynTexMaxSize=20
r_EnvCMResolution=0
r_EnvTexResolution=1
r_ImposterRatio=2
r_TexAtlasSize=512
r_TexMaxAnisotropy=2
r_TexMinAnisotropy=2
r_TexNoAnisoAlphaTest=1
[4]
e_TerrainTextureStreamingPoolItemsNum=16
r_DynTexAtlasCloudsMaxSize=8
r_DynTexAtlasSpritesMaxSize=8
r_DynTexMaxSize=20
r_EnvCMResolution=0
r_EnvTexResolution=1
r_ImposterRatio=2
r_TexAtlasSize=512
r_TexMaxAnisotropy=2
r_TexMinAnisotropy=2
r_TexNoAnisoAlphaTest=1
[5]
r_DynTexAtlasCloudsMaxSize=24
r_DynTexAtlasSpritesMaxSize=16
r_DynTexMaxSize=50
r_EnvCMResolution=0
r_EnvTexResolution=1
r_ImposterRatio=2
r_TexAtlasSize=512
r_TexMaxAnisotropy=2
r_TexMinAnisotropy=2
r_TexNoAnisoAlphaTest=1
[6]
r_DynTexAtlasCloudsMaxSize=24
r_DynTexAtlasSpritesMaxSize=16
r_DynTexMaxSize=60
r_EnvCMResolution=1
r_EnvTexResolution=2
r_ImposterRatio=1.5
r_TexMaxAnisotropy=8
r_TexMinAnisotropy=8
r_TexNoAnisoAlphaTest=1
[8]
r_TexMaxAnisotropy=16
r_TexMinAnisotropy=16
@@ -1,52 +0,0 @@
[default]
; dummy default for this CVarGroup (will be auto initialized during streaming system init or overridden by user via system.cfg)
= 0
; VRAM 1.0 GB
r_TexturesStreaming=1
r_TexturesStreamingMipBias=0
r_TexturesstreamingMinUsableMips=8
r_TexturesStreamingSkipMips=2
r_TexturesStreamPoolSize=256
[1]
; VRAM 1.0 GB
r_TexturesStreaming=0
r_TexturesStreamingSkipMips=0
r_TexturesStreamPoolSize=384
[2]
; VRAM 1.0 GB
r_TexturesStreaming=0
r_TexturesStreamingSkipMips=0
r_TexturesStreamPoolSize=384
[3]
; VRAM 1.0 GB
r_TexturesStreaming=0
r_TexturesStreamingSkipMips=0
r_TexturesStreamPoolSize=384
[4]
; VRAM 1.0 GB
r_TexturesStreaming=0
r_TexturesStreamingSkipMips=0
r_TexturesStreamPoolSize=384
[5]
; VRAM 1.0 GB
[6]
; VRAM 1.5 GB
r_TexturesStreamingSkipMips=1
r_TexturesStreamPoolSize=512
[7]
; VRAM 2.0 GB
r_TexturesStreamingSkipMips=0
r_TexturesStreamPoolSize=640
[8]
; VRAM 3.0 GB
r_TexturesStreamingSkipMips=0
r_TexturesStreamPoolSize=1536
@@ -1,26 +0,0 @@
[default]
; default of this CVarGroup
= 7
e_Clouds=1
r_Beams=1
[1]
r_Beams=0
[2]
r_Beams=0
[3]
r_Beams=0
[4]
r_Beams=0
[5]
r_Beams=0
[6]
r_Beams=0
[8]
@@ -1,81 +0,0 @@
[default]
; default of this CVarGroup
= 7
e_WaterOceanFFT=1
e_WaterTessellationAmount=10
e_WaterTessellationSwathWidth=10
q_ShaderWater=2
r_WaterCaustics=1
r_WaterReflections=1
r_WaterReflectionsQuality=4
r_WaterReflectionsMinVisiblePixelsUpdate=0.05
r_WaterTessellationHW=0
r_WaterUpdateDistance=0.2
r_WaterUpdateFactor=0.0
r_WaterVolumeCaustics=0
r_WaterVolumeCausticsDensity=256
r_WaterVolumeCausticsMaxDist=35
r_WaterVolumeCausticsRes=1024
r_WaterVolumeCausticsSnapFactor=1
[1]
e_WaterTessellationAmount=20
q_ShaderWater=1
r_WaterReflectionsQuality=0
r_WaterUpdateDistance=1
r_WaterUpdateFactor=0.1
r_WaterVolumeCausticsDensity=64
r_WaterVolumeCausticsMaxDist=20
r_WaterVolumeCausticsRes=384
[2]
e_WaterTessellationAmount=20
q_ShaderWater=1
r_WaterReflectionsQuality=0
r_WaterUpdateDistance=1
r_WaterUpdateFactor=0.1
r_WaterVolumeCausticsDensity=64
r_WaterVolumeCausticsMaxDist=20
r_WaterVolumeCausticsRes=384
[3]
e_WaterTessellationAmount=20
q_ShaderWater=1
r_WaterReflectionsQuality=0
r_WaterUpdateDistance=1
r_WaterUpdateFactor=0.05
r_WaterVolumeCausticsDensity=64
r_WaterVolumeCausticsMaxDist=20
r_WaterVolumeCausticsRes=384
[4]
e_WaterTessellationAmount=20
q_ShaderWater=1
r_WaterReflectionsQuality=4
r_WaterUpdateDistance=1
r_WaterUpdateFactor=0.01
r_WaterVolumeCausticsDensity=64
r_WaterVolumeCausticsMaxDist=20
r_WaterVolumeCausticsRes=384
[5]
e_WaterTessellationAmount=20
q_ShaderWater=1
r_WaterUpdateDistance=1
r_WaterUpdateFactor=0.1
r_WaterVolumeCausticsDensity=64
r_WaterVolumeCausticsMaxDist=20
r_WaterVolumeCausticsRes=384
[6]
r_WaterUpdateDistance=1
r_WaterUpdateFactor=0.05
r_WaterVolumeCausticsDensity=128
r_WaterVolumeCausticsMaxDist=25
r_WaterVolumeCausticsRes=512
[8]
e_WaterTessellationAmount=85
r_WaterTessellationHW=1
r_WaterVolumeCaustics=1
-3
View File
@@ -1,4 +1 @@
ai_DebugDraw = 1
ai_DebugDrawNavigation = 1
ai_DrawPath all
ai_debugMNMAgentType MediumSizedCharacters
+1 -13
View File
@@ -1,7 +1,6 @@
; Setup useful cvars for artists profiling GPU cost
; Once in level (e.g. map c3mp_rooftop_gardens from the frontend/cmdline), in the console:
; exec artprof.cfg
; Be sure also to set r_shadersAsyncActivation=0 in your user.cfg (or copy artprof_user.cfg -> user.cfg)
; used to allow loading of loose shaders
sys_pakPriority=0
@@ -9,19 +8,8 @@ sys_pakPriority=0
; because it's annoying and not relevant for artists
sys_pakLogInvalidFileAccess=0
; disable fog volumes and particles as they can be misleading with r_measureOverdraw 4
e_fogVolumes=0
e_particles=0
; for convenience
g_infiniteSuitEnergy=1
g_infiniteAmmo=1
g_timelimit=0
bind o "r_measureOverdraw 0"
bind p "r_measureOverdraw 4"
bind k "r_artProfile 0"
bind l "r_artProfile 1"
; loading into an MP level with the map command stops you looking up and down unless you have a weapon
i_giveitem scar
-3
View File
@@ -1,6 +1,3 @@
; disable async shader activation as it crashes when r_shadersAllowCompilation=1
r_shadersAsyncActivation=0
; enable shader compiliation for r_measureOverdraw 4
r_shadersAllowCompilation=1
-10
View File
@@ -1,13 +1,3 @@
demo_restart_level = 2
g_godMode=1
g_infiniteammo=1
r_displayinfo=1
demo_file = autotest
demo_ai = 1
demo_num_runs = 4
demo_quit = 1
hud_startPaused=0
sys_maxfps=0
e_ObjectLayersActivation=0
sys_flash = 0
r_vsync = 0
+1 -11
View File
@@ -1,13 +1,3 @@
demo_restart_level = 1
g_godMode = 1
g_infiniteammo = 1
r_displayinfo = 2
demo_file = timedemo_short
demo_ai = 0
demo_num_runs = 2
demo_quit = 1
-- hud_startPaused = 0
sys_maxfps = -1
-- e_ObjectLayersActivation = 0
-- sys_flash = 0
r_vsync = 0
r_vsync = 0
-6
View File
@@ -1,6 +0,0 @@
r_ColorGradingChartsCache = 0
r_waterupdateFactor = 0
r_PostProcessHUD3DCache = 0
e_gsmcache = 0
r_ConditionalRendering = 0
e_gicache = 0
-77
View File
@@ -1,77 +0,0 @@
ag_turnSpeedParamScale=0.0
aim_assistFalloffDistance=200
aim_assistInputForFullFollow_Ironsight=0.20
aim_assistMaxDistance=255
aim_assistMaxDistance_ironsight=255
aim_assistMinTurnScale=0.5
aim_assistMinTurnScale_ironsight=0.5
aim_assistSlowDisableDistance=255
aim_assistSlowFalloffStartDistance=200
aim_assistSlowThresholdOuter=2.5
aim_assiststrength=0.7
aim_assiststrength_ironsight=0.75
br_breakmaxworldsize=511
cl_sensitivityControllerMP=0.6
cl_shallowWaterSpeedMulPlayer=1.0
controller_multiplier_x=3
controller_multiplier_z=4
g_actorViewDistRatio=255
-- This forces broken trees to have spherical inertia, which makes them harder to rotate around their vertical axis.
g_breakageMinAxisInertia=1.0
g_glassAutoShatterMinArea=0.5
g_distanceForceNoIk=35
g_fpDbaManagementEnable=0
g_godMode=0
g_highlightingMaxDistanceToHighlightSquared=625
g_hitDeathReactions_streaming=2
g_mp_as_DefendersMaxHealth=150
g_multiplayerDefault=1
-- Overriden in GameSDK\Difficulty\*.cfg
g_playerLowHealthThreshold=20
g_playerMidHealthThreshold=60
g_spawn_vistable_numLineTestsPerFrame=3
g_telemetryConfig="MP"
g_telemetrySampleRateBandwidth=3
g_telemetrySampleRateMemory=2
g_telemetrySampleRatePerformance=1
g_VTOLInsideBoundsScaleX=0.6
g_VTOLInsideBoundsScaleY=1
net_breakage_sync_entities=0
net_enable_tfrc=0
net_log=1
-- Make consoles match the PC gravity
p_gravity_z="-13"
-- Sanity check for physics RepositionEntity
p_max_entity_cells=10000
pl_impulseEnabled=1
pl_jump_maxTimerValue=0.0
pl_jump_quickPressThresh=0.12
pl_melee.angle_limit_from_behind=70
pl_melee.impulses_enable=1
pl_melee.melee_snap_angle_limit=45
pl_melee.melee_snap_end_position_range=1.5
pl_melee.melee_snap_move_speed_multiplier=10
pl_melee.melee_snap_target_select_range=3.5
pl_melee.mp_knockback_strength_hor=2
pl_melee.mp_melee_system=1
pl_melee.mp_victim_screenfx_blendout_duration=0.25
pl_melee.mp_victim_screenfx_duration=0.1
pl_nanovision_timetodrain=8
pl_nanovision_timetorecharge=16
pl_pickAndThrow.chargedThrowAutoAimConeSize=10
pl_pickAndThrow.complexMelee_snap_angle_limit=25
pl_sliding_control_mp.deceleration_speed=4
pl_sliding_control_mp.max_downhill_acceleration=15
pl_sliding_control_mp.min_speed=4
pl_sliding_control_mp.min_speed_threshold=5
pl_stealthKill_aimVsSpineLerp=0.65
pl_stealthKill_useExtendedRange=1
p_splash_vel0=0.5
sv_bandwidth=2147483647
@@ -1,29 +0,0 @@
e_GI=0
r_DeferredShadingIndexedAmbient=0
e_ParticlesObjectCollisions=0
g_distanceForceNoLegRaycasts=0.00001
g_telemetryDisplaySessionId=1
g_breakageNoDebrisCollisions=1
; Breakage throttling
; These are explained in ActionGame.cpp
;
g_glassAutoShatterOnExplosions=1
g_glassNoDecals=1
g_glassMaxPanesToBreakPerFrame=2
g_breakageTreeMax=100
g_breakageTreeInc=101
g_breakageTreeDec=25
g_breakageTreeIncGlass=51
sys_PakInMemoryPakSizeLimit=25
r_TexturesStreamPoolSecondarySize=35
r_MotionBlur=1
e_CoverageBufferReproj=2
osm_enabled = 1
g_waterHitOnly = 1
p_max_object_splashes=1
-60
View File
@@ -1,63 +1,3 @@
-- added this lines for proper 360 deg panorama renderings
e_ScreenShotFileFormat = jpg
demo_fixed_timestep = 60
s_SoundEnable = 0
r_DisplayInfo = 0
e_PanoramaScreenShotHeight = 720
e_PanoramaScreenShotWidth = 10053
c_shakeMult = 0
demo_ai = 1
r_MotionBlur = 0
-- enables full water reflection
-- e_DebugMask = 2 -- e_DebugMask not allowed here
-- set weapong lighting effect to 0 to prevent flickering bug because of too much dynamic lights in the scene
sys_spec = 2
r_WaterRefractions = 1
r_WaterReflections = 1
r_WaterUpdateFactor = 0.01
r_WaterReflections_ForceParticles = 0
r_EnvCMResolution = 2
r_EnvTexResolution = 3
r_EnvTexUpdateInterval = 0.05
e_Decals = 1
e_DecalsLifeTimeScale = 2
ca_EnableDecals = 1
e_LodRatio = 10
e_ViewDistRatio = 55
e_Lods = 1
e_VegetationMinSize = 0
r_CloudsUpdateAlways = 0
e_DynamicLightsMaxEntityLights = 3
r_DepthOfField = 1
--r_MotionBlur = 1
r_Flares = 1
r_checkSunVis = 1
r_Coronas = 1
r_CoronaFade = 0.1625
r_UseEdgeAA = 1
e_Clouds = 1
r_TexResolution = 0
r_TexBumpResolution = 0
r_DetailTextures = 1
r_DetailNumLayers = 1
r_DetailDistance = 8
e_ParticlesLod = 0.9
r_ShadowBlur = 3
e_ShadowsMaxTexRes = 1024
r_ShadowJittering = 1
e_Shadows = 1
e_VegetationBending = 1
ai_UpdateAllAlways = 1
r_refraction = 1
r_sunshafts = 1
r_ImposterRatio = 1
-15
View File
@@ -1,15 +0,0 @@
ai_CompatibilityMode=crysis2
ai_BurstWhileMovingDestinationRange=9999.0
g_telemetryConfig=SP
net_inactivitytimeout=3600
net_inactivitytimeoutDevmode=3600
pl_movement.nonCombat_heavy_weapon_speed_scale=1.0
-- BLM - Don't override game rules. The template project only has DummyRules.
-- Furthermore, multiplayer.cfg doesn't set sv_gamerules, so the inconsistency
-- is likely to create bugs.
--sv_gamerules=SinglePlayer
ca_StreamCHR=1
-24
View File
@@ -1,24 +0,0 @@
r_UseZPass = 1
r_GeomInstancing = 1
e_Fog = 1
e_Clouds = 1
e_Decals = 1
e_TerrainDetailMaterials = 1
e_Dissolve = 1
e_TerrainAo = 1
r_WaterReflections = 1
e_Shadows = 1
e_VegetationBending = 1
r_PostProcessEffects = 1
r_Flares = 1
r_Beams = 1
r_Glow = 1
r_DetailTextures = 1
r_refraction = 1
r_sunshafts = 1
-24
View File
@@ -1,24 +0,0 @@
r_UseZPass = 0
r_GeomInstancing = 0
e_Fog = 0
e_Clouds = 0
e_Decals = 0
e_TerrainDetailMaterials = 0
e_Dissolve = 0
e_TerrainAo = 0
r_WaterReflections = 0
e_Shadows = 0
e_VegetationBending = 0
r_PostProcessEffects = 0
r_Flares = 0
r_Beams = 0
r_Glow = 0
r_DetailTextures = 0
r_refraction = 0
r_sunshafts = 0
@@ -1,76 +1,8 @@
sys_spec_Full=2
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=0
-- Disable gmem for this device because it causes a crash
r_EnableGMEMPath=0
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
sys_job_system_max_worker=2
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
e_recursion=1
e_CheckOcclusion=1
r_Fur=0
az_Asset_EnableAsyncMeshLoading=0
------------------------
-- Misc. memory buffers
------------------------
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=1024
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=33554432
ca_StreamCHR=1
------------------------
-- sys_spec_objectdetail
------------------------
e_Dissolve=2
e_LodRatio=5
e_ViewDistRatioDetail=19
e_ViewDistRatioVegetation=21
------------------------
-- sys_spec_postprocessing
------------------------
r_HDRBloom=0
r_SunShafts=0
r_ToneMapTechnique=3
r_ToneMapExposureType=1
r_ColorSpace=2
------------------------
-- sys_spec_shading
------------------------
r_VisAreaClipLightsPerPixel=0
------------------------
-- sys_spec_textureresolution
------------------------
r_TexturesstreamingMinUsableMips=7
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
@@ -1,65 +1,7 @@
sys_spec_Full=3
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=0
-- Enable framebufferfetch(256bpp) or pls if applicable
r_EnableGMEMPath=2
-- Skip the native upscale as a second upscale already occurs
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
sys_job_system_max_worker=2
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
e_CheckOcclusion=1
r_Fur=0
az_Asset_EnableAsyncMeshLoading=0
------------------------
-- Misc. memory buffers
------------------------
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=1024
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=33554432
ca_StreamCHR=1
------------------------
-- sys_spec_objectdetail
------------------------
e_Dissolve=2
e_LodRatio=5
e_ViewDistRatioDetail=19
------------------------
-- sys_spec_shading
------------------------
r_VisAreaClipLightsPerPixel=0
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
r_ClearGMEMGBuffer=1
-- Sort ligths since we have limited space in the shadowmap pool texture
r_DeferredShadingSortLights = 3
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
@@ -1,61 +1,8 @@
sys_spec_Full=3
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=0
-- Disabling gmem for this configuration
r_EnableGMEMPath=0
-- Skip the native upscale as a second upscale already occurs
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
sys_job_system_max_worker=2
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
e_CheckOcclusion=1
r_Fur=0
az_Asset_EnableAsyncMeshLoading=0
------------------------
-- Misc. memory buffers
------------------------
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=1024
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=33554432
ca_StreamCHR=1
------------------------
-- sys_spec_objectdetail
------------------------
e_Dissolve=2
e_LodRatio=5
e_ViewDistRatioDetail=19
------------------------
-- sys_spec_shading
------------------------
r_VisAreaClipLightsPerPixel=0
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
-69
View File
@@ -1,76 +1,7 @@
sys_spec_Full=1
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=0
-- Enable framebufferfetch(256bpp) or pls if applicable
r_EnableGMEMPath=1
-- Skip the native upscale as a second upscale already occurs
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
sys_job_system_max_worker=2
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
e_recursion=0
e_CheckOcclusion=1
r_Fur=0
-- Water occlusion queries crash in some OpenGL ES 3.0 devices
e_HwOcclusionCullingWater = 0
az_Asset_EnableAsyncMeshLoading=0
------------------------
-- Misc. memory buffers
------------------------
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=1024
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=33554432
ca_StreamCHR=1
------------------------
-- sys_spec_objectdetail
------------------------
e_Dissolve=2
e_LodRatio=5
e_ViewDistRatioDetail=19
------------------------
-- sys_spec_shading
------------------------
r_VisAreaClipLightsPerPixel=0
------------------------
-- sys_spec_textureresolution
------------------------
r_TexturesstreamingMinUsableMips=6
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
-- Sort ligths since we have limited space in the shadowmap pool texture
r_DeferredShadingSortLights = 3
r_ClearGMEMGBuffer=1
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
@@ -1,81 +1,7 @@
sys_spec_Full=2
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=0
-- Enable framebufferfetch(256bpp) or pls if applicable
r_EnableGMEMPath=1
-- Skip the native upscale as a second upscale already occurs
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
sys_job_system_max_worker=2
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
-- This allows the generation of reflections for the ocean water. Without it, the water looks really dark.
e_recursion=1
e_CheckOcclusion=1
r_Fur=0
az_Asset_EnableAsyncMeshLoading=0
------------------------
-- Misc. memory buffers
------------------------
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=1024
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=33554432
ca_StreamCHR=1
------------------------
-- sys_spec_objectdetail
------------------------
e_Dissolve=2
e_LodRatio=5
e_ViewDistRatioDetail=19
e_ViewDistRatioVegetation=21
------------------------
-- sys_spec_postprocessing
------------------------
r_HDRBloom=0
r_SunShafts=0
r_ToneMapExposureType=1
r_ColorSpace=2
------------------------
-- sys_spec_shading
------------------------
r_VisAreaClipLightsPerPixel=0
------------------------
-- sys_spec_textureresolution
------------------------
r_TexturesstreamingMinUsableMips=7
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
r_ClearGMEMGBuffer=1
-- Sort ligths since we have limited space in the shadowmap pool texture
r_DeferredShadingSortLights = 3
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
@@ -1,60 +1,5 @@
sys_spec_Full=4
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=0
-- Enable framebufferfetch(256bpp) or pls if applicable
r_EnableGMEMPath=1
-- Skip the native upscale as a second upscale already occurs
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
sys_job_system_max_worker=2
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
e_CheckOcclusion=1
r_Fur=0
az_Asset_EnableAsyncMeshLoading=0
------------------------
-- Misc. memory buffers
------------------------
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=1024
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=33554432
ca_StreamCHR=1
------------------------
-- sys_spec_objectdetail
------------------------
e_Dissolve=2
e_LodRatio=5
e_ViewDistRatioDetail=19
------------------------
-- sys_spec_shading
------------------------
r_VisAreaClipLightsPerPixel=0
r_ClearGMEMGBuffer=1
-- Sort ligths since we have limited space in the shadowmap pool texture
r_DeferredShadingSortLights = 3
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
-90
View File
@@ -1,100 +1,10 @@
sys_spec_Full=3
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=1
-- Enable framebufferfetch or pls if applicable
r_EnableGMEMPath=1
-- Skip the native upscale as a second upscale occurs on Metal Present
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
------------------------
-- Job System
------------------------
sys_job_system_enable=0
sys_job_system_max_worker=1
------------------------
-- Streaming
------------------------
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
------------------------
-- General Rendering
------------------------
r_Flush=0
-- Enabling this will clear the GMEM buffer before the z-pass
r_ClearGMEMGBuffer=2
r_Fur=0
------------------------
-- VisArea / Portals
------------------------
e_PortalsBlend=0
r_GMEMVisAreasBlendWeight=0.5
------------------------
-- Misc. memory buffers
------------------------
e_AutoPrecacheCgf=2
e_AutoPrecacheTerrainAndProcVeget=1
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=2048
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=32
ca_StreamCHR=1
------------------------
-- sys_spec_water
------------------------
e_WaterOcean=2
e_WaterVolumes=2
e_WaterOceanBottom=0
------------------------
-- batching
------------------------
r_Batching = 1
r_BatchType = 0
------------------------
-- geom instancing
------------------------
r_GeomInstancing=1
r_GeomInstancingThreshold=5
------------------------
-- Upscaling
------------------------
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
r_UpscalingQuality=1
------------------------
-- Geometry Cache
------------------------
e_GeomCaches=0
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
-- Sort ligths since we have limited space in the shadowmap pool texture
r_DeferredShadingSortLights = 3
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
-93
View File
@@ -1,103 +1,10 @@
sys_spec_Full=1
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=1
-- Enable framebufferfetch or pls if applicable
r_EnableGMEMPath=1
-- Skip the native upscale as a second upscale occurs on Metal Present
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
------------------------
-- Job System
------------------------
sys_job_system_enable=0
sys_job_system_max_worker=1
------------------------
-- Streaming
------------------------
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
------------------------
-- General Rendering
------------------------
r_Flush=0
-- Enabling this will clear the GMEM buffer before the z-pass
r_ClearGMEMGBuffer=2
r_Fur=0
------------------------
-- VisArea / Portals
------------------------
e_PortalsBlend=0
r_GMEMVisAreasBlendWeight=0.5
------------------------
-- Misc. memory buffers
------------------------
e_AutoPrecacheCgf=2
e_AutoPrecacheTerrainAndProcVeget=1
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=1024
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=32
ca_StreamCHR=1
------------------------
-- sys_spec_water
------------------------
e_WaterOcean=2
e_WaterVolumes=2
e_WaterOceanBottom=0
------------------------
-- batching
------------------------
r_Batching = 1
r_BatchType = 0
------------------------
-- geom instancing
------------------------
r_GeomInstancing=1
r_GeomInstancingThreshold=5
------------------------
-- Upscaling
------------------------
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
r_UpscalingQuality=1
------------------------
-- Geometry Cache
------------------------
e_GeomCaches=0
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
-- Sort ligths since we have limited space in the shadowmap pool texture
r_DeferredShadingSortLights = 3
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
-91
View File
@@ -1,101 +1,10 @@
sys_spec_Full=2
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=1
-- Enable framebufferfetch or pls if applicable
r_EnableGMEMPath=1
-- Skip the native upscale as a second upscale occurs on Metal Present
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
------------------------
-- Job System
------------------------
sys_job_system_enable=0
sys_job_system_max_worker=1
------------------------
-- Streaming
------------------------
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
------------------------
-- General Rendering
------------------------
r_Flush=0
-- Enabling this will clear the GMEM buffer before the z-pass
r_ClearGMEMGBuffer=2
r_Fur=0
------------------------
-- VisArea / Portals
------------------------
e_PortalsBlend=0
r_GMEMVisAreasBlendWeight=0.5
------------------------
-- Misc. memory buffers
------------------------
e_AutoPrecacheCgf=2
e_AutoPrecacheTerrainAndProcVeget=1
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=1024
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=32
ca_StreamCHR=1
------------------------
-- sys_spec_water
------------------------
e_WaterOcean=2
e_WaterVolumes=2
e_WaterOceanBottom=0
------------------------
-- batching
------------------------
r_Batching = 1
r_BatchType = 0
------------------------
-- geom instancing
------------------------
r_GeomInstancing=1
r_GeomInstancingThreshold=5
------------------------
-- Upscaling
------------------------
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
r_UpscalingQuality=1
------------------------
-- Geometry Cache
------------------------
e_GeomCaches=0
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
-- Sort ligths since we have limited space in the shadowmap pool texture
r_DeferredShadingSortLights = 3
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
@@ -1,102 +1,10 @@
sys_spec_Full=4
-- Cap frame rate at 30fps
sys_maxfps=30
r_vsync=1
-- Enable framebufferfetch or pls if applicable
r_EnableGMEMPath=1
-- Skip the native upscale as a second upscale occurs on Metal Present
r_SkipNativeUpscale=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
------------------------
-- Job System
------------------------
sys_job_system_enable=0
sys_job_system_max_worker=1
------------------------
-- Streaming
------------------------
sys_streaming_in_blocks=1
sys_streaming_memory_budget=512
------------------------
-- General Rendering
------------------------
r_Flush=0
-- Enabling this will clear the GMEM buffer before the z-pass
r_ClearGMEMGBuffer=2
r_Fur=0
------------------------
-- VisArea / Portals
------------------------
e_PortalsBlend=0
r_GMEMVisAreasBlendWeight=0.5
------------------------
-- Misc. memory buffers
------------------------
e_AutoPrecacheCgf=2
e_AutoPrecacheTerrainAndProcVeget=1
e_GeomCacheBufferSize=0
e_CheckOcclusionQueueSize=512
e_CheckOcclusionOutputQueueSize=2048
------------------------
-- Animation
------------------------
ca_MemoryDefragPoolSize=32
ca_StreamCHR=1
------------------------
-- sys_spec_water
------------------------
e_WaterOcean=2
e_WaterVolumes=2
e_WaterOceanBottom=0
------------------------
-- batching
------------------------
r_Batching = 1
r_BatchType = 0
------------------------
-- geom instancing
------------------------
r_GeomInstancing=1
r_GeomInstancingThreshold=5
------------------------
-- Upscaling
------------------------
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
r_UpscalingQuality=1
------------------------
-- Geometry Cache
------------------------
e_GeomCaches=0
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
-- Sort ligths since we have limited space in the shadowmap pool texture
r_DeferredShadingSortLights = 3
--Use an optimized pixel format for the lighting rendertargets during the lighting pass.
r_DeferredShadingLBuffersFmt = 2
@@ -1,38 +0,0 @@
sys_spec_Full=7
r_ShadersMETAL=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
-- Skip the native upscale as a second upscale occurs on Metal Present
r_SkipNativeUpscale=1
------------------------
-- sys_spec_postprocessing
------------------------
r_SunShafts=1
------------------------
-- sys_spec_shading
------------------------
r_DeferredShadingTiled=0
r_RefractionPartialResolves=0
e_GI = 0
r_Fur=2
------------------------
-- Upscaling
------------------------
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
r_UpscalingQuality=1
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
@@ -1,37 +0,0 @@
sys_spec_Full=5
r_ShadersMETAL=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
-- Skip the native upscale as a second upscale occurs on Metal Present
r_SkipNativeUpscale=1
------------------------
-- sys_spec_postprocessing
------------------------
r_SunShafts=1
------------------------
-- sys_spec_shading
------------------------
r_DeferredShadingTiled=0
r_RefractionPartialResolves=0
e_GI=0
r_Fur=2
------------------------
-- Upscaling
------------------------
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
r_UpscalingQuality=1
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
@@ -1,37 +0,0 @@
sys_spec_Full=6
r_ShadersMETAL=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
-- Skip the native upscale as a second upscale occurs on Metal Present
r_SkipNativeUpscale=1
------------------------
-- sys_spec_postprocessing
------------------------
r_SunShafts=1
------------------------
-- sys_spec_shading
------------------------
r_DeferredShadingTiled=0
r_RefractionPartialResolves=0
e_GI = 0
r_Fur=2
------------------------
-- Upscaling
------------------------
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
r_UpscalingQuality=1
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
@@ -1,37 +0,0 @@
sys_spec_Full=8
r_ShadersMETAL=1
-- Default of 3 allocates all shaders (potentially >150 MB)
-- 1 is most memory efficient but definitely causes hitches when converting HLSL
-- shaders. Recommend 1 during dev, and 3 with optimized caches for release.
r_ShadersPreactivate=1
-- Skip the native upscale as a second upscale occurs on Metal Present
r_SkipNativeUpscale=1
------------------------
-- sys_spec_postprocessing
------------------------
r_SunShafts=1
------------------------
-- sys_spec_shading
------------------------
r_DeferredShadingTiled=0
r_RefractionPartialResolves=0
e_GI = 0
r_Fur=2
------------------------
-- Upscaling
------------------------
--0 point, 1 bilinear, 2 bicubic, 3 lanczos
r_UpscalingQuality=1
-- Due to performance issues with incremental cached shadow map updates, enable this to prevent us from culling every object in the world vs each cached shadow map each frame.
-- If no objects are present in the level this will eliminate the need to clear the massive cached textures each frame.
-- Set to 2 to allow distance-based updates along with script-based updates for the cached shadow maps
e_ShadowsCacheRequireManualUpdate = 2
-1
View File
@@ -1 +0,0 @@
sys_spec_Full = 7
-1
View File
@@ -1 +0,0 @@
sys_spec_Full = 5
-1
View File
@@ -1 +0,0 @@
sys_spec_Full = 6
@@ -1 +0,0 @@
sys_spec_Full = 8
-9
View File
@@ -1,12 +1,3 @@
profile=-1
profile_allthreads=1
i_forcefeedback=0
g_godmode=1
log_verbosity=-1
sys_pakLogInvalidFileAccess=1
e_StatoscopeDataGroups=fgmrtudlipny
e_StatoscopeFilenameUseBuildInfo=0
e_StatoscopeFilenameUseMap=1
e_StatoscopeMinFuncLengthMs=0.1
e_StatoscopeMaxNumFuncsPerFrame=60
e_StatoscopeScreenshotCapturePeriod=5
-26
View File
@@ -3,39 +3,13 @@
-----------------------------------------------
r_width = 960
r_height = 1080
r_backbufferWidth = 1920
r_backbufferHeight = 1080
-------------------------------------------
-- Set the system Spec (Medium)
-------------------------------------------
sys_spec = 2
-------------------------------------------
-- HMD related
-------------------------------------------
r_overrideDXGIoutput = 0
r_stereodevice = 100
r_stereomode = 1
r_stereooutput = 7
r_minimizeLatency = 1
hmd_low_persistence = 1
r_stereoScaleCoefficient = 1
-------------------------------------------
-- Set some video optimisations
-------------------------------------------
r_vsync = 0
r_MotionBlur = 0
r_ssdoHalfRes = 3
r_Refraction = 0
r_DeferredShadingTiled = 0
r_CBufferUseNativeDepth = 0
-------------------------------------------
-- Hide the hud
-------------------------------------------
--hud_hide = 1
-152
View File
@@ -48,22 +48,6 @@
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/perfhud_pc.xml" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{6C3531BB-4A37-515B-86F6-4FC3A9ABEF9F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/sketch_off.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{EA424FC8-20C9-51D3-A4DD-08DA8B7F7FB3}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/sketch_on.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{34B60E74-28FA-57C4-9A2E-77515A083AC5}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
@@ -432,110 +416,6 @@
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_full.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{8A877B20-8B7D-5F61-93C9-FD02CB856165}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_gameeffects.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{5D7C3B35-E171-5A4B-8C36-1D22B3F7636F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_objectdetail.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{8EAED4CA-6E4B-5F11-94E9-F4FB39E966C4}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_particles.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{437E9B76-BFC3-57AB-9993-9C249EEAEF97}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_physics.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{35B8614B-F080-5BE4-AD78-23F24E104C72}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_postprocessing.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{9CC310DD-0D00-555D-99A7-D339DF0E2A73}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_quality.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{2BD0EFEF-9DA5-5F48-B579-C500CA0D42AB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_shading.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{979A2D8D-79B9-57E8-9250-A981538FA893}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_shadows.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{90964883-E22A-5D57-86FC-86571AD213BE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_sound.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{89BEF8A4-AA05-5339-B4DE-C475541FD532}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_texture.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{15CBF6A7-1107-55A9-A173-2F7AD1329589}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_textureresolution.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{4CD3711E-09EE-5F91-8688-FB523F350C43}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_volumetriceffects.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{F316DFFF-ABA2-5145-A637-2BBA2C86E7A0}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/cvargroups/sys_spec_water.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{FD38C182-1AFC-514C-99E5-BB1AB60C4A31}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
@@ -616,38 +496,6 @@
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/spec/ios_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{B9622C57-85C2-5C68-AFB8-35AA0D65FEC7}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/spec/osx_metal_high.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{E79532D9-BE8F-5969-B672-A2E8030578B9}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/spec/osx_metal_low.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{4B05219C-0D19-5A04-B029-8417CE06A243}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/spec/osx_metal_medium.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{C0F09A4E-A77A-5FFF-B1ED-DDB37DED623C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
<Class name="unsigned int" field="subId" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
</Class>
<Class name="unsigned int" field="platformFlags" value="255" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
<Class name="AZStd::string" field="pathHint" value="config/spec/osx_metal_veryhigh.cfg" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
</Class>
<Class name="SeedInfo" field="element" version="2" type="{FACC3682-2ACA-4AA4-B85A-07AD276D18A0}">
<Class name="AssetId" field="assetId" version="1" type="{652ED536-3402-439B-AEBE-4A5DBC554085}">
<Class name="AZ::Uuid" field="guid" value="{B632E8B1-884A-5A65-BC01-D85F0FED1266}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
@@ -23,20 +23,20 @@ TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "tests")
class TestAtomEditorComponentsMain(object):
"""Holds tests for Atom components."""
@pytest.mark.test_case_id("C32078118") # Decal
@pytest.mark.test_case_id("C32078119") # DepthOfField
@pytest.mark.test_case_id("C32078120") # Directional Light
@pytest.mark.test_case_id("C32078121") # Exposure Control
@pytest.mark.test_case_id("C32078115") # Global Skylight (IBL)
@pytest.mark.test_case_id("C32078125") # Physical Sky
@pytest.mark.test_case_id("C32078127") # PostFX Layer
@pytest.mark.test_case_id("C32078131") # PostFX Radius Weight Modifier
@pytest.mark.test_case_id("C32078117") # Light
@pytest.mark.test_case_id("C36525660") # Display Mapper
def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform):
"""
Please review the hydra script run by this test for more specific test info.
Tests the following Atom components and verifies all "expected_lines" appear in Editor.log:
1. Display Mapper
2. Light
3. PostFX Radius Weight Modifier
4. PostFX Layer
5. Physical Sky
6. Global Skylight (IBL)
7. Exposure Control
8. Directional Light
9. DepthOfField
10. Decal
Tests the Atom components & verifies all "expected_lines" appear in Editor.log
"""
cfg_args = [level]
@@ -69,6 +69,18 @@ class TestAtomEditorComponentsMain(object):
"DepthOfField_test: Entity deleted: True",
"DepthOfField_test: UNDO entity deletion works: True",
"DepthOfField_test: REDO entity deletion works: True",
# Directional Light Component
"Directional Light Entity successfully created",
"Directional Light_test: Component added to the entity: True",
"Directional Light_test: Component removed after UNDO: True",
"Directional Light_test: Component added after REDO: True",
"Directional Light_test: Entered game mode: True",
"Directional Light_test: Exit game mode: True",
"Directional Light_test: Entity is hidden: True",
"Directional Light_test: Entity is shown: True",
"Directional Light_test: Entity deleted: True",
"Directional Light_test: UNDO entity deletion works: True",
"Directional Light_test: REDO entity deletion works: True",
# Exposure Control Component
"Exposure Control Entity successfully created",
"Exposure Control_test: Component added to the entity: True",
@@ -180,6 +192,7 @@ class TestAtomEditorComponentsMain(object):
cfg_args=cfg_args,
)
@pytest.mark.test_case_id("C34525095")
def test_AtomEditorComponents_LightComponent(
self, request, editor, workspace, project, launcher_platform, level):
"""
@@ -266,6 +279,15 @@ class TestMaterialEditorBasicTests(object):
request.addfinalizer(teardown)
@pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
@pytest.mark.test_case_id("C34448113") # Creating a New Asset.
@pytest.mark.test_case_id("C34448114") # Opening an Existing Asset.
@pytest.mark.test_case_id("C34448115") # Closing Selected Material.
@pytest.mark.test_case_id("C34448116") # Closing All Materials.
@pytest.mark.test_case_id("C34448117") # Closing all but Selected Material.
@pytest.mark.test_case_id("C34448118") # Saving Material.
@pytest.mark.test_case_id("C34448119") # Saving as a New Material.
@pytest.mark.test_case_id("C34448120") # Saving as a Child Material.
@pytest.mark.test_case_id("C34448121") # Saving all Open Materials.
def test_MaterialEditorBasicTests(
self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name):
@@ -73,6 +73,7 @@ def create_screenshots_archive(screenshot_path):
class TestAllComponentsIndepthTests(object):
@pytest.mark.parametrize("screenshot_name", ["AtomBasicLevelSetup.ppm"])
@pytest.mark.test_case_id("C34603773")
def test_BasicLevelSetup_SetsUpLevel(
self, request, editor, workspace, project, launcher_platform, level, screenshot_name):
"""
@@ -115,6 +116,7 @@ class TestAllComponentsIndepthTests(object):
create_screenshots_archive(screenshot_directory)
@pytest.mark.test_case_id("C34525095")
def test_LightComponent_ScreenshotMatchesGoldenImage(
self, request, editor, workspace, project, launcher_platform, level):
"""
@@ -225,6 +227,8 @@ class TestMaterialEditor(object):
pytest.param("-rhi=Vulkan", ["Registering vulkan RHI"])
])
@pytest.mark.parametrize("exe_file_name", ["MaterialEditor"])
@pytest.mark.test_case_id("C30973986") # Material Editor Launching in Dx12
@pytest.mark.test_case_id("C30973987") # Material Editor Launching in Vulkan
def test_MaterialEditorLaunch_AllRHIOptionsSucceed(
self, request, workspace, project, launcher_platform, generic_launcher, exe_file_name, cfg_args,
expected_lines):
@@ -23,6 +23,7 @@ class TestAutomation(EditorTestSuite):
# Remove -autotest_mode from global_extra_cmdline_args since we need rendering for these tests.
global_extra_cmdline_args = ["-BatchMode"] # Default is ["-BatchMode", "-autotest_mode"]
@pytest.mark.test_case_id("C34603773")
class AtomGPU_BasicLevelSetup_SetsUpLevel(EditorSharedTest):
use_null_renderer = False # Default is True
screenshot_name = "AtomBasicLevelSetup.ppm"
@@ -63,5 +63,9 @@ class TestAutomation(EditorTestSuite):
class AtomEditorComponents_MaterialAdded(EditorSharedTest):
from Atom.tests import hydra_AtomEditorComponents_MaterialAdded as test_module
@pytest.mark.test_case_id("C32078127")
class AtomEditorComponents_PostFXLayerAdded(EditorSharedTest):
from Atom.tests import hydra_AtomEditorComponents_PostFXLayerAdded as test_module
class ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges(EditorSharedTest):
from Atom.tests import hydra_ShaderAssetBuilder_RecompilesShaderAsChainOfDependenciesChanges as test_module
@@ -30,6 +30,7 @@ class TestAtomEditorComponentsSandbox(object):
class TestAtomEditorComponentsMain(object):
"""Holds tests for Atom components."""
@pytest.mark.test_case_id("C32078128")
def test_AtomEditorComponents_ReflectionProbeAddedToEntity(
self, request, editor, level, workspace, project, launcher_platform):
"""
@@ -113,7 +113,6 @@ def create_basic_atom_level(level_name):
general.close_pane("Error Log")
general.idle_wait(1.0)
general.run_console("r_displayInfo=0")
general.run_console("r_antialiasingmode=0")
general.idle_wait(1.0)
# Delete all existing entities & create default_level entity
@@ -0,0 +1,156 @@
"""
Copyright (c) Contributors to the Open 3D Engine Project.
For complete copyright and license terms please see the LICENSE at the root of this distribution.
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
class Tests:
creation_undo = (
"UNDO Entity creation success",
"UNDO Entity creation failed")
creation_redo = (
"REDO Entity creation success",
"REDO Entity creation failed")
postfx_layer_entity_creation = (
"PostFX Layer Entity successfully created",
"PostFX Layer Entity failed to be created")
postfx_layer_component_added = (
"Entity has a PostFX Layer component",
"Entity failed to find PostFX Layer component")
enter_game_mode = (
"Entered game mode",
"Failed to enter game mode")
exit_game_mode = (
"Exited game mode",
"Couldn't exit game mode")
is_visible = (
"Entity is visible",
"Entity was not visible")
is_hidden = (
"Entity is hidden",
"Entity was not hidden")
entity_deleted = (
"Entity deleted",
"Entity was not deleted")
deletion_undo = (
"UNDO deletion success",
"UNDO deletion failed")
deletion_redo = (
"REDO deletion success",
"REDO deletion failed")
def AtomEditorComponents_postfx_layer_AddedToEntity():
"""
Summary:
Tests the PostFX Layer component can be added to an entity and has the expected functionality.
Test setup:
- Wait for Editor idle loop.
- Open the "Base" level.
Expected Behavior:
The component can be added, used in game mode, hidden/shown, deleted, and has accurate required components.
Creation and deletion undo/redo should also work.
Test Steps:
1) Create a PostFX Layer entity with no components.
2) Add a PostFX Layer component to PostFX Layer entity.
3) UNDO the entity creation and component addition.
4) REDO the entity creation and component addition.
5) Enter/Exit game mode.
6) Test IsHidden.
7) Test IsVisible.
8) Delete PostFX Layer entity.
9) UNDO deletion.
10) REDO deletion.
11) Look for errors.
:return: None
"""
import os
import azlmbr.legacy.general as general
from editor_python_test_tools.editor_entity_utils import EditorEntity
from editor_python_test_tools.utils import Report, Tracer, TestHelper
with Tracer() as error_tracer:
# Test setup begins.
# Setup: Wait for Editor idle loop before executing Python hydra scripts then open "Base" level.
TestHelper.init_idle()
TestHelper.open_level("", "Base")
# Test steps begin.
# 1. Create a PostFX Layer entity with no components.
postfx_layer_name = "PostFX Layer"
postfx_layer_entity = EditorEntity.create_editor_entity(postfx_layer_name)
Report.critical_result(Tests.postfx_layer_entity_creation, postfx_layer_entity.exists())
# 2. Add a PostFX Layer component to PostFX Layer entity.
postfx_layer_component = postfx_layer_entity.add_component(postfx_layer_name)
Report.critical_result(Tests.postfx_layer_component_added, postfx_layer_entity.has_component(postfx_layer_name))
# 3. UNDO the entity creation and component addition.
# -> UNDO component addition.
general.undo()
# -> UNDO naming entity.
general.undo()
# -> UNDO selecting entity.
general.undo()
# -> UNDO entity creation.
general.undo()
general.idle_wait_frames(1)
Report.result(Tests.creation_undo, not postfx_layer_entity.exists())
# 4. REDO the entity creation and component addition.
# -> REDO entity creation.
general.redo()
# -> REDO selecting entity.
general.redo()
# -> REDO naming entity.
general.redo()
# -> REDO component addition.
general.redo()
general.idle_wait_frames(1)
Report.result(Tests.creation_redo, postfx_layer_entity.exists())
# 5. Enter/Exit game mode.
TestHelper.enter_game_mode(Tests.enter_game_mode)
general.idle_wait_frames(1)
TestHelper.exit_game_mode(Tests.exit_game_mode)
# 6. Test IsHidden.
postfx_layer_entity.set_visibility_state(False)
Report.result(Tests.is_hidden, postfx_layer_entity.is_hidden() is True)
# 7. Test IsVisible.
postfx_layer_entity.set_visibility_state(True)
general.idle_wait_frames(1)
Report.result(Tests.is_visible, postfx_layer_entity.is_visible() is True)
# 8. Delete PostFX Layer entity.
postfx_layer_entity.delete()
Report.result(Tests.entity_deleted, not postfx_layer_entity.exists())
# 9. UNDO deletion.
general.undo()
Report.result(Tests.deletion_undo, postfx_layer_entity.exists())
# 10. REDO deletion.
general.redo()
Report.result(Tests.deletion_redo, not postfx_layer_entity.exists())
# 11. Look for errors or asserts.
TestHelper.wait_for_condition(lambda: error_tracer.has_errors or error_tracer.has_asserts, 1.0)
for error_info in error_tracer.errors:
Report.info(f"Error: {error_info.filename} {error_info.function} | {error_info.message}")
for assert_info in error_tracer.asserts:
Report.info(f"Assert: {assert_info.filename} {assert_info.function} | {assert_info.message}")
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(AtomEditorComponents_postfx_layer_AddedToEntity)
@@ -66,7 +66,6 @@ def run():
general.close_pane("Error Log")
general.idle_wait(1.0)
general.run_console("r_displayInfo=0")
general.run_console("r_antialiasingmode=0")
general.idle_wait(1.0)
return True
@@ -82,7 +82,6 @@ def run():
general.close_pane("Error Log")
general.idle_wait(1.0)
general.run_console("r_displayInfo=0")
general.run_console("r_antialiasingmode=0")
general.idle_wait(1.0)
return True
@@ -149,7 +149,6 @@ class TestHelper:
general.idle_wait(1.0)
general.idle_wait(1.0)
general.run_console("r_displayInfo=0")
general.run_console("r_antialiasingmode=0")
general.idle_wait(1.0)
@@ -52,9 +52,6 @@ def Joints_BallLeadFollowerCollide():
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
import azlmbr.legacy.general as general
import azlmbr.bus
from JointsHelper import JointEntityCollisionAware
# Helper Entity class - self.collided flag is set when instance receives collision event.
@@ -75,17 +72,12 @@ def Joints_BallLeadFollowerCollide():
lead = Entity("lead")
follower = Entity("follower")
# 4) Wait for several seconds
general.idle_wait(2.0) # wait for lead and follower to move
# 4) Wait for collision between lead and follower or timeout
Report.critical_result(Tests.check_collision_happened, helper.wait_for_condition(lambda: lead.collided and follower.collided, 10.0))
# 5) Check to see if lead and follower behaved as expected
Report.critical_result(Tests.check_collision_happened, lead.collided and follower.collided)
# 6) Exit Game Mode
# 5) Exit Game Mode
helper.exit_game_mode(Tests.exit_game_mode)
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(Joints_BallLeadFollowerCollide)
@@ -52,11 +52,13 @@ def Joints_HingeNoLimitsConstrained():
"""
import os
import sys
import math
from editor_python_test_tools.utils import Report
from editor_python_test_tools.utils import TestHelper as helper
import azlmbr.legacy.general as general
import azlmbr.bus
import azlmbr.math as azmath
import JointsHelper
from JointsHelper import JointEntity
@@ -84,28 +86,65 @@ def Joints_HingeNoLimitsConstrained():
Report.info_vector3(lead.position, "lead initial position:")
Report.info_vector3(follower.position, "follower initial position:")
leadInitialPosition = lead.position
followerInitialPosition = follower.position
# 4) Wait for several seconds
general.idle_wait(4.0) # wait for lead and follower to move
# 4) Wait for the follower to move above and over the lead or Timeout
normalizedStartPos = JointsHelper.getRelativeVector(lead.position, follower.position)
normalizedStartPos = normalizedStartPos.GetNormalizedSafe()
class WaitCondition:
ANGLE_CHECKPOINT_1 = math.radians(90)
ANGLE_CHECKPOINT_2 = math.radians(200)
angleAchieved = 0.0
followerMovedAbove90Deg = False #this is expected to be true to pass the test
followerMovedAbove200Deg = False #this is expected to be true to pass the test
jointNormal = azmath.Vector3(0.0, -1.0, 0.0) # the joint rotates around the y axis
def checkConditionMet(self):
#calculate the current follower-lead vector
normalVec = JointsHelper.getRelativeVector(lead.position, follower.position)
normalVec = normalVec.GetNormalizedSafe()
#triple product and get the angle
tripleProduct = normalizedStartPos.dot(normalVec.cross(self.jointNormal))
currentAngle = math.acos(normalizedStartPos.Dot(normalVec))
if tripleProduct < 0:
currentAngle = (2*math.pi) - currentAngle
#if the angle is now less then last time, it is no longer rising, so end the test.
if currentAngle < self.angleAchieved:
return True
#once we're passed the final check point, end the test
if currentAngle > self.ANGLE_CHECKPOINT_2:
self.followerMovedAbove200Deg = True
return True
self.angleAchieved = currentAngle
self.followerMovedAbove90Deg = currentAngle > self.ANGLE_CHECKPOINT_1
return False
def isFollowerPositionCorrect(self):
return self.followerMovedAbove90Deg and self.followerMovedAbove200Deg
waitCondition = WaitCondition()
MAX_WAIT_TIME = 10.0 #seconds
conditionMet = helper.wait_for_condition(lambda: waitCondition.checkConditionMet(), MAX_WAIT_TIME)
# 5) Check to see if lead and follower behaved as expected
Report.info_vector3(lead.position, "lead position after 1 second:")
Report.info_vector3(follower.position, "follower position after 1 second:")
Report.info_vector3(lead.position, "lead position after test run:")
Report.info_vector3(follower.position, "follower position after test run:")
leadPositionDelta = lead.position.Subtract(leadInitialPosition)
leadRemainedStill = JointsHelper.vector3SmallerThanScalar(leadPositionDelta, FLOAT_EPSILON)
Report.critical_result(Tests.check_lead_position, leadRemainedStill)
followerSwingedOverLead = (follower.position.x < leadInitialPosition.x and
follower.position.z > leadInitialPosition.z)
Report.critical_result(Tests.check_follower_position, followerSwingedOverLead)
Report.critical_result(Tests.check_follower_position, conditionMet and waitCondition.isFollowerPositionCorrect())
# 6) Exit Game Mode
helper.exit_game_mode(Tests.exit_game_mode)
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(Joints_HingeNoLimitsConstrained)
@@ -187,7 +187,3 @@ def prepare_for_screenshot_compare(remote_console_instance):
"""
wait_for(lambda: _retry_command(remote_console_instance, 'r_displayinfo 0',
'$3r_DisplayInfo = $60 $5[DUMPTODISK, RESTRICTEDMODE]$4'))
wait_for(lambda: _retry_command(remote_console_instance, 'r_antialiasingmode 0',
'$3r_AntialiasingMode = $60 $5[]$4'))
wait_for(lambda: _retry_command(remote_console_instance, 'e_WaterOcean 0',
'$3e_WaterOcean = $60 $5[]$4'))
@@ -0,0 +1,101 @@
"""
Copyright (c) Contributors to the Open 3D Engine Project.
For complete copyright and license terms please see the LICENSE at the root of this distribution.
SPDX-License-Identifier: Apache-2.0 OR MIT
"""
class Tests:
load_level = (
"Level loaded successfully",
"Failed to load the level"
)
create_entity = (
"Parent entity created successfully",
"Failed to create a parent entity"
)
set_entity_name = (
"Entity name set successfully",
"Failed to set entity name"
)
delete_entity = (
"Parent Entity deleted successfully",
"Failed to delete parent entity"
)
create_child_entity = (
"Child entity created successfully",
"Failed to create a child entity"
)
delete_child_entity = (
"Child entity deleted successfully",
"Failed to delete child entity"
)
add_mesh_component = (
"Mesh component added successfully",
"Failed to add mesh component"
)
found_component_typeId = (
"Found component typeId",
"Unable to find component TypeId"
)
remove_mesh_component = (
"Mesh component removed successfully",
"Failed to remove mesh component"
)
def BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD():
"""
Performing basic test in editor
01. Load exiting level
02. create parent entity and set name
03. create child entity and set a name
04. delete child entity
05. add mesh component to parent entity
06. delete parent entity
"""
from editor_python_test_tools.utils import Report
from editor_python_test_tools.editor_entity_utils import EditorEntity
import azlmbr.bus as bus
import azlmbr.editor as editor
import azlmbr.entity as entity
import azlmbr.legacy.general as general
import azlmbr.object
# 01. load an existing level
test_level = 'Simple'
general.open_level_no_prompt(test_level)
Report.result(Tests.load_level, general.get_current_level_name() == test_level)
# 02. create parent entity and set name
# Delete any exiting entity and Create a new Entity at the root level
search_filter = azlmbr.entity.SearchFilter()
all_entities = entity.SearchBus(azlmbr.bus.Broadcast, "SearchEntities", search_filter)
editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntities", all_entities)
parent_entity = EditorEntity.create_editor_entity("Parent_1")
Report.result(Tests.create_entity, parent_entity.exists())
# 03. Create child Entity to above created parent entity and set a name
child_1_entity = EditorEntity.create_editor_entity("Child_1", parent_entity.id )
Report.result(Tests.create_child_entity, child_1_entity.exists())
# 04. delete_Child_entity
child_1_entity.delete()
Report.result(Tests.delete_child_entity, not child_1_entity.exists())
# 05. add mesh component to parent entity
parent_entity.add_component("Mesh")
Report.result(Tests.add_mesh_component, parent_entity.has_component("Mesh"))
# 06. delete parent entity
parent_entity.delete()
Report.result(Tests.delete_entity, not parent_entity.exists())
if __name__ == "__main__":
from editor_python_test_tools.utils import Report
Report.start_test(BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD)
@@ -73,3 +73,7 @@ class TestAutomationAutoTestMode(EditorTestSuite):
@pytest.mark.skip(reason="Times out due to dialogs failing to dismiss: LYN-4208")
class test_Menus_FileMenuOptions_Work(EditorSharedTest):
from .EditorScripts import Menus_FileMenuOptions as test_module
class test_BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD(EditorSharedTest):
from .EditorScripts import BasicEditorWorkflows_ExistingLevel_EntityComponentCRUD as test_module
@@ -55,32 +55,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_
## LandscapeCanvas ##
ly_add_pytest(
NAME AutomatedTesting::LandscapeCanvasTests_Main
TEST_SERIAL
TEST_SUITE main
PATH ${CMAKE_CURRENT_LIST_DIR}/landscape_canvas/TestSuite_Main.py
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
Legacy::Editor
AutomatedTesting.Assets
COMPONENT
LargeWorlds
)
ly_add_pytest(
NAME AutomatedTesting::LandscapeCanvasTests_Periodic
TEST_SERIAL
TEST_SUITE periodic
PATH ${CMAKE_CURRENT_LIST_DIR}/landscape_canvas/TestSuite_Periodic.py
RUNTIME_DEPENDENCIES
AZ::AssetProcessor
Legacy::Editor
AutomatedTesting.Assets
COMPONENT
LargeWorlds
)
ly_add_pytest(
NAME AutomatedTesting::LandscapeCanvasTests_Main_Optimized
TEST_SERIAL
@@ -12,7 +12,6 @@ import ly_test_tools.environment.file_system as file_system
from ly_test_tools.o3de.editor_test import EditorSingleTest, EditorSharedTest, EditorParallelTest, EditorTestSuite
@pytest.mark.xfail(reason="Optimized tests are experimental, we will enable xfail and monitor them temporarily.")
@pytest.mark.SUITE_periodic
@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
@pytest.mark.parametrize("project", ["AutomatedTesting"])
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:817bd8dd22e185136418b60fba5b3552993687515d3d5ae96791f2c3be907b92
size 7233
oid sha256:60276c07b45a734e4f71d695278167ea61e884f8b513906168c9642078ad5954
size 6045
@@ -10,13 +10,6 @@
"Gems/DevTextures"
]
},
"PBSreferenceMaterials":
{
"SourcePaths":
[
"Gems/PBSreferenceMaterials"
]
},
"PhysicsEntities":
{
"SourcePaths":
+1 -1
View File
@@ -279,7 +279,7 @@ void CFolderTreeCtrl::LoadTreeRec(const QString& currentFolder)
void CFolderTreeCtrl::AddItem(const QString& path)
{
AZ::IO::FixedMaxPath folder{ AZ::IO::PathView(path.toUtf8().constData()) };
AZ::IO::FixedMaxPath fileNameWithoutExtension = folder.Extension();
AZ::IO::FixedMaxPath fileNameWithoutExtension = folder.Stem();
folder = folder.ParentPath();
auto regex = QRegExp(m_fileNameSpec, Qt::CaseInsensitive, QRegExp::Wildcard);
+2 -2
View File
@@ -1273,7 +1273,7 @@ bool CCryEditDoc::SaveLevel(const QString& filename)
if (savedEntities)
{
AZ_PROFILE_SCOPE(AzToolsFramework, "CCryEditDoc::SaveLevel Updated PakFile levelEntities.editor_xml");
pakFile.UpdateFile("LevelEntities.editor_xml", entitySaveBuffer.begin(), static_cast<int>(entitySaveBuffer.size()));
pakFile.UpdateFile("levelentities.editor_xml", entitySaveBuffer.begin(), static_cast<int>(entitySaveBuffer.size()));
// Save XML archive to pak file.
bool bSaved = xmlAr.SaveToPak(Path::GetPath(tempSaveFile), pakFile);
@@ -1501,7 +1501,7 @@ bool CCryEditDoc::LoadEntitiesFromLevel(const QString& levelPakFile)
bool pakOpened = pakSystem->OpenPack(levelPakFile.toUtf8().data());
if (pakOpened)
{
const QString entityFilename = Path::GetPath(levelPakFile) + "LevelEntities.editor_xml";
const QString entityFilename = Path::GetPath(levelPakFile) + "levelentities.editor_xml";
CCryFile entitiesFile;
if (entitiesFile.Open(entityFilename.toUtf8().data(), "rt"))
+2 -2
View File
@@ -119,7 +119,7 @@ bool CXmlArchive::SaveToPak([[maybe_unused]] const QString& levelPath, CPakFile&
_smart_ptr<IXmlStringData> pXmlStrData = root->getXMLData(5000000);
// Save xml file.
QString xmlFilename = "Level.editor_xml";
QString xmlFilename = "level.editor_xml";
pakFile.UpdateFile(xmlFilename.toUtf8().data(), (void*)pXmlStrData->GetString(), static_cast<int>(pXmlStrData->GetStringLength()));
if (pakFile.GetArchive())
@@ -134,7 +134,7 @@ bool CXmlArchive::SaveToPak([[maybe_unused]] const QString& levelPath, CPakFile&
//////////////////////////////////////////////////////////////////////////
bool CXmlArchive::LoadFromPak(const QString& levelPath, CPakFile& pakFile)
{
QString xmlFilename = QDir(levelPath).absoluteFilePath("Level.editor_xml");
QString xmlFilename = QDir(levelPath).absoluteFilePath("level.editor_xml");
root = XmlHelpers::LoadXmlFromFile(xmlFilename.toUtf8().data());
if (!root)
{
+4 -2
View File
@@ -77,9 +77,11 @@ namespace AZ
public:
/**
* Allocator used by the EBus.
* The default setting is AZStd::allocator, which uses AZ::SystemAllocator.
* The default setting is Internal EBusEnvironmentAllocator
* EBus code stores their Context instances in static memory
* Therfore the configured allocator must last as long as the EBus in a module
*/
using AllocatorType = AZStd::allocator;
using AllocatorType = AZ::Internal::EBusEnvironmentAllocator;
/**
* Defines how many handlers can connect to an address on the EBus
@@ -34,7 +34,9 @@ namespace AZ
friend IAllocator;
friend class AllocatorBase;
friend class Debug::AllocationRecords;
friend class AZ::Internal::EnvironmentVariableHolder<AllocatorManager>;
template<typename T, typename... Args> friend constexpr auto AZStd::construct_at(T*, Args&&... args)
->AZStd::enable_if_t<AZStd::is_void_v<AZStd::void_t<decltype(new (AZStd::declval<void*>()) T(AZStd::forward<Args>(args)...))>>, T*>;
template<typename T> constexpr friend void AZStd::destroy_at(T*);
public:
typedef AZStd::function<void (IAllocator* allocator, size_t /*byteSize*/, size_t /*alignment*/, int/* flags*/, const char* /*name*/, const char* /*fileName*/, int lineNum /*=0*/)> OutOfMemoryCBType;
@@ -251,16 +251,15 @@ namespace AZ
class EnvironmentVariableHolder
: public EnvironmentVariableHolderBase
{
void ConstructImpl(const AZStd::true_type& /* AZStd::has_trivial_constructor<T> */)
{
memset(&m_value, 0, sizeof(T));
}
template<class... Args>
void ConstructImpl(const AZStd::false_type& /* AZStd::has_trivial_constructor<T> */, Args&&... args)
void ConstructImpl(Args&&... args)
{
// Construction of non-trivial types is left up to the type's constructor.
new(&m_value) T(AZStd::forward<Args>(args)...);
// Use std::launder to ensure that the compiler treats the T* reinterpret_cast as a new object
#if __cpp_lib_launder
AZStd::construct_at(std::launder(reinterpret_cast<T*>(&m_value)), AZStd::forward<Args>(args)...);
#else
AZStd::construct_at(reinterpret_cast<T*>(&m_value), AZStd::forward<Args>(args)...);
#endif
}
static void DestructDispatchNoLock(EnvironmentVariableHolderBase *base, DestroyTarget selfDestruct)
{
@@ -274,10 +273,12 @@ namespace AZ
AZ_Assert(self->m_isConstructed, "Variable is not constructed. Please check your logic and guard if needed!");
self->m_isConstructed = false;
self->m_moduleOwner = nullptr;
if constexpr(!AZStd::is_trivially_destructible_v<T>)
{
reinterpret_cast<T*>(&self->m_value)->~T();
}
// Use std::launder to ensure that the compiler treats the T* reinterpret_cast as a new object
#if __cpp_lib_launder
AZStd::destroy_at(std::launder(reinterpret_cast<T*>(&self->m_value)));
#else
AZStd::destroy_at(reinterpret_cast<T*>(&self->m_value));
#endif
}
public:
EnvironmentVariableHolder(u32 guid, bool isOwnershipTransfer, Environment::AllocatorInterface* allocator)
@@ -303,24 +304,13 @@ namespace AZ
UnregisterAndDestroy(DestructDispatchNoLock, moduleRelease);
}
void Construct()
{
AZStd::lock_guard<AZStd::spin_mutex> lock(m_mutex);
if (!m_isConstructed)
{
ConstructImpl(AZStd::is_trivially_constructible<T>{});
m_isConstructed = true;
m_moduleOwner = Environment::GetModuleId();
}
}
template <class... Args>
void Construct(Args&&... args)
{
AZStd::lock_guard<AZStd::spin_mutex> lock(m_mutex);
if (!m_isConstructed)
{
ConstructImpl(typename AZStd::false_type(), AZStd::forward<Args>(args)...);
ConstructImpl(AZStd::forward<Args>(args)...);
m_isConstructed = true;
m_moduleOwner = Environment::GetModuleId();
}
@@ -333,7 +323,7 @@ namespace AZ
}
// variable storage
typename AZStd::aligned_storage<sizeof(T), AZStd::alignment_of<T>::value>::type m_value;
AZStd::aligned_storage_for_t<T> m_value;
static int s_moduleUseCount;
};
@@ -468,6 +458,11 @@ namespace AZ
Get() = value;
}
void Set(T&& value)
{
Get() = AZStd::move(value);
}
explicit operator bool() const
{
return IsValid();
@@ -42,7 +42,10 @@ namespace AZ
AZ_Assert(m_useCount > 0, "m_useCount is already 0!");
if (m_useCount.fetch_sub(1) == 1)
{
AZ::NameDictionary::Instance().TryReleaseName(hash);
if (AZ::NameDictionary::IsReady())
{
AZ::NameDictionary::Instance().TryReleaseName(hash);
}
}
}
}
@@ -21,23 +21,18 @@ namespace AZ
namespace NameDictionaryInternal
{
static AZ::EnvironmentVariable<NameDictionary*> s_instance = nullptr;
static AZ::EnvironmentVariable<NameDictionary> s_instance = nullptr;
}
void NameDictionary::Create()
{
using namespace NameDictionaryInternal;
AZ_Assert(!s_instance || !s_instance.Get(), "NameDictionary already created!");
AZ_Assert(!s_instance, "NameDictionary already created!");
if (!s_instance)
{
s_instance = AZ::Environment::CreateVariable<NameDictionary*>(NameDictionaryInstanceName);
}
if (!s_instance.Get())
{
s_instance.Set(aznew NameDictionary());
s_instance = AZ::Environment::CreateVariable<NameDictionary>(NameDictionaryInstanceName);
}
}
@@ -46,8 +41,7 @@ namespace AZ
using namespace NameDictionaryInternal;
AZ_Assert(s_instance, "NameDictionary not created!");
delete (*s_instance);
*s_instance = nullptr;
s_instance.Reset();
}
bool NameDictionary::IsReady()
@@ -56,10 +50,10 @@ namespace AZ
if (!s_instance)
{
s_instance = Environment::FindVariable<NameDictionary*>(NameDictionaryInstanceName);
s_instance = Environment::FindVariable<NameDictionary>(NameDictionaryInstanceName);
}
return s_instance && *s_instance;
return s_instance.IsConstructed();
}
NameDictionary& NameDictionary::Instance()
@@ -68,12 +62,12 @@ namespace AZ
if (!s_instance)
{
s_instance = Environment::FindVariable<NameDictionary*>(NameDictionaryInstanceName);
s_instance = Environment::FindVariable<NameDictionary>(NameDictionaryInstanceName);
}
AZ_Assert(s_instance && *s_instance, "NameDictionary has not been initialized yet.");
AZ_Assert(s_instance.IsConstructed(), "NameDictionary has not been initialized yet.");
return *(*s_instance);
return *s_instance;
}
NameDictionary::NameDictionary()
@@ -16,7 +16,7 @@
#include <AzCore/Memory/OSAllocator.h>
#include <AzCore/Name/Name.h>
namespace MaterialEditor
namespace MaterialEditor
{
class MaterialEditorCoreComponent;
}
@@ -34,14 +34,14 @@ namespace AZ
{
class NameData;
};
//! Maintains a list of unique strings for Name objects.
//! The main benefit of the Name system is very fast string equality comparison, because every
//! unique name has a unique ID. The NameDictionary's purpose is to guarantee name IDs do not
//! unique name has a unique ID. The NameDictionary's purpose is to guarantee name IDs do not
//! collide. It also saves memory by removing duplicate strings.
//!
//! Benchmarks have shown that creating a new Name object can be quite slow when the name doesn't
//! already exist in the NameDictionary, but is comparable to creating an AZStd::string for names
//! Benchmarks have shown that creating a new Name object can be quite slow when the name doesn't
//! already exist in the NameDictionary, but is comparable to creating an AZStd::string for names
//! that already exist.
class NameDictionary final
{
@@ -51,7 +51,10 @@ namespace AZ
friend Name;
friend Internal::NameData;
friend UnitTest::NameDictionaryTester;
template<typename T, typename... Args> friend constexpr auto AZStd::construct_at(T*, Args&&... args)
-> AZStd::enable_if_t<AZStd::is_void_v<AZStd::void_t<decltype(new (AZStd::declval<void*>()) T(AZStd::forward<Args>(args)...))>>, T*>;
template<typename T> constexpr friend void AZStd::destroy_at(T*);
public:
static void Create();
@@ -62,7 +65,7 @@ namespace AZ
//! Makes a Name from the provided raw string. If an entry already exists in the dictionary, it is shared.
//! Otherwise, it is added to the internal dictionary.
//!
//!
//! @param name The name to resolve against the dictionary.
//! @return A Name instance holding a dictionary entry associated with the provided raw string.
Name MakeName(AZStd::string_view name);
@@ -84,13 +87,13 @@ namespace AZ
// Attempts to release the name from the dictionary, but checks to make sure
// a reference wasn't taken by another thread.
void TryReleaseName(Name::Hash hash);
//////////////////////////////////////////////////////////////////////////
// Calculates a hash for the provided name string.
// Does not attempt to resolve hash collisions; that is handled elsewhere.
Name::Hash CalcHash(AZStd::string_view name);
AZStd::unordered_map<Name::Hash, Internal::NameData*> m_dictionary;
mutable AZStd::shared_mutex m_sharedMutex;
};
@@ -0,0 +1,94 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#include <AzCore/std/allocator_stateless.h>
#include <AzCore/Memory/OSAllocator.h>
namespace AZStd
{
stateless_allocator::stateless_allocator(const char* name)
: m_name(name) {}
const char* stateless_allocator::get_name() const
{
return m_name;
}
void stateless_allocator::set_name(const char* name)
{
m_name = name;
}
auto stateless_allocator::allocate(size_type byteSize) -> pointer_type
{
return allocate(byteSize, AZ_DEFAULT_ALIGNMENT, 0);
}
auto stateless_allocator::allocate(size_type byteSize, size_type alignment, int) -> pointer_type
{
pointer_type address = AZ_OS_MALLOC(byteSize, alignment);
if (address == nullptr)
{
AZ_Error("Memory", false, "stateless_allocator ran out of system memory!\n");
}
return address;
}
void stateless_allocator::deallocate(pointer_type ptr, size_type)
{
AZ_OS_FREE(ptr);
}
void stateless_allocator::deallocate(pointer_type ptr, size_type, size_type)
{
AZ_OS_FREE(ptr);
}
auto stateless_allocator::max_size() const -> size_type
{
return AZ_CORE_MAX_ALLOCATOR_SIZE;
}
stateless_allocator stateless_allocator::select_on_container_copy_construction() const
{
return *this;
}
auto stateless_allocator::resize(pointer_type, size_type) -> size_type
{
return 0;
}
bool stateless_allocator::is_lock_free()
{
return false;
}
bool stateless_allocator::is_stale_read_allowed()
{
return false;
}
bool stateless_allocator::is_delayed_recycling()
{
return false;
}
// comparison operators
bool operator==(const stateless_allocator&, const stateless_allocator&)
{
return true;
}
bool operator!=(const stateless_allocator&, const stateless_allocator&)
{
return false;
}
}
@@ -0,0 +1,61 @@
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include <AzCore/std/base.h>
#include <AzCore/std/typetraits/integral_constant.h>
#include <AzCore/RTTI/TypeInfoSimple.h>
namespace AZStd
{
class stateless_allocator
{
public:
AZ_TYPE_INFO(stateless_allocator, "{E4976C53-0B20-4F39-8D41-0A76F59A7D68}");
using value_type = uint8_t;
using pointer_type = void*;
using size_type = size_t;
using difference_type = ptrdiff_t;
using allow_memory_leaks = AZStd::true_type;
stateless_allocator(const char* name = "AZStd::stateless_allocator");
stateless_allocator(const stateless_allocator& rhs) = default;
stateless_allocator& operator=(const stateless_allocator& rhs) = default;
const char* get_name() const;
void set_name(const char* name);
pointer_type allocate(size_type byteSize);
pointer_type allocate(size_type byteSize, size_type alignment, int flags = 0);
void deallocate(pointer_type ptr, size_type alignment);
void deallocate(pointer_type ptr, size_type byteSize, size_type alignment);
// max_size actually returns the true maximum size of a single allocation
size_type max_size() const;
// Returns a copy of the allocator
stateless_allocator select_on_container_copy_construction() const;
//! extensions
size_type resize(pointer_type ptr, size_type newSize);
bool is_lock_free();
bool is_stale_read_allowed();
bool is_delayed_recycling();
private:
const char* m_name;
};
bool operator==(const stateless_allocator& left, const stateless_allocator& right);
bool operator!=(const stateless_allocator& left, const stateless_allocator& right);
}
@@ -12,6 +12,8 @@ set(FILES
allocator.h
allocator_ref.h
allocator_stack.h
allocator_stateless.cpp
allocator_stateless.h
allocator_static.h
allocator_traits.h
any.h
@@ -20,7 +20,7 @@
namespace AZStd
{
// alias std::pointer_traits into the AZStd::namespace
// alias std::pointer_traits into the AZStd::namespace
using std::pointer_traits;
//! Bring the names of uninitialized_default_construct and
@@ -229,7 +229,7 @@ namespace AZStd
//! `new (declval<void*>()) T(declval<Args>()...)` is well-formed
template <typename T, typename... Args>
constexpr auto construct_at(T* ptr, Args&&... args)
-> enable_if_t<is_void_v<void_t<decltype(new (declval<void*>()) T(AZStd::forward<Args>(args)...))>>, T*>
-> enable_if_t<AZStd::is_void_v<AZStd::void_t<decltype(new (AZStd::declval<void*>()) T(AZStd::forward<Args>(args)...))>>, T*>
{
return ::new (ptr) T(AZStd::forward<Args>(args)...);
}
@@ -487,7 +487,7 @@ namespace AZStd
{
//! Implements the C++17 uninitialized_move function
//! The functions accepts two input iterators and an output iterator
//! It performs an AZStd::move on each in in the range of the input iterator
//! It performs an AZStd::move on each in in the range of the input iterator
//! and stores the result in location pointed by the output iterator
template <typename InputIt, typename ForwardIt>
ForwardIt uninitialized_move(InputIt first, InputIt last, ForwardIt result)
@@ -9,6 +9,7 @@
#pragma once
#include <AzCore/RTTI/RTTI.h>
#include <AzCore/std/containers/vector.h>
#include <AzCore/std/string/string.h>
namespace AZ
@@ -11,6 +11,8 @@
#include <AzCore/Interface/Interface.h>
#include <AzCore/Serialization/SerializeContext.h>
#include <AzFramework/Entity/EntityContextBus.h>
namespace AzToolsFramework
{
//! Outcome object that returns an error message in case of failure to allow caller to handle internal errors.
@@ -43,7 +45,7 @@ namespace AzToolsFramework
//! @param entityId The entityId whose open state will be set.
//! @param open True if the container should be opened, false if it should be closed.
//! @return An error message if the operation was invalid, success otherwise.
virtual ContainerEntityOperationResult SetContainerOpenState(AZ::EntityId entityId, bool open) = 0;
virtual ContainerEntityOperationResult SetContainerOpen(AZ::EntityId entityId, bool open) = 0;
//! If the entity id provided is registered as a container, it returns whether it's open.
//! @note the default value for non-containers is true, so this function can be called without
@@ -56,6 +58,16 @@ namespace AzToolsFramework
//! @return The highest closed entity container id if any, or entityId otherwise.
virtual AZ::EntityId FindHighestSelectableEntity(AZ::EntityId entityId) const = 0;
//! Clears all open state information for Container Entities for the EntityContextId provided.
//! Used when context is switched, for example in the case of a new root prefab being loaded
//! in place of an old one.
//! @note Clear is meant to be called when no container is registered for the context provided.
//! @return An error message if any container was registered for the context, success otherwise.
virtual ContainerEntityOperationResult Clear(AzFramework::EntityContextId entityContextId) = 0;
//! Returns true if one of the ancestors of entityId is a closed container entity.
virtual bool IsUnderClosedContainerEntity(AZ::EntityId entityId) const = 0;
};
} // namespace AzToolsFramework
@@ -10,16 +10,19 @@
#include <AzCore/Component/TransformBus.h>
#include <AzToolsFramework/ContainerEntity/ContainerEntityNotificationBus.h>
#include <AzToolsFramework/API/ToolsApplicationAPI.h>
namespace AzToolsFramework
{
void ContainerEntitySystemComponent::Activate()
{
AZ::Interface<ContainerEntityInterface>::Register(this);
EditorEntityContextNotificationBus::Handler::BusConnect();
}
void ContainerEntitySystemComponent::Deactivate()
{
EditorEntityContextNotificationBus::Handler::BusDisconnect();
AZ::Interface<ContainerEntityInterface>::Unregister(this);
}
@@ -63,7 +66,7 @@ namespace AzToolsFramework
return m_containers.contains(entityId);
}
ContainerEntityOperationResult ContainerEntitySystemComponent::SetContainerOpenState(AZ::EntityId entityId, bool open)
ContainerEntityOperationResult ContainerEntitySystemComponent::SetContainerOpen(AZ::EntityId entityId, bool open)
{
if (!IsContainer(entityId))
{
@@ -87,7 +90,7 @@ namespace AzToolsFramework
bool ContainerEntitySystemComponent::IsContainerOpen(AZ::EntityId entityId) const
{
// If the entity is not a container, it should behave as open.
// Non-container entities behave the same as open containers. This saves the caller an additional check.
if(!m_containers.contains(entityId))
{
return true;
@@ -99,8 +102,17 @@ namespace AzToolsFramework
AZ::EntityId ContainerEntitySystemComponent::FindHighestSelectableEntity(AZ::EntityId entityId) const
{
if (!entityId.IsValid())
{
return entityId;
}
// Return the highest closed container, or the entity if none is found.
AZ::EntityId highestSelectableEntityId = entityId;
// Skip the queried entity, as we only want to check its ancestors.
AZ::TransformBus::EventResult(entityId, entityId, &AZ::TransformBus::Events::GetParentId);
// Go up the hierarchy until you hit the root
while (entityId.IsValid())
{
@@ -117,4 +129,72 @@ namespace AzToolsFramework
return highestSelectableEntityId;
}
void ContainerEntitySystemComponent::OnEntityStreamLoadSuccess()
{
// We don't yet support multiple entity contexts, so just use the default.
auto editorEntityContextId = AzFramework::EntityContextId::CreateNull();
EditorEntityContextRequestBus::BroadcastResult(editorEntityContextId, &EditorEntityContextRequests::GetEditorEntityContextId);
Clear(editorEntityContextId);
}
ContainerEntityOperationResult ContainerEntitySystemComponent::Clear(AzFramework::EntityContextId entityContextId)
{
// We don't yet support multiple entity contexts, so only clear the default.
auto editorEntityContextId = AzFramework::EntityContextId::CreateNull();
EditorEntityContextRequestBus::BroadcastResult(editorEntityContextId, &EditorEntityContextRequests::GetEditorEntityContextId);
if (entityContextId != editorEntityContextId)
{
return AZ::Failure(AZStd::string(
"Error in ContainerEntitySystemComponent::Clear - cannot clear non-default Entity Context!"));
}
if (!m_containers.empty())
{
return AZ::Failure(AZStd::string(
"Error in ContainerEntitySystemComponent::Clear - cannot clear container states if entities are still registered!"));
}
m_openContainers.clear();
return AZ::Success();
}
bool ContainerEntitySystemComponent::IsUnderClosedContainerEntity(AZ::EntityId entityId) const
{
if (!entityId.IsValid())
{
return false;
}
// Skip the queried entity, as we only want to check its ancestors.
AZ::TransformBus::EventResult(entityId, entityId, &AZ::TransformBus::Events::GetParentId);
// Go up the hierarchy until you hit the root.
while (entityId.IsValid())
{
if (!IsContainerOpen(entityId))
{
// One of the ancestors is a container and it's closed.
return true;
}
AZ::EntityId parentId;
AZ::TransformBus::EventResult(parentId, entityId, &AZ::TransformBus::Events::GetParentId);
if (parentId == entityId)
{
// In some circumstances, querying a root level entity with GetParentId will return
// the entity itself instead of an invalid entityId.
break;
}
entityId = parentId;
}
// All ancestors are either regular entities or open containers.
return false;
}
} // namespace AzToolsFramework
@@ -12,6 +12,7 @@
#include <AzCore/Memory/SystemAllocator.h>
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
namespace AzToolsFramework
{
@@ -23,6 +24,7 @@ namespace AzToolsFramework
class ContainerEntitySystemComponent final
: public AZ::Component
, private ContainerEntityInterface
, private EditorEntityContextNotificationBus::Handler
{
public:
AZ_COMPONENT(ContainerEntitySystemComponent, "{74349759-B36B-44A6-B89F-F45D7111DD11}");
@@ -42,9 +44,14 @@ namespace AzToolsFramework
ContainerEntityOperationResult RegisterEntityAsContainer(AZ::EntityId entityId) override;
ContainerEntityOperationResult UnregisterEntityAsContainer(AZ::EntityId entityId) override;
bool IsContainer(AZ::EntityId entityId) const override;
ContainerEntityOperationResult SetContainerOpenState(AZ::EntityId entityId, bool open) override;
ContainerEntityOperationResult SetContainerOpen(AZ::EntityId entityId, bool open) override;
bool IsContainerOpen(AZ::EntityId entityId) const override;
AZ::EntityId FindHighestSelectableEntity(AZ::EntityId entityId) const override;
ContainerEntityOperationResult Clear(AzFramework::EntityContextId entityContextId) override;
bool IsUnderClosedContainerEntity(AZ::EntityId entityId) const override;
// EditorEntityContextNotificationBus overrides ...
void OnEntityStreamLoadSuccess() override;
private:
AZStd::unordered_set<AZ::EntityId> m_containers; //!< All entities in this set are containers.
@@ -16,9 +16,11 @@
#include <AzCore/RTTI/AttributeReader.h>
#include <AzCore/Serialization/SerializeContext.h>
#include <AzToolsFramework/Commands/EntityStateCommand.h>
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
#include <AzToolsFramework/Entity/EditorEntityInfoBus.h>
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
#include <AzToolsFramework/Entity/SliceEditorEntityOwnershipServiceBus.h>
#include <AzToolsFramework/FocusMode/FocusModeInterface.h>
#include <AzToolsFramework/Slice/SliceMetadataEntityContextBus.h>
#include <AzToolsFramework/Slice/SliceUtilities.h>
#include <AzToolsFramework/ToolsComponents/EditorLockComponentBus.h>
@@ -588,15 +590,40 @@ namespace AzToolsFramework
{
AZ_PROFILE_FUNCTION(AzToolsFramework);
// Detect if the Entity is Visible
bool visible = false;
EditorEntityInfoRequestBus::EventResult(
visible, entityId, &EditorEntityInfoRequestBus::Events::IsVisible);
bool locked = false;
EditorEntityInfoRequestBus::EventResult(
locked, entityId, &EditorEntityInfoRequestBus::Events::IsLocked);
if (!visible)
{
return false;
}
return visible && !locked;
// Detect if the Entity is Locked
bool locked = false;
EditorEntityInfoRequestBus::EventResult(locked, entityId, &EditorEntityInfoRequestBus::Events::IsLocked);
if (locked)
{
return false;
}
// Detect if the Entity is part of the Editor Focus
if (auto focusModeInterface = AZ::Interface<FocusModeInterface>::Get();
!focusModeInterface->IsInFocusSubTree(entityId))
{
return false;
}
// Detect if the Entity is a descendant of a closed container
if (auto containerEntityInterface = AZ::Interface<ContainerEntityInterface>::Get();
containerEntityInterface->IsUnderClosedContainerEntity(entityId))
{
return false;
}
return true;
}
static void SetEntityLockStateRecursively(
@@ -196,6 +196,9 @@ namespace AzToolsFramework::Prefab
Initialize();
}
// Clear the old focus vector
m_instanceFocusVector.clear();
// Focus on the root prefab (AZ::EntityId() will default to it)
FocusOnOwningPrefab(AZ::EntityId());
}
@@ -230,7 +233,7 @@ namespace AzToolsFramework::Prefab
{
if (instance.has_value())
{
m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), true);
m_containerEntityInterface->SetContainerOpen(instance->get().GetContainerEntityId(), true);
}
}
}
@@ -241,7 +244,7 @@ namespace AzToolsFramework::Prefab
{
if (instance.has_value())
{
m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), false);
m_containerEntityInterface->SetContainerOpen(instance->get().GetContainerEntityId(), false);
}
}
}
@@ -257,9 +257,10 @@ namespace AzToolsFramework
// Select Container Entity
{
auto selectionUndo = aznew SelectionCommand({ containerEntityId }, "Select Prefab Container Entity");
const EntityIdList selectedEntities = EntityIdList{ containerEntityId };
auto selectionUndo = aznew SelectionCommand(selectedEntities, "Select Prefab Container Entity");
selectionUndo->SetParent(undoBatch.GetUndoBatch());
ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::RunRedoSeparately, selectionUndo);
ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::SetSelectedEntities, selectedEntities);
}
}
@@ -1097,7 +1098,7 @@ namespace AzToolsFramework
// Select the duplicated entities/instances
auto selectionUndo = aznew SelectionCommand(duplicatedEntityAndInstanceIds, "Select Duplicated Entities/Instances");
selectionUndo->SetParent(undoBatch.GetUndoBatch());
ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::RunRedoSeparately, selectionUndo);
ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::SetSelectedEntities, duplicatedEntityAndInstanceIds);
}
return AZ::Success();
@@ -90,7 +90,7 @@ namespace AzToolsFramework
typedef SharedThumbnailKey BusIdType;
//! notify product thumbnail that the data is ready
virtual void ThumbnailRendered(QPixmap& thumbnailImage) = 0;
virtual void ThumbnailRendered(const QPixmap& thumbnailImage) = 0;
//! notify product thumbnail that the thumbnail failed to render
virtual void ThumbnailFailedToRender() = 0;
};
@@ -137,6 +137,7 @@ namespace AzToolsFramework
}
EditorContextMenuBus::Handler::BusConnect();
EditorEventsBus::Handler::BusConnect();
PrefabInstanceContainerNotificationBus::Handler::BusConnect();
AZ::Interface<PrefabIntegrationInterface>::Register(this);
AssetBrowser::AssetBrowserSourceDropBus::Handler::BusConnect(s_prefabFileExtension);
@@ -147,6 +148,7 @@ namespace AzToolsFramework
AssetBrowser::AssetBrowserSourceDropBus::Handler::BusDisconnect();
AZ::Interface<PrefabIntegrationInterface>::Unregister(this);
PrefabInstanceContainerNotificationBus::Handler::BusDisconnect();
EditorEventsBus::Handler::BusDisconnect();
EditorContextMenuBus::Handler::BusDisconnect();
}
@@ -313,6 +315,11 @@ namespace AzToolsFramework
}
}
void PrefabIntegrationManager::OnEscape()
{
s_prefabFocusInterface->FocusOnOwningPrefab(AZ::EntityId());
}
void PrefabIntegrationManager::HandleSourceFileType(AZStd::string_view sourceFilePath, AZ::EntityId parentId, AZ::Vector3 position) const
{
auto instantiatePrefabOutcome = s_prefabPublicInterface->InstantiatePrefab(sourceFilePath, parentId, position);
@@ -1393,7 +1400,7 @@ namespace AzToolsFramework
AZStd::unique_ptr<AzQtComponents::Card> PrefabIntegrationManager::ConstructUnsavedPrefabsCard(TemplateId templateId)
{
FlowLayout* unsavedPrefabsLayout = new FlowLayout(AzToolsFramework::GetActiveWindow());
FlowLayout* unsavedPrefabsLayout = new FlowLayout(nullptr);
AZStd::set<AZ::IO::PathView> dirtyTemplatePaths = s_prefabSystemComponentInterface->GetDirtyTemplatePaths(templateId);
@@ -51,6 +51,7 @@ namespace AzToolsFramework
class PrefabIntegrationManager final
: public EditorContextMenuBus::Handler
, public EditorEventsBus::Handler
, public AssetBrowser::AssetBrowserSourceDropBus::Handler
, public PrefabInstanceContainerNotificationBus::Handler
, public PrefabIntegrationInterface
@@ -64,19 +65,22 @@ namespace AzToolsFramework
static void Reflect(AZ::ReflectContext* context);
// EditorContextMenuBus...
// EditorContextMenuBus overrides ...
int GetMenuPosition() const override;
AZStd::string GetMenuIdentifier() const override;
void PopulateEditorGlobalContextMenu(QMenu* menu, const AZ::Vector2& point, int flags) override;
// EntityOutlinerSourceDropHandlingBus...
// EditorEventsBus overrides ...
void OnEscape();
// EntityOutlinerSourceDropHandlingBus overrides ...
void HandleSourceFileType(AZStd::string_view sourceFilePath, AZ::EntityId parentId, AZ::Vector3 position) const override;
// PrefabInstanceContainerNotificationBus...
// PrefabInstanceContainerNotificationBus overrides ...
void OnPrefabComponentActivate(AZ::EntityId entityId) override;
void OnPrefabComponentDeactivate(AZ::EntityId entityId) override;
// PrefabIntegrationInterface...
// PrefabIntegrationInterface overrides ...
AZ::EntityId CreateNewEntityAtPosition(const AZ::Vector3& position, AZ::EntityId parentId) override;
int ExecuteClosePrefabDialog(TemplateId templateId) override;
void ExecuteSavePrefabDialog(TemplateId templateId, bool useSaveAllPrefabsPreference) override;
@@ -28,6 +28,9 @@ AZ_PUSH_DISABLE_WARNING(4244 4251, "-Wunknown-warning-option")
#include <QTableView>
#include <QHeaderView>
#include <QPainter>
#include <QPixmap>
#include <QByteArray>
#include <QDataStream>
AZ_POP_DISABLE_WARNING
#include <AzCore/Asset/AssetManager.h>
@@ -1230,6 +1233,16 @@ namespace AzToolsFramework
return m_showThumbnailDropDownButton;
}
void PropertyAssetCtrl::SetCustomThumbnailEnabled(bool enabled)
{
m_thumbnail->SetCustomThumbnailEnabled(enabled);
}
void PropertyAssetCtrl::SetCustomThumbnailPixmap(const QPixmap& pixmap)
{
m_thumbnail->SetCustomThumbnailPixmap(pixmap);
}
void PropertyAssetCtrl::SetThumbnailCallback(EditCallbackType* editNotifyCallback)
{
m_thumbnailCallback = editNotifyCallback;
@@ -1356,15 +1369,27 @@ namespace AzToolsFramework
GUI->SetClearNotifyCallback(nullptr);
}
}
else if (attrib == AZ_CRC("BrowseIcon", 0x507d7a4f))
else if (attrib == AZ_CRC_CE("BrowseIcon"))
{
AZStd::string iconPath;
attrValue->Read<AZStd::string>(iconPath);
if (!iconPath.empty())
if (attrValue->Read<AZStd::string>(iconPath) && !iconPath.empty())
{
GUI->SetBrowseButtonIcon(QIcon(iconPath.c_str()));
}
else
{
// A QPixmap object can't be assigned directly via an attribute.
// This allows dynamic icon data to be supplied as a buffer containing a serialized QPixmap.
AZStd::vector<char> pixmapBuffer;
if (attrValue->Read<AZStd::vector<char>>(pixmapBuffer) && !pixmapBuffer.empty())
{
QByteArray pixmapBytes(pixmapBuffer.data(), aznumeric_cast<int>(pixmapBuffer.size()));
QDataStream stream(&pixmapBytes, QIODevice::ReadOnly);
QPixmap pixmap;
stream >> pixmap;
GUI->SetBrowseButtonIcon(pixmap);
}
}
}
else if (attrib == AZ_CRC_CE("BrowseButtonEnabled"))
{
@@ -1390,6 +1415,30 @@ namespace AzToolsFramework
GUI->SetShowThumbnail(showThumbnail);
}
}
else if (attrib == AZ_CRC_CE("ThumbnailIcon"))
{
AZStd::string iconPath;
if (attrValue->Read<AZStd::string>(iconPath) && !iconPath.empty())
{
GUI->SetCustomThumbnailEnabled(true);
GUI->SetCustomThumbnailPixmap(QPixmap::fromImage(QImage(iconPath.c_str())));
}
else
{
// A QPixmap object can't be assigned directly via an attribute.
// This allows dynamic icon data to be supplied as a buffer containing a serialized QPixmap.
AZStd::vector<char> pixmapBuffer;
if (attrValue->Read<AZStd::vector<char>>(pixmapBuffer) && !pixmapBuffer.empty())
{
QByteArray pixmapBytes(pixmapBuffer.data(), aznumeric_cast<int>(pixmapBuffer.size()));
QDataStream stream(&pixmapBytes, QIODevice::ReadOnly);
QPixmap pixmap;
stream >> pixmap;
GUI->SetCustomThumbnailEnabled(true);
GUI->SetCustomThumbnailPixmap(pixmap);
}
}
}
else if (attrib == AZ_CRC_CE("ThumbnailCallback"))
{
PropertyAssetCtrl::EditCallbackType* func = azdynamic_cast<PropertyAssetCtrl::EditCallbackType*>(attrValue->GetAttribute());
@@ -217,12 +217,17 @@ namespace AzToolsFramework
void SetHideProductFilesInAssetPicker(bool hide);
bool GetHideProductFilesInAssetPicker() const;
// Enable and configure a thumbnail widget that displays an asset preview and dropdown arrow for a dropdown menu
void SetShowThumbnail(bool enable);
bool GetShowThumbnail() const;
void SetShowThumbnailDropDownButton(bool enable);
bool GetShowThumbnailDropDownButton() const;
void SetThumbnailCallback(EditCallbackType* editNotifyCallback);
// If enabled, replaces the thumbnail widget content with a custom pixmap
void SetCustomThumbnailEnabled(bool enabled);
void SetCustomThumbnailPixmap(const QPixmap& pixmap);
void SetSelectedAssetID(const AZ::Data::AssetId& newID);
void SetCurrentAssetType(const AZ::Data::AssetType& newType);
void SetSelectedAssetID(const AZ::Data::AssetId& newID, const AZ::Data::AssetType& newType);
@@ -38,7 +38,7 @@ namespace AzToolsFramework
static bool UnsignedToolTip(QWidget* widget, QString& toolTipString);
};
//! Base class for integer widget handlers to provide functionality independant
//! Base class for integer widget handlers to provide functionality independent
//! of widget type.
//! @tparam ValueType The integer primitive type of the handler.
//! @tparam PropertyControl The widget type of the handler.
@@ -167,8 +167,7 @@ namespace AzToolsFramework
PropertyControl* newCtrl = aznew PropertyControl(pParent);
this->connect(newCtrl, &PropertyControl::valueChanged, this, [newCtrl]()
{
EBUS_EVENT(PropertyEditorGUIMessages::Bus, RequestWrite, newCtrl);
AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&PropertyEditorGUIMessages::Bus::Handler::RequestWrite, newCtrl);
AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&PropertyEditorGUIMessages::Bus::Events::RequestWrite, newCtrl);
});
// note: Qt automatically disconnects objects from each other when either end is destroyed, no need to worry about delete.
@@ -98,11 +98,6 @@ namespace AzToolsFramework
QWidget* IntSpinBoxHandler<ValueType>::CreateGUI(QWidget* parent)
{
PropertyIntSpinCtrl* newCtrl = static_cast<PropertyIntSpinCtrl*>(BaseHandler::CreateGUI(parent));
this->connect(newCtrl, &PropertyIntSpinCtrl::valueChanged, [newCtrl]()
{
AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast(&PropertyEditorGUIMessages::Bus::Handler::RequestWrite, newCtrl);
});
return newCtrl;
}
@@ -7,75 +7,117 @@
*/
#include <AzToolsFramework/Debug/TraceContext.h>
AZ_PUSH_DISABLE_WARNING(4251 4800, "-Wunknown-warning-option") // 4251: 'QRawFont::d': class 'QExplicitlySharedDataPointer<QRawFontPrivate>' needs to have dll-interface to be used by clients of class 'QRawFont'
// 4800: 'QTextEngine *const ': forcing value to bool 'true' or 'false' (performance warning)
#include <QLabel>
#include <QHBoxLayout>
#include <QEvent>
#include <QPainter>
#include <UI/UICore/AspectRatioAwarePixmapWidget.hxx>
#include <Thumbnails/ThumbnailWidget.h>
// 4251: 'QRawFont::d': class 'QExplicitlySharedDataPointer<QRawFontPrivate>' needs to have dll-interface to be used by clients of class
// 'QRawFont' 4800: 'QTextEngine *const ': forcing value to bool 'true' or 'false' (performance warning)
AZ_PUSH_DISABLE_WARNING(4251 4800, "-Wunknown-warning-option")
#include <QApplication>
#include <QEvent>
#include <QHBoxLayout>
#include <QLabel>
#include <QPainter>
#include <Thumbnails/ThumbnailWidget.h>
#include <UI/UICore/AspectRatioAwarePixmapWidget.hxx>
AZ_POP_DISABLE_WARNING
#include "ThumbnailPropertyCtrl.h"
namespace AzToolsFramework
{
ThumbnailPropertyCtrl::ThumbnailPropertyCtrl(QWidget* parent)
: QWidget(parent)
{
QHBoxLayout* pLayout = new QHBoxLayout();
pLayout->setContentsMargins(0, 0, 0, 0);
pLayout->setSpacing(0);
m_thumbnail = new Thumbnailer::ThumbnailWidget(this);
m_thumbnail->setFixedSize(QSize(24, 24));
m_thumbnailEnlarged = new Thumbnailer::ThumbnailWidget(this);
m_thumbnailEnlarged->setFixedSize(QSize(180, 180));
m_thumbnailEnlarged->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
m_customThumbnail = new QLabel(this);
m_customThumbnail->setFixedSize(QSize(24, 24));
m_customThumbnail->setScaledContents(true);
m_customThumbnailEnlarged = new QLabel(this);
m_customThumbnailEnlarged->setFixedSize(QSize(180, 180));
m_customThumbnailEnlarged->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
m_customThumbnailEnlarged->setScaledContents(true);
m_dropDownArrow = new AspectRatioAwarePixmapWidget(this);
m_dropDownArrow->setPixmap(QPixmap(":/stylesheet/img/triangle0.png"));
m_dropDownArrow->setFixedSize(QSize(8, 24));
ShowDropDownArrow(false);
m_emptyThumbnail = new QLabel(this);
m_emptyThumbnail->setPixmap(QPixmap(":/stylesheet/img/line.png"));
m_emptyThumbnail->setFixedSize(QSize(24, 24));
pLayout->addWidget(m_emptyThumbnail);
QHBoxLayout* pLayout = new QHBoxLayout();
pLayout->setContentsMargins(0, 0, 0, 0);
pLayout->setSpacing(0);
pLayout->addWidget(m_thumbnail);
pLayout->addWidget(m_customThumbnail);
pLayout->addWidget(m_emptyThumbnail);
pLayout->addSpacing(4);
pLayout->addWidget(m_dropDownArrow);
pLayout->addSpacing(4);
setLayout(pLayout);
ShowDropDownArrow(false);
UpdateVisibility();
}
void ThumbnailPropertyCtrl::SetThumbnailKey(Thumbnailer::SharedThumbnailKey key, const char* contextName)
{
m_key = key;
m_emptyThumbnail->setVisible(false);
m_thumbnail->SetThumbnailKey(key, contextName);
if (m_customThumbnailEnabled)
{
ClearThumbnail();
}
else
{
m_key = key;
m_thumbnail->SetThumbnailKey(m_key, contextName);
m_thumbnailEnlarged->SetThumbnailKey(m_key, contextName);
}
UpdateVisibility();
}
void ThumbnailPropertyCtrl::ClearThumbnail()
{
m_emptyThumbnail->setVisible(true);
m_key.clear();
m_thumbnail->ClearThumbnail();
m_thumbnailEnlarged->ClearThumbnail();
UpdateVisibility();
}
void ThumbnailPropertyCtrl::ShowDropDownArrow(bool visible)
{
if (visible)
{
setFixedSize(QSize(40, 24));
}
else
{
setFixedSize(QSize(24, 24));
}
setFixedSize(QSize(visible ? 40 : 24, 24));
m_dropDownArrow->setVisible(visible);
}
void ThumbnailPropertyCtrl::SetCustomThumbnailEnabled(bool enabled)
{
m_customThumbnailEnabled = enabled;
UpdateVisibility();
}
void ThumbnailPropertyCtrl::SetCustomThumbnailPixmap(const QPixmap& pixmap)
{
m_customThumbnail->setPixmap(pixmap);
m_customThumbnailEnlarged->setPixmap(pixmap);
UpdateVisibility();
}
void ThumbnailPropertyCtrl::UpdateVisibility()
{
m_thumbnail->setVisible(m_key && !m_customThumbnailEnabled);
m_thumbnailEnlarged->setVisible(false);
m_customThumbnail->setVisible(m_customThumbnailEnabled);
m_customThumbnailEnlarged->setVisible(false);
m_emptyThumbnail->setVisible(!m_key && !m_customThumbnailEnabled);
}
bool ThumbnailPropertyCtrl::event(QEvent* e)
{
if (isEnabled())
@@ -83,7 +125,7 @@ namespace AzToolsFramework
if (e->type() == QEvent::MouseButtonPress)
{
emit clicked();
return true; //ignore
return true; // ignore
}
}
@@ -94,37 +136,32 @@ namespace AzToolsFramework
{
QPainter p(this);
QRect targetRect(QPoint(), QSize(40, 24));
p.fillRect(targetRect, QColor(17, 17, 17)); // #111111
p.fillRect(targetRect, QColor("#111111"));
QWidget::paintEvent(e);
}
void ThumbnailPropertyCtrl::enterEvent(QEvent* e)
{
m_dropDownArrow->setPixmap(QPixmap(":/stylesheet/img/triangle0_highlighted.png"));
if (!m_thumbnailEnlarged && m_key)
{
QPoint position = mapToGlobal(pos() - QPoint(185, 0));
QSize size(180, 180);
m_thumbnailEnlarged.reset(new Thumbnailer::ThumbnailWidget());
m_thumbnailEnlarged->setFixedSize(size);
m_thumbnailEnlarged->move(position);
m_thumbnailEnlarged->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
m_thumbnailEnlarged->SetThumbnailKey(m_key);
m_thumbnailEnlarged->raise();
m_thumbnailEnlarged->show();
}
const QPoint offset(-m_thumbnailEnlarged->width() - 5, -m_thumbnailEnlarged->height() / 2 + m_thumbnail->height() / 2);
m_thumbnailEnlarged->move(mapToGlobal(pos()) + offset);
m_thumbnailEnlarged->raise();
m_thumbnailEnlarged->setVisible(m_key && !m_customThumbnailEnabled);
m_customThumbnailEnlarged->move(mapToGlobal(pos()) + offset);
m_customThumbnailEnlarged->raise();
m_customThumbnailEnlarged->setVisible(m_customThumbnailEnabled);
QWidget::enterEvent(e);
}
void ThumbnailPropertyCtrl::leaveEvent(QEvent* e)
{
m_dropDownArrow->setPixmap(QPixmap(":/stylesheet/img/triangle0.png"));
if (m_thumbnailEnlarged)
{
m_thumbnailEnlarged.reset();
}
m_thumbnailEnlarged->setVisible(false);
m_customThumbnailEnlarged->setVisible(false);
QWidget::leaveEvent(e);
}
}
} // namespace AzToolsFramework
#include "UI/PropertyEditor/moc_ThumbnailPropertyCtrl.cpp"
@@ -1,5 +1,3 @@
#pragma once
/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
@@ -8,6 +6,8 @@
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <AzCore/PlatformDef.h>
#include <AzToolsFramework/Thumbnails/Thumbnail.h>
@@ -35,25 +35,38 @@ namespace AzToolsFramework
//! Call this to set what thumbnail widget will display
void SetThumbnailKey(Thumbnailer::SharedThumbnailKey key, const char* contextName = "Default");
//! Remove current thumbnail
void ClearThumbnail();
//! Display a clickable dropdown arrow next to the thumbnail
void ShowDropDownArrow(bool visible);
bool event(QEvent* e) override;
//! Override the thumbnail widget with a custom image
void SetCustomThumbnailEnabled(bool enabled);
//! Assign a custom image to display in place of thumbnail
void SetCustomThumbnailPixmap(const QPixmap& pixmap);
Q_SIGNALS:
void clicked();
protected:
private:
void UpdateVisibility();
bool event(QEvent* e) override;
void paintEvent(QPaintEvent* e) override;
void enterEvent(QEvent* e) override;
void leaveEvent(QEvent* e) override;
private:
Thumbnailer::SharedThumbnailKey m_key;
Thumbnailer::ThumbnailWidget* m_thumbnail = nullptr;
QScopedPointer<Thumbnailer::ThumbnailWidget> m_thumbnailEnlarged;
Thumbnailer::ThumbnailWidget* m_thumbnailEnlarged = nullptr;
QLabel* m_customThumbnail = nullptr;
QLabel* m_customThumbnailEnlarged = nullptr;
bool m_customThumbnailEnabled = false;
QLabel* m_emptyThumbnail = nullptr;
AspectRatioAwarePixmapWidget* m_dropDownArrow = nullptr;
};

Some files were not shown because too many files have changed in this diff Show More