Showing the changes to libraries/render-utils/src/DebugDeferredBuffer.cpp (1 of 5 files). Show all
Unified · Split
| @@ -60,7 +60,8 @@ enum TextureSlot { · 59 unmodified lines | ||
| 60 | 60 | enum ParamSlot { |
| 61 | 61 | CameraCorrection = 0, |
| 62 | 62 | DeferredFrameTransform, |
| 63 | − ShadowTransform | |
| 63 | + ShadowTransform, | |
| 64 | + DebugParametersBuffer | |
| 64 | 65 | }; |
| 65 | 66 | |
| 66 | 67 | static const std::string DEFAULT_ALBEDO_SHADER { |
| @@ -139,13 +140,11 @@ static const std::string DEFAULT_LIGHTING_SHADER { · 72 unmodified lines | ||
| 139 | 140 | " }" |
| 140 | 141 | }; |
| 141 | 142 | |
| 142 | −static const std::string DEFAULT_SHADOW_SHADER{ | |
| 143 | − "uniform sampler2DArrayShadow shadowMaps;" | |
| 144 | − "uniform int shadowCascadeIndex;" | |
| 143 | +static const std::string DEFAULT_SHADOW_DEPTH_SHADER{ | |
| 145 | 144 | "vec4 getFragmentColor() {" |
| 146 | 145 | " for (int i = 255; i >= 0; --i) {" |
| 147 | 146 | " float depth = i / 255.0;" |
| 148 | − " if (texture(shadowMaps, vec4(uv, shadowCascadeIndex, depth)) > 0.5) {" | |
| 147 | + " if (texture(shadowMaps, vec4(uv, parameters._shadowCascadeIndex, depth)) > 0.5) {" | |
| 149 | 148 | " return vec4(vec3(depth), 1.0);" |
| 150 | 149 | " }" |
| 151 | 150 | " }" |
| @@ -324,7 +323,7 @@ std::string DebugDeferredBuffer::getShaderSourceCode(Mode mode, std::string cust · 172 unmodified lines | ||
| 324 | 323 | case ShadowCascade1Mode: |
| 325 | 324 | case ShadowCascade2Mode: |
| 326 | 325 | case ShadowCascade3Mode: |
| 327 | − return DEFAULT_SHADOW_SHADER; | |
| 326 | + return DEFAULT_SHADOW_DEPTH_SHADER; | |
| 328 | 327 | case ShadowCascadeIndicesMode: |
| 329 | 328 | return DEFAULT_SHADOW_CASCADE_SHADER; |
| 330 | 329 | case LinearDepthMode: |
| @@ -397,6 +396,7 @@ const gpu::PipelinePointer& DebugDeferredBuffer::getPipeline(Mode mode, std::str · 66 unmodified lines | ||
| 397 | 396 | slotBindings.insert(gpu::Shader::Binding("cameraCorrectionBuffer", CameraCorrection)); |
| 398 | 397 | slotBindings.insert(gpu::Shader::Binding("deferredFrameTransformBuffer", DeferredFrameTransform)); |
| 399 | 398 | slotBindings.insert(gpu::Shader::Binding("shadowTransformBuffer", ShadowTransform)); |
| 399 | + slotBindings.insert(gpu::Shader::Binding("parametersBuffer", DebugParametersBuffer)); | |
| 400 | 400 | |
| 401 | 401 | slotBindings.insert(gpu::Shader::Binding("albedoMap", Albedo)); |
| 402 | 402 | slotBindings.insert(gpu::Shader::Binding("normalMap", Normal)); |
| @@ -433,8 +433,11 @@ const gpu::PipelinePointer& DebugDeferredBuffer::getPipeline(Mode mode, std::str · 30 unmodified lines | ||
| 433 | 433 | } |
| 434 | 434 | |
| 435 | 435 | void DebugDeferredBuffer::configure(const Config& config) { |
| 436 | + auto& parameters = _parameters.edit(); | |
| 437 | + | |
| 436 | 438 | _mode = (Mode)config.mode; |
| 437 | 439 | _size = config.size; |
| 440 | + parameters._shadowCascadeIndex = glm::clamp(_mode - Mode::ShadowCascade0Mode, 0, (int)SHADOW_CASCADE_MAX_COUNT - 1); | |
| 438 | 441 | } |
| 439 | 442 | |
| 440 | 443 | void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const Inputs& inputs) { |
| @@ -484,18 +487,15 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 43 unmodified lines | ||
| 484 | 487 | batch.setResourceTexture(Velocity, velocityFramebuffer->getVelocityTexture()); |
| 485 | 488 | } |
| 486 | 489 | |
| 490 | + batch.setUniformBuffer(DebugParametersBuffer, _parameters); | |
| 491 | + | |
| 487 | 492 | auto lightStage = renderContext->_scene->getStage<LightStage>(); |
| 488 | 493 | assert(lightStage); |
| 489 | 494 | assert(lightStage->getNumLights() > 0); |
| 490 | 495 | auto lightAndShadow = lightStage->getCurrentKeyLightAndShadow(); |
| 491 | 496 | const auto& globalShadow = lightAndShadow.second; |
| 492 | 497 | if (globalShadow) { |
| 493 | − const auto cascadeIndex = glm::clamp(_mode - Mode::ShadowCascade0Mode, 0, (int)globalShadow->getCascadeCount() - 1); | |
| 494 | − const auto cascadeIndexLocation = pipeline->getProgram()->getUniforms().findLocation("shadowCascadeIndex"); | |
| 495 | 498 | batch.setResourceTexture(Shadow, globalShadow->map); |
| 496 | − if (cascadeIndexLocation >= 0) { | |
| 497 | − batch._glUniform1i(cascadeIndexLocation, cascadeIndex); | |
| 498 | − } | |
| 499 | 499 | batch.setUniformBuffer(ShadowTransform, globalShadow->getBuffer()); |
| 500 | 500 | batch.setUniformBuffer(DeferredFrameTransform, frameTransform->getFrameTransformBuffer()); |
| 501 | 501 | } |