diff --git a/src/common/rendering/vulkan/descriptorsets/vk_descriptorset.cpp b/src/common/rendering/vulkan/descriptorsets/vk_descriptorset.cpp index 850b316a5..e101b1e0c 100644 --- a/src/common/rendering/vulkan/descriptorsets/vk_descriptorset.cpp +++ b/src/common/rendering/vulkan/descriptorsets/vk_descriptorset.cpp @@ -93,6 +93,7 @@ void VkDescriptorSetManager::UpdateLevelMeshSet() .AddBuffer(LevelMesh.Set.get(), 2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetSurfaceUniformsBuffer()) .AddBuffer(LevelMesh.Set.get(), 3, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, rsbuffers->Lightbuffer.UBO.get(), 0, sizeof(LightBufferUBO)) .AddBuffer(LevelMesh.Set.get(), 4, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, rsbuffers->Bonebuffer.SSO.get()) + .AddBuffer(LevelMesh.Set.get(), 5, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, fb->GetRaytrace()->GetSurfaceIndexBuffer()) .Execute(fb->GetDevice()); } @@ -272,6 +273,7 @@ void VkDescriptorSetManager::CreateLevelMeshLayout() .AddBinding(2, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT) .AddBinding(3, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT) .AddBinding(4, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT) + .AddBinding(5, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT) .DebugName("VkDescriptorSetManager.LevelMesh.Layout") .Create(fb->GetDevice()); } @@ -312,7 +314,7 @@ void VkDescriptorSetManager::CreateLevelMeshPool() { LevelMesh.Pool = DescriptorPoolBuilder() .AddPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 3) - .AddPoolSize(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 2) + .AddPoolSize(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 3) .MaxSets(1) .DebugName("VkDescriptorSetManager.LevelMesh.Pool") .Create(fb->GetDevice()); diff --git a/wadsrc/static/shaders/scene/binding_rsbuffers.glsl b/wadsrc/static/shaders/scene/binding_rsbuffers.glsl index 59742e767..658d31651 100644 --- a/wadsrc/static/shaders/scene/binding_rsbuffers.glsl +++ b/wadsrc/static/shaders/scene/binding_rsbuffers.glsl @@ -108,3 +108,10 @@ layout(set = 1, binding = 5, std430) buffer BoneBufferSSO { mat4 bones[]; }; + +#ifdef USE_LEVELMESH +layout(set = 1, binding = 5) buffer SurfaceIndexBuffer +{ + int surfaceIndices[]; +}; +#endif diff --git a/wadsrc/static/shaders/scene/frag_main.glsl b/wadsrc/static/shaders/scene/frag_main.glsl index e9f07be92..a8994c9c6 100644 --- a/wadsrc/static/shaders/scene/frag_main.glsl +++ b/wadsrc/static/shaders/scene/frag_main.glsl @@ -2,14 +2,16 @@ void main() { #ifdef USE_LEVELMESH - if (vLightmap.z >= 0.0) + /*if (vLightmap.z >= 0.0) { FragColor = vec4(texture(LightMap, vLightmap).rgb, 1.0); } else { FragColor = vec4(vec3(pixelpos.w / 1000), 1.0); - } + }*/ + FragColor.rgb = vec3(uLightLevel / 255.0); + FragColor.a = 1.0; #else #ifdef NO_CLIPDISTANCE_SUPPORT diff --git a/wadsrc/static/shaders/scene/layout_frag.glsl b/wadsrc/static/shaders/scene/layout_frag.glsl index f31d00431..2a813c008 100644 --- a/wadsrc/static/shaders/scene/layout_frag.glsl +++ b/wadsrc/static/shaders/scene/layout_frag.glsl @@ -16,6 +16,10 @@ layout(location = 7) in vec4 ClipDistanceA; layout(location = 8) in vec4 ClipDistanceB; #endif +#if defined(USE_LEVELMESH) +layout(location = 10) in flat int uDataIndex; +#endif + layout(location=0) out vec4 FragColor; #ifdef GBUFFER_PASS layout(location=1) out vec4 FragFog; diff --git a/wadsrc/static/shaders/scene/layout_shared.glsl b/wadsrc/static/shaders/scene/layout_shared.glsl index ae29f0164..882e11a42 100644 --- a/wadsrc/static/shaders/scene/layout_shared.glsl +++ b/wadsrc/static/shaders/scene/layout_shared.glsl @@ -6,7 +6,11 @@ // This must match the PushConstants struct layout(push_constant) uniform PushConstants { +#if defined(USE_LEVELMESH) + int unused; +#else int uDataIndex; // surfaceuniforms index +#endif int uLightIndex; // dynamic lights int uBoneIndexBase; // bone animation int uFogballIndex; // fog balls diff --git a/wadsrc/static/shaders/scene/layout_vert.glsl b/wadsrc/static/shaders/scene/layout_vert.glsl index d672669a5..ec1bb2424 100644 --- a/wadsrc/static/shaders/scene/layout_vert.glsl +++ b/wadsrc/static/shaders/scene/layout_vert.glsl @@ -26,3 +26,7 @@ layout(location = 6) out vec4 vEyeNormal; layout(location = 7) out vec4 ClipDistanceA; layout(location = 8) out vec4 ClipDistanceB; #endif + +#if defined(USE_LEVELMESH) +layout(location = 10) out flat int uDataIndex; +#endif diff --git a/wadsrc/static/shaders/scene/vert_main.glsl b/wadsrc/static/shaders/scene/vert_main.glsl index 6d851c828..be26de2c0 100644 --- a/wadsrc/static/shaders/scene/vert_main.glsl +++ b/wadsrc/static/shaders/scene/vert_main.glsl @@ -8,6 +8,10 @@ void main() vec2 parmTexCoord; vec4 parmPosition; +#if defined(USE_LEVELMESH) + uDataIndex = surfaceIndices[gl_VertexIndex / 3]; +#endif + BonesResult bones = ApplyBones(); parmTexCoord = aTexCoord;