History

Merged with master

Olivier Prat committed 8 years ago

Commit f5a25572 parents 92e1fe8 0ef27941213 files · +53263 −55587Browse files

Showing the changes to libraries/render-utils/src/DebugDeferredBuffer.cpp (1 of 1213 files). Show all

Unified · Split

libraries/render-utils/src/DebugDeferredBuffer.cpp+50−12
@@ -39,7 +39,7 @@ void DebugDeferredBufferConfig::setMode(int newMode) { · 38 unmodified lines
3939 emit dirty();
4040 }
4141
42−enum Slot {
42+enum TextureSlot {
4343 Albedo = 0,
4444 Normal,
4545 Specular,
@@ -57,7 +57,11 @@ enum Slot { · 11 unmodified lines
5757 Velocity,
5858 };
5959
60−
60+enum ParamSlot {
61+ CameraCorrection = 0,
62+ DeferredFrameTransform,
63+ ShadowTransform
64+};
6165
6266 static const std::string DEFAULT_ALBEDO_SHADER {
6367 "vec4 getFragmentColor() {"
@@ -128,12 +132,14 @@ static const std::string DEFAULT_DEPTH_SHADER { · 64 unmodified lines
128132 " return vec4(vec3(texture(depthMap, uv).x), 1.0);"
129133 " }"
130134 };
135+
131136 static const std::string DEFAULT_LIGHTING_SHADER {
132137 "vec4 getFragmentColor() {"
133138 " return vec4(pow(texture(lightingMap, uv).xyz, vec3(1.0 / 2.2)), 1.0);"
134139 " }"
135140 };
136−static const std::string DEFAULT_SHADOW_SHADER {
141+
142+static const std::string DEFAULT_SHADOW_SHADER{
137143 "uniform sampler2DShadow shadowMap;"
138144 "vec4 getFragmentColor() {"
139145 " for (int i = 255; i >= 0; --i) {"
@@ -146,10 +152,31 @@ static const std::string DEFAULT_SHADOW_SHADER { · 6 unmodified lines
146152 " }"
147153 };
148154
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+
149176 static const std::string DEFAULT_LINEAR_DEPTH_SHADER {
150177 "vec4 getFragmentColor() {"
151178 " return vec4(vec3(1.0 - texture(linearDepthMap, uv).x * 0.01), 1.0);"
152− " }"
179+ "}"
153180 };
154181
155182 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
292319 return DEFAULT_SCATTERING_SHADER;
293320 case LightingMode:
294321 return DEFAULT_LIGHTING_SHADER;
295− case ShadowMode:
322+ case ShadowCascade0Mode:
323+ case ShadowCascade1Mode:
324+ case ShadowCascade2Mode:
325+ case ShadowCascade3Mode:
296326 return DEFAULT_SHADOW_SHADER;
327+ case ShadowCascadeIndicesMode:
328+ return DEFAULT_SHADOW_CASCADE_SHADER;
297329 case LinearDepthMode:
298330 return DEFAULT_LINEAR_DEPTH_SHADER;
299331 case HalfLinearDepthMode:
@@ -346,8 +378,7 @@ bool DebugDeferredBuffer::pipelineNeedsUpdate(Mode mode, std::string customFile) · 46 unmodified lines
346378
347379 const gpu::PipelinePointer& DebugDeferredBuffer::getPipeline(Mode mode, std::string customFile) {
348380 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() };
351382 static const std::string SOURCE_PLACEHOLDER { "//SOURCE_PLACEHOLDER" };
352383 static const auto SOURCE_PLACEHOLDER_INDEX = FRAGMENT_SHADER.find(SOURCE_PLACEHOLDER);
353384 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
357388 bakedFragmentShader.replace(SOURCE_PLACEHOLDER_INDEX, SOURCE_PLACEHOLDER.size(),
358389 getShaderSourceCode(mode, customFile));
359390
360− static const auto vs = gpu::Shader::createVertex(VERTEX_SHADER);
391+ const auto vs = debug_deferred_buffer_vert::getShader();
361392 const auto ps = gpu::Shader::createPixel(bakedFragmentShader);
362393 const auto program = gpu::Shader::createProgram(vs, ps);
363394
364395 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+
365400 slotBindings.insert(gpu::Shader::Binding("albedoMap", Albedo));
366401 slotBindings.insert(gpu::Shader::Binding("normalMap", Normal));
367402 slotBindings.insert(gpu::Shader::Binding("specularMap", Specular));
@@ -415,6 +450,7 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 47 unmodified lines
415450 auto& surfaceGeometryFramebuffer = inputs.get2();
416451 auto& ambientOcclusionFramebuffer = inputs.get3();
417452 auto& velocityFramebuffer = inputs.get4();
453+ auto& frameTransform = inputs.get5();
418454
419455 gpu::doInBatch("DebugDeferredBuffer::run", args->_context, [&](gpu::Batch& batch) {
420456 batch.enableStereo(false);
@@ -433,8 +469,8 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 12 unmodified lines
433469
434470 // TODO REMOVE: Temporary until UI
435471 auto first = _customPipelines.begin()->first;
436−
437− batch.setPipeline(getPipeline(_mode, first));
472+ auto pipeline = getPipeline(_mode, first);
473+ batch.setPipeline(pipeline);
438474
439475 if (deferredFramebuffer) {
440476 batch.setResourceTexture(Albedo, deferredFramebuffer->getDeferredColorTexture());
@@ -453,7 +489,10 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 12 unmodified lines
453489 auto lightAndShadow = lightStage->getCurrentKeyLightAndShadow();
454490 const auto& globalShadow = lightAndShadow.second;
455491 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());
457496 }
458497
459498 if (linearDepthTarget) {
@@ -474,7 +513,6 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 14 unmodified lines
474513 const glm::vec2 topRight(_size.z, _size.w);
475514 geometryBuffer->renderQuad(batch, bottomLeft, topRight, color, _geometryId);
476515
477−
478516 batch.setResourceTexture(Albedo, nullptr);
479517 batch.setResourceTexture(Normal, nullptr);
480518 batch.setResourceTexture(Specular, nullptr);