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
39 emit dirty();39 emit dirty();
40}40}
41 41
42enum Slot {42enum TextureSlot {
43 Albedo = 0,43 Albedo = 0,
44 Normal,44 Normal,
45 Specular,45 Specular,
@@ -57,7 +57,11 @@ enum Slot { · 11 unmodified lines
57 Velocity,57 Velocity,
58};58};
59 59
60 60enum ParamSlot {
61 CameraCorrection = 0,
62 DeferredFrameTransform,
63 ShadowTransform
64};
61 65
62static const std::string DEFAULT_ALBEDO_SHADER {66static const std::string DEFAULT_ALBEDO_SHADER {
63 "vec4 getFragmentColor() {"67 "vec4 getFragmentColor() {"
@@ -128,12 +132,14 @@ static const std::string DEFAULT_DEPTH_SHADER { · 64 unmodified lines
128 " return vec4(vec3(texture(depthMap, uv).x), 1.0);"132 " return vec4(vec3(texture(depthMap, uv).x), 1.0);"
129 " }"133 " }"
130};134};
135
131static const std::string DEFAULT_LIGHTING_SHADER {136static const std::string DEFAULT_LIGHTING_SHADER {
132 "vec4 getFragmentColor() {"137 "vec4 getFragmentColor() {"
133 " return vec4(pow(texture(lightingMap, uv).xyz, vec3(1.0 / 2.2)), 1.0);"138 " return vec4(pow(texture(lightingMap, uv).xyz, vec3(1.0 / 2.2)), 1.0);"
134 " }"139 " }"
135};140};
136static const std::string DEFAULT_SHADOW_SHADER {141
142static const std::string DEFAULT_SHADOW_SHADER{
137 "uniform sampler2DShadow shadowMap;"143 "uniform sampler2DShadow shadowMap;"
138 "vec4 getFragmentColor() {"144 "vec4 getFragmentColor() {"
139 " for (int i = 255; i >= 0; --i) {"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
155static 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
149static const std::string DEFAULT_LINEAR_DEPTH_SHADER {176static const std::string DEFAULT_LINEAR_DEPTH_SHADER {
150 "vec4 getFragmentColor() {"177 "vec4 getFragmentColor() {"
151 " return vec4(vec3(1.0 - texture(linearDepthMap, uv).x * 0.01), 1.0);"178 " return vec4(vec3(1.0 - texture(linearDepthMap, uv).x * 0.01), 1.0);"
152 " }"179 "}"
153};180};
154 181
155static const std::string DEFAULT_HALF_LINEAR_DEPTH_SHADER{182static 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 return DEFAULT_SCATTERING_SHADER;319 return DEFAULT_SCATTERING_SHADER;
293 case LightingMode:320 case LightingMode:
294 return DEFAULT_LIGHTING_SHADER;321 return DEFAULT_LIGHTING_SHADER;
295 case ShadowMode:322 case ShadowCascade0Mode:
323 case ShadowCascade1Mode:
324 case ShadowCascade2Mode:
325 case ShadowCascade3Mode:
296 return DEFAULT_SHADOW_SHADER;326 return DEFAULT_SHADOW_SHADER;
327 case ShadowCascadeIndicesMode:
328 return DEFAULT_SHADOW_CASCADE_SHADER;
297 case LinearDepthMode:329 case LinearDepthMode:
298 return DEFAULT_LINEAR_DEPTH_SHADER;330 return DEFAULT_LINEAR_DEPTH_SHADER;
299 case HalfLinearDepthMode:331 case HalfLinearDepthMode:
@@ -346,8 +378,7 @@ bool DebugDeferredBuffer::pipelineNeedsUpdate(Mode mode, std::string customFile) · 46 unmodified lines
346 378
347const gpu::PipelinePointer& DebugDeferredBuffer::getPipeline(Mode mode, std::string customFile) {379const gpu::PipelinePointer& DebugDeferredBuffer::getPipeline(Mode mode, std::string customFile) {
348 if (pipelineNeedsUpdate(mode, customFile)) {380 if (pipelineNeedsUpdate(mode, customFile)) {
349 static const std::string VERTEX_SHADER { debug_deferred_buffer_vert };381 static const std::string FRAGMENT_SHADER { debug_deferred_buffer_frag::getSource() };
350 static const std::string FRAGMENT_SHADER { debug_deferred_buffer_frag };
351 static const std::string SOURCE_PLACEHOLDER { "//SOURCE_PLACEHOLDER" };382 static const std::string SOURCE_PLACEHOLDER { "//SOURCE_PLACEHOLDER" };
352 static const auto SOURCE_PLACEHOLDER_INDEX = FRAGMENT_SHADER.find(SOURCE_PLACEHOLDER);383 static const auto SOURCE_PLACEHOLDER_INDEX = FRAGMENT_SHADER.find(SOURCE_PLACEHOLDER);
353 Q_ASSERT_X(SOURCE_PLACEHOLDER_INDEX != std::string::npos, Q_FUNC_INFO,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 bakedFragmentShader.replace(SOURCE_PLACEHOLDER_INDEX, SOURCE_PLACEHOLDER.size(),388 bakedFragmentShader.replace(SOURCE_PLACEHOLDER_INDEX, SOURCE_PLACEHOLDER.size(),
358 getShaderSourceCode(mode, customFile));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 const auto ps = gpu::Shader::createPixel(bakedFragmentShader);392 const auto ps = gpu::Shader::createPixel(bakedFragmentShader);
362 const auto program = gpu::Shader::createProgram(vs, ps);393 const auto program = gpu::Shader::createProgram(vs, ps);
363 394
364 gpu::Shader::BindingSet slotBindings;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 slotBindings.insert(gpu::Shader::Binding("albedoMap", Albedo));400 slotBindings.insert(gpu::Shader::Binding("albedoMap", Albedo));
366 slotBindings.insert(gpu::Shader::Binding("normalMap", Normal));401 slotBindings.insert(gpu::Shader::Binding("normalMap", Normal));
367 slotBindings.insert(gpu::Shader::Binding("specularMap", Specular));402 slotBindings.insert(gpu::Shader::Binding("specularMap", Specular));
@@ -415,6 +450,7 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 47 unmodified lines
415 auto& surfaceGeometryFramebuffer = inputs.get2();450 auto& surfaceGeometryFramebuffer = inputs.get2();
416 auto& ambientOcclusionFramebuffer = inputs.get3();451 auto& ambientOcclusionFramebuffer = inputs.get3();
417 auto& velocityFramebuffer = inputs.get4();452 auto& velocityFramebuffer = inputs.get4();
453 auto& frameTransform = inputs.get5();
418 454
419 gpu::doInBatch("DebugDeferredBuffer::run", args->_context, [&](gpu::Batch& batch) {455 gpu::doInBatch("DebugDeferredBuffer::run", args->_context, [&](gpu::Batch& batch) {
420 batch.enableStereo(false);456 batch.enableStereo(false);
@@ -433,8 +469,8 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 12 unmodified lines
433 469
434 // TODO REMOVE: Temporary until UI470 // TODO REMOVE: Temporary until UI
435 auto first = _customPipelines.begin()->first;471 auto first = _customPipelines.begin()->first;
436 472 auto pipeline = getPipeline(_mode, first);
437 batch.setPipeline(getPipeline(_mode, first));473 batch.setPipeline(pipeline);
438 474
439 if (deferredFramebuffer) {475 if (deferredFramebuffer) {
440 batch.setResourceTexture(Albedo, deferredFramebuffer->getDeferredColorTexture());476 batch.setResourceTexture(Albedo, deferredFramebuffer->getDeferredColorTexture());
@@ -453,7 +489,10 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 12 unmodified lines
453 auto lightAndShadow = lightStage->getCurrentKeyLightAndShadow();489 auto lightAndShadow = lightStage->getCurrentKeyLightAndShadow();
454 const auto& globalShadow = lightAndShadow.second;490 const auto& globalShadow = lightAndShadow.second;
455 if (globalShadow) {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 if (linearDepthTarget) {498 if (linearDepthTarget) {
@@ -474,7 +513,6 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I · 14 unmodified lines
474 const glm::vec2 topRight(_size.z, _size.w);513 const glm::vec2 topRight(_size.z, _size.w);
475 geometryBuffer->renderQuad(batch, bottomLeft, topRight, color, _geometryId);514 geometryBuffer->renderQuad(batch, bottomLeft, topRight, color, _geometryId);
476 515
477
478 batch.setResourceTexture(Albedo, nullptr);516 batch.setResourceTexture(Albedo, nullptr);
479 batch.setResourceTexture(Normal, nullptr);517 batch.setResourceTexture(Normal, nullptr);
480 batch.setResourceTexture(Specular, nullptr);518 batch.setResourceTexture(Specular, nullptr);