From 5e3d6e39a0a1003c7c886edfb9366534717ac15a Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sun, 15 Oct 2023 16:14:00 +0200 Subject: [PATCH] Merge gl_light_shadowmap and gl_light_raytrace cvars as gl_light_shadows Rename gl_shadowmap_filter to gl_light_shadow_filter as it applies to raytraced shadows as well --- .../rendering/hwrenderer/data/hw_cvars.cpp | 22 ++++++++++++++++++- .../rendering/hwrenderer/data/hw_cvars.h | 6 ++--- .../hwrenderer/data/hw_renderstate.h | 2 +- .../hwrenderer/data/hw_shadowmap.cpp | 20 +---------------- .../hwrenderer/data/hw_viewpointuniforms.h | 2 +- .../rendering/vulkan/vk_renderstate.cpp | 4 ++-- src/rendering/hwrenderer/hw_entrypoint.cpp | 2 +- .../hwrenderer/scene/hw_drawinfo.cpp | 2 +- wadsrc/static/language.def | 4 ++++ wadsrc/static/menudef.txt | 13 ++++++++--- 10 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/common/rendering/hwrenderer/data/hw_cvars.cpp b/src/common/rendering/hwrenderer/data/hw_cvars.cpp index 2476c0024..94f65e142 100644 --- a/src/common/rendering/hwrenderer/data/hw_cvars.cpp +++ b/src/common/rendering/hwrenderer/data/hw_cvars.cpp @@ -128,8 +128,28 @@ CUSTOM_CVARD(Int, gl_texture_filter, 6, CVAR_ARCHIVE|CVAR_GLOBALCONFIG|CVAR_NOIN CVAR(Bool, gl_precache, true, CVAR_ARCHIVE) +CUSTOM_CVAR(Int, gl_light_shadows, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + if (self < 0 || self > 3) + self = 1; +} -CUSTOM_CVAR(Int, gl_shadowmap_filter, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CUSTOM_CVAR(Int, gl_light_shadow_filter, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) { if (self < 0 || self > 8) self = 1; } + +CUSTOM_CVAR(Int, gl_shadowmap_quality, 512, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +{ + switch (self) + { + case 128: + case 256: + case 512: + case 1024: + break; + default: + self = 128; + break; + } +} diff --git a/src/common/rendering/hwrenderer/data/hw_cvars.h b/src/common/rendering/hwrenderer/data/hw_cvars.h index 90770974e..41ed3d50f 100644 --- a/src/common/rendering/hwrenderer/data/hw_cvars.h +++ b/src/common/rendering/hwrenderer/data/hw_cvars.h @@ -14,8 +14,8 @@ EXTERN_CVAR(Int, gl_weaponlight) EXTERN_CVAR (Bool, gl_light_sprites); EXTERN_CVAR (Bool, gl_light_particles); -EXTERN_CVAR (Bool, gl_light_shadowmap); -EXTERN_CVAR (Bool, gl_light_raytrace); +EXTERN_CVAR (Int, gl_light_shadows); +EXTERN_CVAR (Int, gl_light_shadow_filter); EXTERN_CVAR (Int, gl_shadowmap_quality); EXTERN_CVAR(Int, gl_fogmode) @@ -50,8 +50,6 @@ EXTERN_CVAR(Float, gl_ssao_blur_amount) EXTERN_CVAR(Int, gl_debug_level) EXTERN_CVAR(Bool, gl_debug_breakpoint) -EXTERN_CVAR(Int, gl_shadowmap_filter) - EXTERN_CVAR(Bool, gl_brightfog) EXTERN_CVAR(Bool, gl_lightadditivesurfaces) EXTERN_CVAR(Bool, gl_notexturefill) diff --git a/src/common/rendering/hwrenderer/data/hw_renderstate.h b/src/common/rendering/hwrenderer/data/hw_renderstate.h index 2b9489a5d..bd217d104 100644 --- a/src/common/rendering/hwrenderer/data/hw_renderstate.h +++ b/src/common/rendering/hwrenderer/data/hw_renderstate.h @@ -725,7 +725,7 @@ public: matrices.mGlobVis = 1.f; matrices.mPalLightLevels = palLightLevels; matrices.mClipLine.X = -10000000.0f; - matrices.mShadowmapFilter = gl_shadowmap_filter; + matrices.mShadowFilter = gl_light_shadow_filter; matrices.mLightBlendMode = 0; matrices.mProjectionMatrix.ortho(0, (float)width, (float)height, 0, -1.0f, 1.0f); matrices.CalcDependencies(); diff --git a/src/common/rendering/hwrenderer/data/hw_shadowmap.cpp b/src/common/rendering/hwrenderer/data/hw_shadowmap.cpp index 70eb42208..bfb25e513 100644 --- a/src/common/rendering/hwrenderer/data/hw_shadowmap.cpp +++ b/src/common/rendering/hwrenderer/data/hw_shadowmap.cpp @@ -59,9 +59,6 @@ cycle_t ShadowMap::UpdateCycles; int ShadowMap::LightsProcessed; int ShadowMap::LightsShadowmapped; -CVAR(Bool, gl_light_shadowmap, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -CVAR(Bool, gl_light_raytrace, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) - ADD_STAT(shadowmap) { FString out; @@ -69,24 +66,9 @@ ADD_STAT(shadowmap) return out; } -CUSTOM_CVAR(Int, gl_shadowmap_quality, 512, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) -{ - switch (self) - { - case 128: - case 256: - case 512: - case 1024: - break; - default: - self = 128; - break; - } -} - bool ShadowMap::ShadowTest(const DVector3 &lpos, const DVector3 &pos) { - if (mAABBTree && gl_light_shadowmap) + if (mAABBTree && gl_light_shadows > 0) return mAABBTree->RayTest(lpos, pos) >= 1.0f; else return true; diff --git a/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h b/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h index def3b4808..bdbc91707 100644 --- a/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h +++ b/src/common/rendering/hwrenderer/data/hw_viewpointuniforms.h @@ -26,7 +26,7 @@ struct HWViewpointUniforms int mViewHeight = 0; float mClipHeight = 0.f; float mClipHeightDirection = 0.f; - int mShadowmapFilter = 1; + int mShadowFilter = 1; int mLightBlendMode = 0; diff --git a/src/common/rendering/vulkan/vk_renderstate.cpp b/src/common/rendering/vulkan/vk_renderstate.cpp index a14182654..43c3fb86e 100644 --- a/src/common/rendering/vulkan/vk_renderstate.cpp +++ b/src/common/rendering/vulkan/vk_renderstate.cpp @@ -299,8 +299,8 @@ void VkRenderState::ApplyRenderPass(int dt) pipelineKey.ShaderKey.LightMode = 1; // Software } - pipelineKey.ShaderKey.UseShadowmap = gl_light_shadowmap; - pipelineKey.ShaderKey.UseRaytrace = gl_light_raytrace; + pipelineKey.ShaderKey.UseShadowmap = gl_light_shadows == 1; + pipelineKey.ShaderKey.UseRaytrace = gl_light_shadows == 2; pipelineKey.ShaderKey.GBufferPass = mRenderTarget.DrawBuffers > 1; diff --git a/src/rendering/hwrenderer/hw_entrypoint.cpp b/src/rendering/hwrenderer/hw_entrypoint.cpp index ac4083b48..7f914e750 100644 --- a/src/rendering/hwrenderer/hw_entrypoint.cpp +++ b/src/rendering/hwrenderer/hw_entrypoint.cpp @@ -108,7 +108,7 @@ sector_t* RenderViewpoint(FRenderViewpoint& mainvp, AActor* camera, IntRect* bou R_SetupFrame(mainvp, r_viewwindow, camera); - if (mainview && toscreen && !(camera->Level->flags3 & LEVEL3_NOSHADOWMAP) && camera->Level->HasDynamicLights && gl_light_shadowmap && screen->allowSSBO() && (screen->hwcaps & RFL_SHADER_STORAGE_BUFFER)) + if (mainview && toscreen && !(camera->Level->flags3 & LEVEL3_NOSHADOWMAP) && camera->Level->HasDynamicLights && gl_light_shadows > 0 && screen->allowSSBO() && (screen->hwcaps & RFL_SHADER_STORAGE_BUFFER)) { screen->mShadowMap->SetAABBTree(camera->Level->aabbTree); screen->mShadowMap->SetCollectLights([=] { diff --git a/src/rendering/hwrenderer/scene/hw_drawinfo.cpp b/src/rendering/hwrenderer/scene/hw_drawinfo.cpp index c0dbe6709..dfcf5d2c2 100644 --- a/src/rendering/hwrenderer/scene/hw_drawinfo.cpp +++ b/src/rendering/hwrenderer/scene/hw_drawinfo.cpp @@ -116,7 +116,7 @@ void HWDrawInfo::StartScene(FRenderViewpoint &parentvp, HWViewpointUniforms *uni VPUniforms.mPalLightLevels = static_cast(gl_bandedswlight) | (static_cast(gl_fogmode) << 8) | ((int)lightmode << 16); } VPUniforms.mClipLine.X = -10000000.0f; - VPUniforms.mShadowmapFilter = static_cast(gl_shadowmap_filter); + VPUniforms.mShadowFilter = static_cast(gl_light_shadow_filter); VPUniforms.mLightBlendMode = (level.info ? (int)level.info->lightblendmode : 0); } mClipper->SetViewpoint(Viewpoint); diff --git a/wadsrc/static/language.def b/wadsrc/static/language.def index f27921290..a4e30d39c 100644 --- a/wadsrc/static/language.def +++ b/wadsrc/static/language.def @@ -393,3 +393,7 @@ OPTMNU_SPRITE = "Sprite Options"; GLPREFMNU_CORONAS = "Coronas"; DSPLYMNU_APPEARANCE = "Appearance"; DSPLYMNU_ADVANCED = "Advanced Display Options"; +OPTVAL_SHADOWMAP = "Shadowmap"; +OPTVAL_RAYTRACE = "Raytrace"; +GLLIGHTMNU_LIGHTSHADOWS = "Light shadows"; +GLLIGHTMNU_LIGHTSHADOWFILTER = "Shadow filter"; diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index 092f00fc4..392fb8b7b 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -1069,9 +1069,9 @@ OptionMenu "LightOptions" protected Option "$GLLIGHTMNU_LIGHTSPRITES", gl_light_sprites, "YesNo" Option "$GLLIGHTMNU_LIGHTPARTICLES", gl_light_particles, "YesNo" StaticText " " - Option "$GLLIGHTMNU_LIGHTSHADOWMAP", gl_light_shadowmap, "YesNo" + Option "$GLLIGHTMNU_LIGHTSHADOWS", gl_light_shadows, "ShadowMode" + Option "$GLLIGHTMNU_LIGHTSHADOWFILTER", gl_light_shadow_filter, "ShadowFilter" Option "$GLLIGHTMNU_LIGHTSHADOWMAPQUALITY", gl_shadowmap_quality, "ShadowMapQuality" - Option "$GLLIGHTMNU_LIGHTSHADOWMAPFILTER", gl_shadowmap_filter, "ShadowMapFilter" StaticText " " Option "$GLPREFMNU_SWLMBANDED", gl_bandedswlight, "OnOff" Option "$GLPREFMNU_FOGFORCEFULLBRIGHT", gl_brightfog, "YesNo" @@ -2686,7 +2686,14 @@ OptionValue ShadowMapQuality 1024, "1024" } -OptionValue ShadowMapFilter +OptionValue ShadowMode +{ + 0, "$OPTVAL_NONE" + 1, "$OPTVAL_SHADOWMAP" + 2, "$OPTVAL_RAYTRACE" +} + +OptionValue ShadowFilter { 0, "$OPTVAL_NEAREST" 1, "$OPTVAL_PCF_LOW"