From 4c3ddfbff9e9b7a9efd75498b4555424746579a5 Mon Sep 17 00:00:00 2001 From: Sam Cake Date: Tue, 16 May 2017 01:01:19 -0700 Subject: [PATCH] Adding debuging of the ambient lighting --- .../render-utils/src/RenderDeferredTask.cpp | 2 + libraries/render-utils/src/ZoneRenderer.cpp | 81 +++++++++++++++++++ libraries/render-utils/src/ZoneRenderer.h | 20 +++++ .../render-utils/src/zone_drawAmbient.slf | 39 +++++++++ 4 files changed, 142 insertions(+) create mode 100644 libraries/render-utils/src/zone_drawAmbient.slf diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 4264cfb424..492875a4ac 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -206,6 +206,8 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren auto statusIconMap = DependencyManager::get()->getImageTexture(iconMapPath, image::TextureUsage::STRICT_TEXTURE); task.addJob("DrawStatus", opaques, DrawStatus(statusIconMap)); } + + task.addJob("DebugZoneLighting"); } diff --git a/libraries/render-utils/src/ZoneRenderer.cpp b/libraries/render-utils/src/ZoneRenderer.cpp index 00b4565edf..e7bcda2036 100644 --- a/libraries/render-utils/src/ZoneRenderer.cpp +++ b/libraries/render-utils/src/ZoneRenderer.cpp @@ -10,9 +10,18 @@ // #include "ZoneRenderer.h" + +#include +#include + #include #include +#include "DeferredLightingEffect.h" + +#include "zone_drawAmbient_frag.h" + + using namespace render; class SetupZones { @@ -45,3 +54,75 @@ void SetupZones::run(const RenderContextPointer& context, const Inputs& inputs) render::renderItems(context, inputs); } + +const gpu::PipelinePointer& DebugZoneLighting::getKeyLightPipeline() { + if (!_keyLightPipeline) { + } + return _keyLightPipeline; +} + +const gpu::PipelinePointer& DebugZoneLighting::getAmbientPipeline() { + if (!_ambientPipeline) { + auto vs = gpu::StandardShaderLib::getDrawTransformUnitQuadVS(); + auto ps = gpu::Shader::createPixel(std::string(zone_drawAmbient_frag)); + gpu::ShaderPointer program = gpu::Shader::createProgram(vs, ps); + + gpu::Shader::BindingSet slotBindings; + //slotBindings.insert(gpu::Shader::Binding(std::string("blurParamsBuffer"), BlurTask_ParamsSlot)); + //slotBindings.insert(gpu::Shader::Binding(std::string("sourceMap"), BlurTask_SourceSlot)); + gpu::Shader::makeProgram(*program, slotBindings); + + gpu::StatePointer state = gpu::StatePointer(new gpu::State()); + _ambientPipeline = gpu::Pipeline::create(program, state); + } + return _ambientPipeline; +} +const gpu::PipelinePointer& DebugZoneLighting::getBackgroundPipeline() { + if (!_backgroundPipeline) { + } + return _backgroundPipeline; +} + +void DebugZoneLighting::run(const render::RenderContextPointer& context) { + RenderArgs* args = context->args; + + auto lightStage = DependencyManager::get()->getLightStage(); + + const auto light = lightStage->getLight(0); + model::LightPointer keyAmbiLight; + if (lightStage && lightStage->_currentFrame._ambientLights.size()) { + keyAmbiLight = lightStage->getLight(lightStage->_currentFrame._ambientLights.front()); + } else { + // keyAmbiLight = _allocatedLights[_globalLights.front()]; + } + +/* if (lightBufferUnit >= 0) { + batch.setUniformBuffer(lightBufferUnit, keySunLight->getLightSchemaBuffer()); + }*/ + + gpu::doInBatch(args->_context, [=](gpu::Batch& batch) { + + batch.setViewportTransform(args->_viewport); + auto viewFrustum = args->getViewFrustum(); + batch.setProjectionTransform(viewFrustum.getProjection()); + batch.resetViewTransform(); + + Transform model; + model.setTranslation(glm::vec3(0.0, 0.0, -10.0)); + batch.setModelTransform(model); + + batch.setPipeline(getAmbientPipeline()); + if (keyAmbiLight) { + if (keyAmbiLight->hasAmbient()) { + batch.setUniformBuffer(0, keyAmbiLight->getAmbientSchemaBuffer()); + } + + if (keyAmbiLight->getAmbientMap()) { + batch.setResourceTexture(0, keyAmbiLight->getAmbientMap()); + } + } + + batch.draw(gpu::TRIANGLE_STRIP, 4); + + }); +} diff --git a/libraries/render-utils/src/ZoneRenderer.h b/libraries/render-utils/src/ZoneRenderer.h index cbbfbcb84e..1ca34892c9 100644 --- a/libraries/render-utils/src/ZoneRenderer.h +++ b/libraries/render-utils/src/ZoneRenderer.h @@ -50,4 +50,24 @@ protected: int _maxDrawn; // initialized by Config }; +class DebugZoneLighting { +public: + using JobModel = render::Job::Model; + + DebugZoneLighting() {} + + void run(const render::RenderContextPointer& context); + +protected: + + gpu::PipelinePointer _keyLightPipeline; + gpu::PipelinePointer _ambientPipeline; + gpu::PipelinePointer _backgroundPipeline; + + const gpu::PipelinePointer& getKeyLightPipeline(); + const gpu::PipelinePointer& getAmbientPipeline(); + const gpu::PipelinePointer& getBackgroundPipeline(); +}; + + #endif \ No newline at end of file diff --git a/libraries/render-utils/src/zone_drawAmbient.slf b/libraries/render-utils/src/zone_drawAmbient.slf new file mode 100644 index 0000000000..aff4bcb47f --- /dev/null +++ b/libraries/render-utils/src/zone_drawAmbient.slf @@ -0,0 +1,39 @@ +<@include gpu/Config.slh@> +<$VERSION_HEADER$> +// Generated on <$_SCRIBE_DATE$> +// +// Created by Sam Gateau on 5/16/17. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +<@include model/Light.slh@> + +<@include LightingModel.slh@> + !> +<$declareLightAmbientBuffer()$> + +<@include LightAmbient.slh@> + !> + +<$declareLightingAmbient(_SCRIBE_NULL, 1, _SCRIBE_NULL, _SCRIBE_NULL)$> + +in vec2 varTexCoord0; +out vec4 _fragColor; + +void main(void) { + + LightAmbient lightAmbient = getLightAmbient(); + + // _fragColor = vec4(varTexCoord0, 0.0, 1.0); + + float z = sqrt( dot(varTexCoord0.xy, varTexCoord0.xy)); + vec3 dir = vec3(varTexCoord0.xy, z); + + vec3 ambient = sphericalHarmonics_evalSphericalLight(getLightAmbientSphere(lightAmbient), dir).xyz; + _fragColor = vec4(ambient, 1.0); +} + +