wait_for_condition added and merged development

Signed-off-by: Scott Murray <scottmur@amazon.com>
This commit is contained in:
Scott Murray
2021-10-13 15:01:58 -07:00
230 changed files with 3894 additions and 4344 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"
@@ -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
@@ -160,6 +160,7 @@ def AtomEditorComponents_postfx_shape_weight_AddedToEntity():
# 9. Undo to remove each added shape and verify PostFX Shape Weight Modifier is not enabled.
general.undo()
TestHelper.wait_for_condition(lambda: not postfx_shape_weight_entity.has_component(shape), 1.0)
Report.result(Tests.postfx_shape_weight_disabled, not postfx_shape_weight_component.is_enabled())
# 10. Verify PostFx Shape Weight Modifier component is enabled by adding Spline and Tube Shape component.
@@ -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
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:817bd8dd22e185136418b60fba5b3552993687515d3d5ae96791f2c3be907b92
size 7233
oid sha256:60276c07b45a734e4f71d695278167ea61e884f8b513906168c9642078ad5954
size 6045
+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)
@@ -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(
@@ -8,12 +8,14 @@
#include <AzToolsFramework/Prefab/PrefabFocusHandler.h>
#include <AzToolsFramework/Commands/SelectionCommand.h>
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
#include <AzToolsFramework/Entity/EditorEntityHelpers.h>
#include <AzToolsFramework/Entity/PrefabEditorEntityOwnershipInterface.h>
#include <AzToolsFramework/Prefab/Instance/Instance.h>
#include <AzToolsFramework/Prefab/Instance/InstanceEntityMapperInterface.h>
#include <AzToolsFramework/Prefab/PrefabFocusNotificationBus.h>
#include <AzToolsFramework/Prefab/PrefabFocusUndo.h>
namespace AzToolsFramework::Prefab
{
@@ -28,10 +30,12 @@ namespace AzToolsFramework::Prefab
EditorEntityContextNotificationBus::Handler::BusConnect();
AZ::Interface<PrefabFocusInterface>::Register(this);
AZ::Interface<PrefabFocusPublicInterface>::Register(this);
}
PrefabFocusHandler::~PrefabFocusHandler()
{
AZ::Interface<PrefabFocusPublicInterface>::Unregister(this);
AZ::Interface<PrefabFocusInterface>::Unregister(this);
EditorEntityContextNotificationBus::Handler::BusDisconnect();
}
@@ -61,6 +65,44 @@ namespace AzToolsFramework::Prefab
}
PrefabFocusOperationResult PrefabFocusHandler::FocusOnOwningPrefab(AZ::EntityId entityId)
{
// Initialize Undo Batch object
ScopedUndoBatch undoBatch("Edit Prefab");
// Clear selection
{
const EntityIdList selectedEntities = EntityIdList{};
auto selectionUndo = aznew SelectionCommand(selectedEntities, "Clear Selection");
selectionUndo->SetParent(undoBatch.GetUndoBatch());
ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::SetSelectedEntities, selectedEntities);
}
// Edit Prefab
{
auto editUndo = aznew PrefabFocusUndo("Edit Prefab");
editUndo->Capture(entityId);
editUndo->SetParent(undoBatch.GetUndoBatch());
ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::RunRedoSeparately, editUndo);
}
return AZ::Success();
}
PrefabFocusOperationResult PrefabFocusHandler::FocusOnPathIndex([[maybe_unused]] AzFramework::EntityContextId entityContextId, int index)
{
if (index < 0 || index >= m_instanceFocusVector.size())
{
return AZ::Failure(AZStd::string("Prefab Focus Handler: Invalid index on FocusOnPathIndex."));
}
InstanceOptionalReference focusedInstance = m_instanceFocusVector[index];
FocusOnOwningPrefab(focusedInstance->get().GetContainerEntityId());
return AZ::Success();
}
PrefabFocusOperationResult PrefabFocusHandler::FocusOnPrefabInstanceOwningEntityId(AZ::EntityId entityId)
{
InstanceOptionalReference focusedInstance;
@@ -85,18 +127,6 @@ namespace AzToolsFramework::Prefab
return FocusOnPrefabInstance(focusedInstance);
}
PrefabFocusOperationResult PrefabFocusHandler::FocusOnPathIndex([[maybe_unused]] AzFramework::EntityContextId entityContextId, int index)
{
if (index < 0 || index >= m_instanceFocusVector.size())
{
return AZ::Failure(AZStd::string("Prefab Focus Handler: Invalid index on FocusOnPathIndex."));
}
InstanceOptionalReference focusedInstance = m_instanceFocusVector[index];
return FocusOnPrefabInstance(focusedInstance);
}
PrefabFocusOperationResult PrefabFocusHandler::FocusOnPrefabInstance(InstanceOptionalReference focusedInstance)
{
if (!focusedInstance.has_value())
@@ -122,17 +152,10 @@ namespace AzToolsFramework::Prefab
if (focusedInstance->get().GetParentInstance() != AZStd::nullopt)
{
containerEntityId = focusedInstance->get().GetContainerEntityId();
// Select the container entity
AzToolsFramework::SelectEntity(containerEntityId);
}
else
{
containerEntityId = AZ::EntityId();
// Clear the selection
AzToolsFramework::SelectEntities({});
}
// Focus on the descendants of the container entity
@@ -161,6 +184,17 @@ namespace AzToolsFramework::Prefab
return m_focusedInstance;
}
AZ::EntityId PrefabFocusHandler::GetFocusedPrefabContainerEntityId([[maybe_unused]] AzFramework::EntityContextId entityContextId) const
{
if (!m_focusedInstance.has_value())
{
// PrefabFocusHandler has not been initialized yet.
return AZ::EntityId();
}
return m_focusedInstance->get().GetContainerEntityId();
}
bool PrefabFocusHandler::IsOwningPrefabBeingFocused(AZ::EntityId entityId) const
{
if (!m_focusedInstance.has_value())
@@ -196,8 +230,11 @@ 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());
FocusOnPrefabInstanceOwningEntityId(AZ::EntityId());
}
void PrefabFocusHandler::RefreshInstanceFocusList()
@@ -230,7 +267,7 @@ namespace AzToolsFramework::Prefab
{
if (instance.has_value())
{
m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), true);
m_containerEntityInterface->SetContainerOpen(instance->get().GetContainerEntityId(), true);
}
}
}
@@ -241,7 +278,7 @@ namespace AzToolsFramework::Prefab
{
if (instance.has_value())
{
m_containerEntityInterface->SetContainerOpenState(instance->get().GetContainerEntityId(), false);
m_containerEntityInterface->SetContainerOpen(instance->get().GetContainerEntityId(), false);
}
}
}
@@ -13,6 +13,7 @@
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
#include <AzToolsFramework/FocusMode/FocusModeInterface.h>
#include <AzToolsFramework/Prefab/PrefabFocusInterface.h>
#include <AzToolsFramework/Prefab/PrefabFocusPublicInterface.h>
#include <AzToolsFramework/Prefab/Template/Template.h>
namespace AzToolsFramework
@@ -28,6 +29,7 @@ namespace AzToolsFramework::Prefab
//! Handles Prefab Focus mode, determining which prefab file entity changes will target.
class PrefabFocusHandler final
: private PrefabFocusInterface
, private PrefabFocusPublicInterface
, private EditorEntityContextNotificationBus::Handler
{
public:
@@ -39,10 +41,14 @@ namespace AzToolsFramework::Prefab
void Initialize();
// PrefabFocusInterface overrides ...
PrefabFocusOperationResult FocusOnOwningPrefab(AZ::EntityId entityId) override;
PrefabFocusOperationResult FocusOnPathIndex(AzFramework::EntityContextId entityContextId, int index) override;
PrefabFocusOperationResult FocusOnPrefabInstanceOwningEntityId(AZ::EntityId entityId) override;
TemplateId GetFocusedPrefabTemplateId(AzFramework::EntityContextId entityContextId) const override;
InstanceOptionalReference GetFocusedPrefabInstance(AzFramework::EntityContextId entityContextId) const override;
// PrefabFocusPublicInterface overrides ...
PrefabFocusOperationResult FocusOnOwningPrefab(AZ::EntityId entityId) override;
PrefabFocusOperationResult FocusOnPathIndex(AzFramework::EntityContextId entityContextId, int index) override;
AZ::EntityId GetFocusedPrefabContainerEntityId(AzFramework::EntityContextId entityContextId) const override;
bool IsOwningPrefabBeingFocused(AZ::EntityId entityId) const override;
const AZ::IO::Path& GetPrefabFocusPath(AzFramework::EntityContextId entityContextId) const override;
const int GetPrefabFocusPathLength(AzFramework::EntityContextId entityContextId) const override;
@@ -20,7 +20,7 @@ namespace AzToolsFramework::Prefab
{
using PrefabFocusOperationResult = AZ::Outcome<void, AZStd::string>;
//! Interface to handle operations related to the Prefab Focus system.
//! Interface to handle internal operations related to the Prefab Focus system.
class PrefabFocusInterface
{
public:
@@ -28,29 +28,13 @@ namespace AzToolsFramework::Prefab
//! Set the focused prefab instance to the owning instance of the entityId provided.
//! @param entityId The entityId of the entity whose owning instance we want the prefab system to focus on.
virtual PrefabFocusOperationResult FocusOnOwningPrefab(AZ::EntityId entityId) = 0;
//! Set the focused prefab instance to the instance at position index of the current path.
//! @param index The index of the instance in the current path that we want the prefab system to focus on.
virtual PrefabFocusOperationResult FocusOnPathIndex(AzFramework::EntityContextId entityContextId, int index) = 0;
virtual PrefabFocusOperationResult FocusOnPrefabInstanceOwningEntityId(AZ::EntityId entityId) = 0;
//! Returns the template id of the instance the prefab system is focusing on.
virtual TemplateId GetFocusedPrefabTemplateId(AzFramework::EntityContextId entityContextId) const = 0;
//! Returns a reference to the instance the prefab system is focusing on.
virtual InstanceOptionalReference GetFocusedPrefabInstance(AzFramework::EntityContextId entityContextId) const = 0;
//! Returns whether the entity belongs to the instance that is being focused on, or one of its descendants.
//! @param entityId The entityId of the queried entity.
//! @return true if the entity belongs to the focused instance or one of its descendants, false otherwise.
virtual bool IsOwningPrefabBeingFocused(AZ::EntityId entityId) const = 0;
//! Returns the path from the root instance to the currently focused instance.
//! @return A path composed from the names of the container entities for the instance path.
virtual const AZ::IO::Path& GetPrefabFocusPath(AzFramework::EntityContextId entityContextId) const = 0;
//! Returns the size of the path to the currently focused instance.
virtual const int GetPrefabFocusPathLength(AzFramework::EntityContextId entityContextId) const = 0;
};
} // namespace AzToolsFramework::Prefab
@@ -0,0 +1,53 @@
/*
* 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/Interface/Interface.h>
#include <AzCore/Serialization/SerializeContext.h>
#include <AzFramework/Entity/EntityContext.h>
#include <AzToolsFramework/Prefab/Instance/Instance.h>
#include <AzToolsFramework/Prefab/Template/Template.h>
namespace AzToolsFramework::Prefab
{
using PrefabFocusOperationResult = AZ::Outcome<void, AZStd::string>;
//! Public Interface for external systems to utilize the Prefab Focus system.
class PrefabFocusPublicInterface
{
public:
AZ_RTTI(PrefabFocusPublicInterface, "{53EE1D18-A41F-4DB1-9B73-9448F425722E}");
//! Set the focused prefab instance to the owning instance of the entityId provided. Supports undo/redo.
//! @param entityId The entityId of the entity whose owning instance we want the prefab system to focus on.
virtual PrefabFocusOperationResult FocusOnOwningPrefab(AZ::EntityId entityId) = 0;
//! Set the focused prefab instance to the instance at position index of the current path. Supports undo/redo.
//! @param index The index of the instance in the current path that we want the prefab system to focus on.
virtual PrefabFocusOperationResult FocusOnPathIndex(AzFramework::EntityContextId entityContextId, int index) = 0;
//! Returns the entity id of the container entity for the instance the prefab system is focusing on.
virtual AZ::EntityId GetFocusedPrefabContainerEntityId(AzFramework::EntityContextId entityContextId) const = 0;
//! Returns whether the entity belongs to the instance that is being focused on, or one of its descendants.
//! @param entityId The entityId of the queried entity.
//! @return true if the entity belongs to the focused instance or one of its descendants, false otherwise.
virtual bool IsOwningPrefabBeingFocused(AZ::EntityId entityId) const = 0;
//! Returns the path from the root instance to the currently focused instance.
//! @return A path composed from the names of the container entities for the instance path.
virtual const AZ::IO::Path& GetPrefabFocusPath(AzFramework::EntityContextId entityContextId) const = 0;
//! Returns the size of the path to the currently focused instance.
virtual const int GetPrefabFocusPathLength(AzFramework::EntityContextId entityContextId) const = 0;
};
} // namespace AzToolsFramework::Prefab
@@ -0,0 +1,52 @@
/*
* 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 <AzToolsFramework/Prefab/PrefabFocusUndo.h>
#include <AzCore/Interface/Interface.h>
#include <AzToolsFramework/Entity/EditorEntityContextBus.h>
#include <AzToolsFramework/Prefab/PrefabFocusInterface.h>
#include <AzToolsFramework/Prefab/PrefabFocusPublicInterface.h>
namespace AzToolsFramework::Prefab
{
PrefabFocusUndo::PrefabFocusUndo(const AZStd::string& undoOperationName)
: UndoSystem::URSequencePoint(undoOperationName)
{
m_prefabFocusInterface = AZ::Interface<PrefabFocusInterface>::Get();
AZ_Assert(m_prefabFocusInterface, "PrefabFocusUndo - Failed to grab prefab focus interface");
m_prefabFocusPublicInterface = AZ::Interface<PrefabFocusPublicInterface>::Get();
AZ_Assert(m_prefabFocusPublicInterface, "PrefabFocusUndo - Failed to grab prefab focus public interface");
}
bool PrefabFocusUndo::Changed() const
{
return true;
}
void PrefabFocusUndo::Capture(AZ::EntityId entityId)
{
auto entityContextId = AzFramework::EntityContextId::CreateNull();
EditorEntityContextRequestBus::BroadcastResult(entityContextId, &EditorEntityContextRequests::GetEditorEntityContextId);
m_beforeEntityId = m_prefabFocusPublicInterface->GetFocusedPrefabContainerEntityId(entityContextId);
m_afterEntityId = entityId;
}
void PrefabFocusUndo::Undo()
{
m_prefabFocusInterface->FocusOnPrefabInstanceOwningEntityId(m_beforeEntityId);
}
void PrefabFocusUndo::Redo()
{
m_prefabFocusInterface->FocusOnPrefabInstanceOwningEntityId(m_afterEntityId);
}
} // namespace AzToolsFramework::Prefab
@@ -0,0 +1,39 @@
/*
* 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/Component/EntityId.h>
#include <AzToolsFramework/Undo/UndoSystem.h>
namespace AzToolsFramework::Prefab
{
class PrefabFocusInterface;
class PrefabFocusPublicInterface;
//! Undo node for prefab focus change operations.
class PrefabFocusUndo
: public UndoSystem::URSequencePoint
{
public:
explicit PrefabFocusUndo(const AZStd::string& undoOperationName);
bool Changed() const override;
void Capture(AZ::EntityId entityId);
void Undo() override;
void Redo() override;
protected:
PrefabFocusInterface* m_prefabFocusInterface = nullptr;
PrefabFocusPublicInterface* m_prefabFocusPublicInterface = nullptr;
AZ::EntityId m_beforeEntityId;
AZ::EntityId m_afterEntityId;
};
} // namespace AzToolsFramework::Prefab
@@ -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;
};
@@ -324,7 +324,8 @@ namespace AzToolsFramework
// Currently, the first behavior is implemented.
void EntityOutlinerWidget::OnSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected)
{
if (m_selectionChangeInProgress || !m_enableSelectionUpdates)
if (m_selectionChangeInProgress || !m_enableSelectionUpdates
|| (selected.empty() && deselected.empty()))
{
return;
}
@@ -24,11 +24,11 @@
#include <AzToolsFramework/AssetBrowser/AssetSelectionModel.h>
#include <AzToolsFramework/AssetBrowser/Entries/SourceAssetBrowserEntry.h>
#include <AzToolsFramework/ContainerEntity/ContainerEntityInterface.h>
#include <AzToolsFramework/Prefab/PrefabFocusInterface.h>
#include <AzToolsFramework/Prefab/EditorPrefabComponent.h>
#include <AzToolsFramework/Prefab/Instance/InstanceEntityMapperInterface.h>
#include <AzToolsFramework/Prefab/PrefabFocusPublicInterface.h>
#include <AzToolsFramework/Prefab/PrefabLoaderInterface.h>
#include <AzToolsFramework/Prefab/Procedural/ProceduralPrefabAsset.h>
#include <AzToolsFramework/Prefab/Instance/InstanceEntityMapperInterface.h>
#include <AzToolsFramework/Prefab/EditorPrefabComponent.h>
#include <AzToolsFramework/ToolsComponents/EditorLayerComponentBus.h>
#include <AzToolsFramework/UI/EditorEntityUi/EditorEntityUiInterface.h>
#include <AzToolsFramework/UI/Prefab/PrefabIntegrationInterface.h>
@@ -39,7 +39,6 @@
#include <AzQtComponents/Components/StyleManager.h>
#include <AzQtComponents/Components/Widgets/CardHeader.h>
#include <QApplication>
#include <QCheckBox>
#include <QDialog>
@@ -56,14 +55,13 @@
#include <QVBoxLayout>
#include <QWidget>
namespace AzToolsFramework
{
namespace Prefab
{
ContainerEntityInterface* PrefabIntegrationManager::s_containerEntityInterface = nullptr;
EditorEntityUiInterface* PrefabIntegrationManager::s_editorEntityUiInterface = nullptr;
PrefabFocusInterface* PrefabIntegrationManager::s_prefabFocusInterface = nullptr;
PrefabFocusPublicInterface* PrefabIntegrationManager::s_prefabFocusPublicInterface = nullptr;
PrefabLoaderInterface* PrefabIntegrationManager::s_prefabLoaderInterface = nullptr;
PrefabPublicInterface* PrefabIntegrationManager::s_prefabPublicInterface = nullptr;
PrefabSystemComponentInterface* PrefabIntegrationManager::s_prefabSystemComponentInterface = nullptr;
@@ -129,14 +127,15 @@ namespace AzToolsFramework
return;
}
s_prefabFocusInterface = AZ::Interface<PrefabFocusInterface>::Get();
if (s_prefabFocusInterface == nullptr)
s_prefabFocusPublicInterface = AZ::Interface<PrefabFocusPublicInterface>::Get();
if (s_prefabFocusPublicInterface == nullptr)
{
AZ_Assert(false, "Prefab - could not get PrefabFocusInterface on PrefabIntegrationManager construction.");
AZ_Assert(false, "Prefab - could not get PrefabFocusPublicInterface on PrefabIntegrationManager construction.");
return;
}
EditorContextMenuBus::Handler::BusConnect();
EditorEventsBus::Handler::BusConnect();
PrefabInstanceContainerNotificationBus::Handler::BusConnect();
AZ::Interface<PrefabIntegrationInterface>::Register(this);
AssetBrowser::AssetBrowserSourceDropBus::Handler::BusConnect(s_prefabFileExtension);
@@ -147,6 +146,7 @@ namespace AzToolsFramework
AssetBrowser::AssetBrowserSourceDropBus::Handler::BusDisconnect();
AZ::Interface<PrefabIntegrationInterface>::Unregister(this);
PrefabInstanceContainerNotificationBus::Handler::BusDisconnect();
EditorEventsBus::Handler::BusDisconnect();
EditorContextMenuBus::Handler::BusDisconnect();
}
@@ -245,12 +245,8 @@ namespace AzToolsFramework
if (s_prefabPublicInterface->IsInstanceContainerEntity(selectedEntity))
{
// Edit Prefab
if (prefabWipFeaturesEnabled)
if (prefabWipFeaturesEnabled && !s_prefabFocusPublicInterface->IsOwningPrefabBeingFocused(selectedEntity))
{
bool beingEdited = s_prefabFocusInterface->IsOwningPrefabBeingFocused(selectedEntity);
if (!beingEdited)
{
QAction* editAction = menu->addAction(QObject::tr("Edit Prefab"));
editAction->setToolTip(QObject::tr("Edit the prefab in focus mode."));
@@ -259,7 +255,6 @@ namespace AzToolsFramework
});
itemWasShown = true;
}
}
// Save Prefab
@@ -313,6 +308,11 @@ namespace AzToolsFramework
}
}
void PrefabIntegrationManager::OnEscape()
{
s_prefabFocusPublicInterface->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);
@@ -483,7 +483,7 @@ namespace AzToolsFramework
void PrefabIntegrationManager::ContextMenu_EditPrefab(AZ::EntityId containerEntity)
{
s_prefabFocusInterface->FocusOnOwningPrefab(containerEntity);
s_prefabFocusPublicInterface->FocusOnOwningPrefab(containerEntity);
}
void PrefabIntegrationManager::ContextMenu_SavePrefab(AZ::EntityId containerEntity)
@@ -1393,7 +1393,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);
@@ -30,7 +30,7 @@ namespace AzToolsFramework
namespace Prefab
{
class PrefabFocusInterface;
class PrefabFocusPublicInterface;
class PrefabLoaderInterface;
//! Structure for saving/retrieving user settings related to prefab workflows.
@@ -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;
@@ -140,7 +144,7 @@ namespace AzToolsFramework
static ContainerEntityInterface* s_containerEntityInterface;
static EditorEntityUiInterface* s_editorEntityUiInterface;
static PrefabFocusInterface* s_prefabFocusInterface;
static PrefabFocusPublicInterface* s_prefabFocusPublicInterface;
static PrefabLoaderInterface* s_prefabLoaderInterface;
static PrefabPublicInterface* s_prefabPublicInterface;
static PrefabSystemComponentInterface* s_prefabSystemComponentInterface;
@@ -10,7 +10,7 @@
#include <AzFramework/API/ApplicationAPI.h>
#include <AzToolsFramework/Prefab/PrefabFocusInterface.h>
#include <AzToolsFramework/Prefab/PrefabFocusPublicInterface.h>
#include <AzToolsFramework/Prefab/PrefabPublicInterface.h>
#include <AzToolsFramework/UI/Outliner/EntityOutlinerListModel.hxx>
@@ -35,10 +35,10 @@ namespace AzToolsFramework
return;
}
m_prefabFocusInterface = AZ::Interface<Prefab::PrefabFocusInterface>::Get();
if (m_prefabFocusInterface == nullptr)
m_prefabFocusPublicInterface = AZ::Interface<Prefab::PrefabFocusPublicInterface>::Get();
if (m_prefabFocusPublicInterface == nullptr)
{
AZ_Assert(false, "PrefabUiHandler - could not get PrefabFocusInterface on PrefabUiHandler construction.");
AZ_Assert(false, "PrefabUiHandler - could not get PrefabFocusPublicInterface on PrefabUiHandler construction.");
return;
}
}
@@ -83,7 +83,7 @@ namespace AzToolsFramework
QIcon PrefabUiHandler::GenerateItemIcon(AZ::EntityId entityId) const
{
if (m_prefabFocusInterface->IsOwningPrefabBeingFocused(entityId))
if (m_prefabFocusPublicInterface->IsOwningPrefabBeingFocused(entityId))
{
return QIcon(m_prefabEditIconPath);
}
@@ -105,7 +105,7 @@ namespace AzToolsFramework
const bool hasVisibleChildren = index.data(EntityOutlinerListModel::ExpandedRole).value<bool>() && index.model()->hasChildren(index);
QColor backgroundColor = m_prefabCapsuleColor;
if (m_prefabFocusInterface->IsOwningPrefabBeingFocused(entityId))
if (m_prefabFocusPublicInterface->IsOwningPrefabBeingFocused(entityId))
{
backgroundColor = m_prefabCapsuleEditColor;
}
@@ -191,7 +191,7 @@ namespace AzToolsFramework
const bool isLastColumn = descendantIndex.column() == EntityOutlinerListModel::ColumnLockToggle;
QColor borderColor = m_prefabCapsuleColor;
if (m_prefabFocusInterface->IsOwningPrefabBeingFocused(entityId))
if (m_prefabFocusPublicInterface->IsOwningPrefabBeingFocused(entityId))
{
borderColor = m_prefabCapsuleEditColor;
}
@@ -329,7 +329,7 @@ namespace AzToolsFramework
if (prefabWipFeaturesEnabled)
{
// Focus on this prefab
m_prefabFocusInterface->FocusOnOwningPrefab(entityId);
m_prefabFocusPublicInterface->FocusOnOwningPrefab(entityId);
}
}
}
@@ -15,7 +15,7 @@ namespace AzToolsFramework
namespace Prefab
{
class PrefabFocusInterface;
class PrefabFocusPublicInterface;
class PrefabPublicInterface;
};
@@ -39,7 +39,7 @@ namespace AzToolsFramework
void OnDoubleClick(AZ::EntityId entityId) const override;
private:
Prefab::PrefabFocusInterface* m_prefabFocusInterface = nullptr;
Prefab::PrefabFocusPublicInterface* m_prefabFocusPublicInterface = nullptr;
Prefab::PrefabPublicInterface* m_prefabPublicInterface = nullptr;
static bool IsLastVisibleChild(const QModelIndex& parent, const QModelIndex& child);
@@ -8,7 +8,7 @@
#include <AzToolsFramework/UI/Prefab/PrefabViewportFocusPathHandler.h>
#include <AzToolsFramework/Prefab/PrefabFocusInterface.h>
#include <AzToolsFramework/Prefab/PrefabFocusPublicInterface.h>
namespace AzToolsFramework::Prefab
{
@@ -31,8 +31,8 @@ namespace AzToolsFramework::Prefab
void PrefabViewportFocusPathHandler::Initialize(AzQtComponents::BreadCrumbs* breadcrumbsWidget, QToolButton* backButton)
{
// Get reference to the PrefabFocusInterface handler
m_prefabFocusInterface = AZ::Interface<PrefabFocusInterface>::Get();
if (m_prefabFocusInterface == nullptr)
m_prefabFocusPublicInterface = AZ::Interface<PrefabFocusPublicInterface>::Get();
if (m_prefabFocusPublicInterface == nullptr)
{
AZ_Assert(false, "Prefab - could not get PrefabFocusInterface on PrefabViewportFocusPathHandler construction.");
return;
@@ -46,7 +46,7 @@ namespace AzToolsFramework::Prefab
connect(m_breadcrumbsWidget, &AzQtComponents::BreadCrumbs::linkClicked, this,
[&](const QString&, int linkIndex)
{
m_prefabFocusInterface->FocusOnPathIndex(m_editorEntityContextId, linkIndex);
m_prefabFocusPublicInterface->FocusOnPathIndex(m_editorEntityContextId, linkIndex);
}
);
@@ -54,9 +54,9 @@ namespace AzToolsFramework::Prefab
connect(m_backButton, &QToolButton::clicked, this,
[&]()
{
if (int length = m_prefabFocusInterface->GetPrefabFocusPathLength(m_editorEntityContextId); length > 1)
if (int length = m_prefabFocusPublicInterface->GetPrefabFocusPathLength(m_editorEntityContextId); length > 1)
{
m_prefabFocusInterface->FocusOnPathIndex(m_editorEntityContextId, length - 2);
m_prefabFocusPublicInterface->FocusOnPathIndex(m_editorEntityContextId, length - 2);
}
}
);
@@ -65,7 +65,7 @@ namespace AzToolsFramework::Prefab
void PrefabViewportFocusPathHandler::OnPrefabFocusChanged()
{
// Push new Path
m_breadcrumbsWidget->pushPath(m_prefabFocusInterface->GetPrefabFocusPath(m_editorEntityContextId).c_str());
m_breadcrumbsWidget->pushPath(m_prefabFocusPublicInterface->GetPrefabFocusPath(m_editorEntityContextId).c_str());
}
} // namespace AzToolsFramework::Prefab
@@ -19,7 +19,7 @@
namespace AzToolsFramework::Prefab
{
class PrefabFocusInterface;
class PrefabFocusPublicInterface;
class PrefabViewportFocusPathHandler
: public PrefabFocusNotificationBus::Handler
@@ -40,6 +40,6 @@ namespace AzToolsFramework::Prefab
AzFramework::EntityContextId m_editorEntityContextId = AzFramework::EntityContextId::CreateNull();
PrefabFocusInterface* m_prefabFocusInterface = nullptr;
PrefabFocusPublicInterface* m_prefabFocusPublicInterface = nullptr;
};
} // namespace AzToolsFramework::Prefab
@@ -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());

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