Showing the changes to libraries/render-utils/src/DebugDeferredBuffer.cpp (1 of 1213 files). Show all
Unified · Split
| @@ -39,7 +39,7 @@ void DebugDeferredBufferConfig::setMode(int newMode) { · 38 unmodified lines | ||
| 39 | 39 | emit dirty(); |
| 40 | 40 | } |
| 41 | 41 | |
| 42 | −enum Slot { | |
| 42 | +enum TextureSlot { | |
| 43 | 43 | Albedo = 0, |
| 44 | 44 | Normal, |
| 45 | 45 | Specular, |
| @@ -57,7 +57,11 @@ enum Slot { · 11 unmodified lines | ||
| 57 | 57 | Velocity, |
| 58 | 58 | }; |
| 59 | 59 | |
| 60 | − | |
| 60 | +enum ParamSlot { | |
| 61 | + CameraCorrection = 0, | |
| 62 | + DeferredFrameTransform, | |
| 63 | + ShadowTransform | |
| 64 | +}; | |
| 61 | 65 | |
| 62 | 66 | static const std::string DEFAULT_ALBEDO_SHADER { |
| 63 | 67 | "vec4 getFragmentColor() {" |
| @@ -128,12 +132,14 @@ static const std::string DEFAULT_DEPTH_SHADER { · 64 unmodified lines | ||
| 128 | 132 | " return vec4(vec3(texture(depthMap, uv).x), 1.0);" |
| 129 | 133 | " }" |
| 130 | 134 | }; |
| 135 | + | |
| 131 | 136 | static const std::string DEFAULT_LIGHTING_SHADER { |
| 132 | 137 | "vec4 getFragmentColor() {" |
| 133 | 138 | " return vec4(pow(texture(lightingMap, uv).xyz, vec3(1.0 / 2.2)), 1.0);" |
| 134 | 139 | " }" |
| 135 | 140 | }; |
| 136 | −static const std::string DEFAULT_SHADOW_SHADER { | |
| 141 | + | |
| 142 | +static const std::string DEFAULT_SHADOW_SHADER{ | |
| 137 | 143 | "uniform sampler2DShadow shadowMap;" |
| 138 | 144 | "vec4 getFragmentColor() {" |
| 139 | 145 | " for (int i = 255; i >= 0; --i) {" |
| @@ -146,10 +152,31 @@ static const std::string DEFAULT_SHADOW_SHADER { · 6 unmodified lines | ||
| 146 | 152 | " }" |
| 147 | 153 | }; |
| 148 | 154 | |
| 155 | +static const std::string DEFAULT_SHADOW_CASCADE_SHADER{ | |
| 156 | + "vec3 cascadeColors[4] = vec3[4]( vec3(0,1,0), vec3(0,0,1), vec3(1,0,0), vec3(1) );" | |
| 157 | + "vec4 getFragmentColor() {" | |
| 158 | + " DeferredFrameTransform deferredTransform = getDeferredFrameTransform();" | |
| 159 | + " DeferredFragment frag = unpackDeferredFragment(deferredTransform, uv);" | |
| 160 | + " vec4 viewPosition = vec4(frag.position.xyz, 1.0);" | |
| 161 | + " float viewDepth = -viewPosition.z;" | |
| 162 | + " vec4 worldPosition = getViewInverse() * viewPosition;" | |
| 163 | + " vec4 cascadeShadowCoords[2];" | |
| 164 | + " ivec2 cascadeIndices;" | |
| 165 | + " float cascadeMix = determineShadowCascadesOnPixel(worldPosition, viewDepth, cascadeShadowCoords, cascadeIndices);" | |
| 166 | + " vec3 firstCascadeColor = cascadeColors[cascadeIndices.x];" | |
| 167 | + " vec3 secondCascadeColor = cascadeColors[cascadeIndices.x];" | |
| 168 | + " if (cascadeMix > 0.0 && cascadeIndices.y < getShadowCascadeCount()) {" | |
| 169 | + " secondCascadeColor = cascadeColors[cascadeIndices.y];" | |
| 170 | + " }" | |
| 171 | + " vec3 color = mix(firstCascadeColor, secondCascadeColor, cascadeMix);" | |
| 172 | + " return vec4(mix(vec3(0.0), color, evalShadowFalloff(viewDepth)), 1.0);" | |
| 173 | + "}" | |
| 174 | +}; | |
| 175 | + | |
| 149 | 176 | static const std::string DEFAULT_LINEAR_DEPTH_SHADER { |
| 150 | 177 | "vec4 getFragmentColor() {" |
| 151 | 178 | " return vec4(vec3(1.0 - texture(linearDepthMap, uv).x * 0.01), 1.0);" |
| 152 | − " }" | |
| 179 | + "}" | |
| 153 | 180 | }; |
| 154 | 181 | |
| 155 | 182 | static const std::string DEFAULT_HALF_LINEAR_DEPTH_SHADER{ |
| @@ -292,8 +319,13 @@ std::string DebugDeferredBuffer::getShaderSourceCode(Mode mode, std::string cust · 136 unmodified lines | ||
| 292 | 319 | return DEFAULT_SCATTERING_SHADER; |
| 293 | 320 | case LightingMode: |
| 294 | 321 | return DEFAULT_LIGHTING_SHADER; |
| 295 | − case ShadowMode: | |
| 322 | + case ShadowCascade0Mode: | |
| 323 | + case ShadowCascade1Mode: | |
| 324 | + case ShadowCascade2Mode: | |
| 325 | + case ShadowCascade3Mode: | |
| 296 | 326 | return DEFAULT_SHADOW_SHADER; |
| 327 | + case ShadowCascadeIndicesMode: | |
| 328 | + return DEFAULT_SHADOW_CASCADE_SHADER; | |
| 297 | 329 | case LinearDepthMode: |
| 298 | 330 | return DEFAULT_LINEAR_DEPTH_SHADER; |
| 299 | 331 | case HalfLinearDepthMode: |
| @@ -346,8 +378,7 @@ bool DebugDeferredBuffer::pipelineNeedsUpdate(Mode mode, std::string customFile) · 46 unmodified lines | ||
| 346 | 378 | |
| 347 | 379 | const gpu::PipelinePointer& DebugDeferredBuffer::getPipeline(Mode mode, std::string customFile) { |
| 348 | 380 | if (pipelineNeedsUpdate(mode, customFile)) { |
| 349 | − static const std::string VERTEX_SHADER { debug_deferred_buffer_vert }; | |
| 350 | − static const std::string FRAGMENT_SHADER { debug_deferred_buffer_frag }; | |
| 381 | + static const std::string FRAGMENT_SHADER { debug_deferred_buffer_frag::getSource() }; | |
| 351 | 382 | static const std::string SOURCE_PLACEHOLDER { "//SOURCE_PLACEHOLDER" }; |
| 352 | 383 | static const auto SOURCE_PLACEHOLDER_INDEX = FRAGMENT_SHADER.find(SOURCE_PLACEHOLDER); |
| 353 | 384 | Q_ASSERT_X(SOURCE_PLACEHOLDER_INDEX != std::string::npos, Q_FUNC_INFO, |
| @@ -357,11 +388,15 @@ const gpu::PipelinePointer& DebugDeferredBuffer::getPipeline(Mode mode, std::str · 3 unmodified lines | ||
| 357 | 388 | bakedFragmentShader.replace(SOURCE_PLACEHOLDER_INDEX, SOURCE_PLACEHOLDER.size(), |
| 358 | 389 | getShaderSourceCode(mode, customFile)); |
| 359 | 390 | |
| 360 | − static const auto vs = gpu::Shader::createVertex(VERTEX_SHADER); | |
| 391 | + const auto vs = debug_deferred_buffer_vert::getShader(); | |
| 361 | 392 | const auto ps = gpu::Shader::createPixel(bakedFragmentShader); |
| 362 | 393 | const auto program = gpu::Shader::createProgram(vs, ps); |
| 363 | 394 | |
| 364 | 395 | gpu::Shader::BindingSet slotBindings; |
| 396 | + slotBindings.insert(gpu::Shader::Binding("cameraCorrectionBuffer", CameraCorrection)); | |
| 397 | + slotBindings.insert(gpu::Shader::Binding("deferredFrameTransformBuffer", DeferredFrameTransform)); | |
| 398 | + slotBindings.insert(gpu::Shader::Binding("shadowTransformBuffer", ShadowTransform)); | |
| 399 | + | |
| 365 | 400 | slotBindings.insert(gpu::Shader::Binding("albedoMap", Albedo)); |
| 366 | 401 | slotBindings.insert(gpu::Shader::Binding("normalMap", Normal)); |
| 367 | 402 | slotBindings.insert(gpu::Shader::Binding("specularMap", Specular)); |
| @@ -415,6 +450,7 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 47 unmodified lines | ||
| 415 | 450 | auto& surfaceGeometryFramebuffer = inputs.get2(); |
| 416 | 451 | auto& ambientOcclusionFramebuffer = inputs.get3(); |
| 417 | 452 | auto& velocityFramebuffer = inputs.get4(); |
| 453 | + auto& frameTransform = inputs.get5(); | |
| 418 | 454 | |
| 419 | 455 | gpu::doInBatch("DebugDeferredBuffer::run", args->_context, [&](gpu::Batch& batch) { |
| 420 | 456 | batch.enableStereo(false); |
| @@ -433,8 +469,8 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 12 unmodified lines | ||
| 433 | 469 | |
| 434 | 470 | // TODO REMOVE: Temporary until UI |
| 435 | 471 | auto first = _customPipelines.begin()->first; |
| 436 | − | |
| 437 | − batch.setPipeline(getPipeline(_mode, first)); | |
| 472 | + auto pipeline = getPipeline(_mode, first); | |
| 473 | + batch.setPipeline(pipeline); | |
| 438 | 474 | |
| 439 | 475 | if (deferredFramebuffer) { |
| 440 | 476 | batch.setResourceTexture(Albedo, deferredFramebuffer->getDeferredColorTexture()); |
| @@ -453,7 +489,10 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 12 unmodified lines | ||
| 453 | 489 | auto lightAndShadow = lightStage->getCurrentKeyLightAndShadow(); |
| 454 | 490 | const auto& globalShadow = lightAndShadow.second; |
| 455 | 491 | if (globalShadow) { |
| 456 | − batch.setResourceTexture(Shadow, globalShadow->map); | |
| 492 | + const auto cascadeIndex = glm::clamp(_mode - Mode::ShadowCascade0Mode, 0, (int)globalShadow->getCascadeCount() - 1); | |
| 493 | + batch.setResourceTexture(Shadow, globalShadow->getCascade(cascadeIndex).map); | |
| 494 | + batch.setUniformBuffer(ShadowTransform, globalShadow->getBuffer()); | |
| 495 | + batch.setUniformBuffer(DeferredFrameTransform, frameTransform->getFrameTransformBuffer()); | |
| 457 | 496 | } |
| 458 | 497 | |
| 459 | 498 | if (linearDepthTarget) { |
| @@ -474,7 +513,6 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 14 unmodified lines | ||
| 474 | 513 | const glm::vec2 topRight(_size.z, _size.w); |
| 475 | 514 | geometryBuffer->renderQuad(batch, bottomLeft, topRight, color, _geometryId); |
| 476 | 515 | |
| 477 | − | |
| 478 | 516 | batch.setResourceTexture(Albedo, nullptr); |
| 479 | 517 | batch.setResourceTexture(Normal, nullptr); |
| 480 | 518 | batch.setResourceTexture(Specular, nullptr); |