From 10a5e4d466d35888584f02617c1b20dcb26f2efd Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Tue, 5 Sep 2023 17:47:55 +0200 Subject: [PATCH] Add missing file and only include static lights in the lightmaps --- src/rendering/hwrenderer/doom_levelmesh.cpp | 61 ++++++++++--------- wadsrc/static/shaders/lightmap/frag_blur.glsl | 23 +++++++ 2 files changed, 55 insertions(+), 29 deletions(-) create mode 100644 wadsrc/static/shaders/lightmap/frag_blur.glsl diff --git a/src/rendering/hwrenderer/doom_levelmesh.cpp b/src/rendering/hwrenderer/doom_levelmesh.cpp index 167584dc1..a7628d32d 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.cpp +++ b/src/rendering/hwrenderer/doom_levelmesh.cpp @@ -305,38 +305,41 @@ void DoomLevelMesh::CreateLightList(DoomLevelMeshSurface* surface, FLightNode* n { FDynamicLight* light = node->lightsource; - DVector3 pos = light->PosRelative(portalgroup); - - LevelMeshLight meshlight; - meshlight.Origin = { (float)pos.X, (float)pos.Y, (float)pos.Z }; - meshlight.RelativeOrigin = meshlight.Origin; // ?? what is the difference between this and Origin? - meshlight.Radius = (float)light->GetRadius(); - meshlight.Intensity = 1.0f; - if (light->IsSpot()) + if (light->Trace()) { - meshlight.InnerAngleCos = (float)light->pSpotInnerAngle->Cos(); - meshlight.OuterAngleCos = (float)light->pSpotOuterAngle->Cos(); + DVector3 pos = light->PosRelative(portalgroup); - DAngle negPitch = -*light->pPitch; - DAngle Angle = light->target->Angles.Yaw; - double xzLen = negPitch.Cos(); - meshlight.SpotDir.X = float(-Angle.Cos() * xzLen); - meshlight.SpotDir.Y = float(-negPitch.Sin()); - meshlight.SpotDir.Z = float(-Angle.Sin() * xzLen); - } - else - { - meshlight.InnerAngleCos = -1.0f; - meshlight.OuterAngleCos = -1.0f; - meshlight.SpotDir.X = 0.0f; - meshlight.SpotDir.Y = 0.0f; - meshlight.SpotDir.Z = 0.0f; - } - meshlight.Color.X = light->GetRed() * (1.0f / 255.0f); - meshlight.Color.Y = light->GetGreen() * (1.0f / 255.0f); - meshlight.Color.Z = light->GetBlue() * (1.0f / 255.0f); + LevelMeshLight meshlight; + meshlight.Origin = { (float)pos.X, (float)pos.Y, (float)pos.Z }; + meshlight.RelativeOrigin = meshlight.Origin; // ?? what is the difference between this and Origin? + meshlight.Radius = (float)light->GetRadius(); + meshlight.Intensity = 1.0f; + if (light->IsSpot()) + { + meshlight.InnerAngleCos = (float)light->pSpotInnerAngle->Cos(); + meshlight.OuterAngleCos = (float)light->pSpotOuterAngle->Cos(); - surface->LightListBuffer.push_back(meshlight); + DAngle negPitch = -*light->pPitch; + DAngle Angle = light->target->Angles.Yaw; + double xzLen = negPitch.Cos(); + meshlight.SpotDir.X = float(-Angle.Cos() * xzLen); + meshlight.SpotDir.Y = float(-negPitch.Sin()); + meshlight.SpotDir.Z = float(-Angle.Sin() * xzLen); + } + else + { + meshlight.InnerAngleCos = -1.0f; + meshlight.OuterAngleCos = -1.0f; + meshlight.SpotDir.X = 0.0f; + meshlight.SpotDir.Y = 0.0f; + meshlight.SpotDir.Z = 0.0f; + } + meshlight.Color.X = light->GetRed() * (1.0f / 255.0f); + meshlight.Color.Y = light->GetGreen() * (1.0f / 255.0f); + meshlight.Color.Z = light->GetBlue() * (1.0f / 255.0f); + + surface->LightListBuffer.push_back(meshlight); + } node = node->nextLight; } diff --git a/wadsrc/static/shaders/lightmap/frag_blur.glsl b/wadsrc/static/shaders/lightmap/frag_blur.glsl new file mode 100644 index 000000000..8dbb3069b --- /dev/null +++ b/wadsrc/static/shaders/lightmap/frag_blur.glsl @@ -0,0 +1,23 @@ + +layout(set = 0, binding = 0) uniform sampler2D tex; + +layout(location = 0) in vec3 worldpos; +layout(location = 0) out vec4 fragcolor; + +void main() +{ + ivec2 size = textureSize(tex, 0); + vec2 texCoord = gl_FragCoord.xy / vec2(size); + +#if defined(BLUR_HORIZONTAL) + fragcolor = + textureOffset(tex, texCoord, ivec2( 0, 0)) * 0.5 + + textureOffset(tex, texCoord, ivec2( 1, 0)) * 0.25 + + textureOffset(tex, texCoord, ivec2(-1, 0)) * 0.25; +#else + fragcolor = + textureOffset(tex, texCoord, ivec2(0, 0)) * 0.5 + + textureOffset(tex, texCoord, ivec2(0, 1)) * 0.25 + + textureOffset(tex, texCoord, ivec2(0,-1)) * 0.25; +#endif +}