Only add the lightmode actually being used into the shader
This commit is contained in:
parent
6381280177
commit
5c9ff283a6
14 changed files with 360 additions and 280 deletions
|
|
@ -222,6 +222,7 @@ protected:
|
|||
int mTextureClamp;
|
||||
int mTextureModeFlags;
|
||||
int mSoftLight;
|
||||
int mLightMode = -1;
|
||||
float mLightParms[4];
|
||||
|
||||
float mAlphaThreshold;
|
||||
|
|
@ -459,6 +460,11 @@ public:
|
|||
mLightParms[3] = -1.f;
|
||||
}
|
||||
|
||||
void SetLightMode(int lightmode)
|
||||
{
|
||||
mLightMode = lightmode;
|
||||
}
|
||||
|
||||
void SetGlowPlanes(const FVector4 &tp, const FVector4& bp)
|
||||
{
|
||||
mStreamData.uGlowTopPlane = tp;
|
||||
|
|
|
|||
|
|
@ -181,8 +181,8 @@ std::unique_ptr<VulkanShader> VkShaderManager::LoadFragShader(FString shadername
|
|||
if (key.Detailmap) definesBlock << "#define TEXF_Detailmap\n";
|
||||
if (key.Glowmap) definesBlock << "#define TEXF_Glowmap\n";
|
||||
|
||||
if (key.UseRaytrace) definesBlock << "\n#define USE_RAYTRACE\n";
|
||||
if (key.UseShadowmap) definesBlock << "\n#define USE_SHADOWMAP\n";
|
||||
if (key.UseRaytrace) definesBlock << "#define USE_RAYTRACE\n";
|
||||
if (key.UseShadowmap) definesBlock << "#define USE_SHADOWMAP\n";
|
||||
|
||||
switch (key.TextureMode)
|
||||
{
|
||||
|
|
@ -195,6 +195,20 @@ std::unique_ptr<VulkanShader> VkShaderManager::LoadFragShader(FString shadername
|
|||
case TM_FOGLAYER: definesBlock << "#define TM_FOGLAYER\n"; break;
|
||||
}
|
||||
|
||||
switch (key.LightMode)
|
||||
{
|
||||
case 0: definesBlock << "#define LIGHTMODE_DEFAULT\n"; break;
|
||||
case 1: definesBlock << "#define LIGHTMODE_SOFTWARE\n"; break;
|
||||
case 2: definesBlock << "#define LIGHTMODE_VANILLA\n"; break;
|
||||
case 3: definesBlock << "#define LIGHTMODE_BUILD\n"; break;
|
||||
}
|
||||
|
||||
if (key.FogBeforeLights) definesBlock << "#define FOG_BEFORE_LIGHTS\n";
|
||||
if (key.FogAfterLights) definesBlock << "#define FOG_AFTER_LIGHTS\n";
|
||||
if (key.FogRadial) definesBlock << "#define FOG_RADIAL\n";
|
||||
if (key.SWLightRadial) definesBlock << "#define SWLIGHT_RADIAL\n";
|
||||
if (key.SWLightBanded) definesBlock << "#define SWLIGHT_BANDED\n";
|
||||
|
||||
FString layoutBlock;
|
||||
layoutBlock << LoadPrivateShaderLump("shaders/scene/layout_shared.glsl").GetChars() << "\n";
|
||||
layoutBlock << LoadPrivateShaderLump("shaders/scene/layout_frag.glsl").GetChars() << "\n";
|
||||
|
|
|
|||
|
|
@ -76,7 +76,13 @@ public:
|
|||
uint64_t GBufferPass : 1; // GBUFFER_PASS
|
||||
uint64_t UseShadowmap : 1; // USE_SHADOWMAPS
|
||||
uint64_t UseRaytrace : 1; // USE_RAYTRACE
|
||||
uint64_t Unused : 52;
|
||||
uint64_t FogBeforeLights : 1; // FOG_BEFORE_LIGHTS
|
||||
uint64_t FogAfterLights : 1; // FOG_AFTER_LIGHTS
|
||||
uint64_t FogRadial : 1; // FOG_RADIAL
|
||||
uint64_t SWLightRadial : 1; // SWLIGHT_RADIAL
|
||||
uint64_t SWLightBanded : 1; // SWLIGHT_BANDED
|
||||
uint64_t LightMode : 2; // LIGHTMODE_DEFAULT, LIGHTMODE_SOFTWARE, LIGHTMODE_VANILLA, LIGHTMODE_BUILD
|
||||
uint64_t Unused : 45;
|
||||
};
|
||||
uint64_t AsQWORD = 0;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -253,7 +253,46 @@ void VkRenderState::ApplyRenderPass(int dt)
|
|||
pipelineKey.ShaderKey.Brightmap = (uTextureMode & TEXF_Brightmap) != 0;
|
||||
pipelineKey.ShaderKey.Detailmap = (uTextureMode & TEXF_Detailmap) != 0;
|
||||
pipelineKey.ShaderKey.Glowmap = (uTextureMode & TEXF_Glowmap) != 0;
|
||||
pipelineKey.ShaderKey.Simple2D = (mFogEnabled == 2);
|
||||
|
||||
// The way GZDoom handles state is just plain insanity!
|
||||
int fogset = 0;
|
||||
if (mFogEnabled)
|
||||
{
|
||||
if (mFogEnabled == 2)
|
||||
{
|
||||
fogset = -3; // 2D rendering with 'foggy' overlay.
|
||||
}
|
||||
else if ((mFogColor & 0xffffff) == 0)
|
||||
{
|
||||
fogset = gl_fogmode;
|
||||
}
|
||||
else
|
||||
{
|
||||
fogset = -gl_fogmode;
|
||||
}
|
||||
}
|
||||
pipelineKey.ShaderKey.Simple2D = (fogset == -3);
|
||||
pipelineKey.ShaderKey.FogBeforeLights = (fogset > 0);
|
||||
pipelineKey.ShaderKey.FogAfterLights = (fogset < 0);
|
||||
pipelineKey.ShaderKey.FogRadial = (fogset < -1 || fogset > 1);
|
||||
pipelineKey.ShaderKey.SWLightRadial = (gl_fogmode == 2);
|
||||
pipelineKey.ShaderKey.SWLightBanded = false; // gl_bandedswlight;
|
||||
|
||||
float lightlevel = mLightParms[3];
|
||||
if (lightlevel < 0.0)
|
||||
{
|
||||
pipelineKey.ShaderKey.LightMode = 0; // Default
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mLightMode == 5)
|
||||
pipelineKey.ShaderKey.LightMode = 3; // Build
|
||||
else if (mLightMode == 16)
|
||||
pipelineKey.ShaderKey.LightMode = 2; // Vanilla
|
||||
else
|
||||
pipelineKey.ShaderKey.LightMode = 1; // Software
|
||||
}
|
||||
|
||||
pipelineKey.ShaderKey.UseShadowmap = gl_light_shadowmap;
|
||||
pipelineKey.ShaderKey.UseRaytrace = gl_light_raytrace;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue