diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index a785a5d2ec..c9297bb3d3 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -245,6 +245,12 @@ gpu::FramebufferPointer _copyFBO; void DeferredLightingEffect::render(RenderArgs* args) { gpu::Batch batch; + // Allocate the parameters buffer used by all the deferred shaders + if (!_parametersBuffer._buffer) { + Parameters parameters[2]; + _parametersBuffer = gpu::BufferView(std::make_shared(2 * sizeof(Parameters), (const gpu::Byte*) ¶meters)); + } + // Framebuffer copy operations cannot function as multipass stereo operations. batch.enableStereo(false); @@ -270,6 +276,8 @@ void DeferredLightingEffect::render(RenderArgs* args) { batch.setResourceTexture(3, framebufferCache->getPrimaryDepthTexture()); + + float sMin = args->_viewport.x / (float)framebufferSize.width(); float sWidth = args->_viewport.z / (float)framebufferSize.width(); float tMin = args->_viewport.y / (float)framebufferSize.height(); diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index 2fe56732cb..dd57117481 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -77,7 +77,7 @@ public: void setGlobalAtmosphere(const model::AtmospherePointer& atmosphere) { _atmosphere = atmosphere; } void setGlobalSkybox(const model::SkyboxPointer& skybox); - + private: DeferredLightingEffect() {} virtual ~DeferredLightingEffect() { } @@ -169,6 +169,24 @@ private: int _ambientLightMode = 0; model::AtmospherePointer _atmosphere; model::SkyboxPointer _skybox; + + // Class describing the uniform buffer with all the parameters common to the deferred shaders + class Parameters { + public: + + float nearVal{ 1.0f }; + float depthScale{ 1.0f }; + glm::vec2 spare0; // 2 spare scalars here + glm::vec2 depthTexCoordOffset{ 0.0f }; + glm::vec2 depthTexCoordScale{ 1.0f }; + + Parameters() {} + }; + typedef gpu::BufferView UniformBufferView; + UniformBufferView _parametersBuffer; + + const UniformBufferView& getParametersBuffer() const { return _parametersBuffer; } + }; class SimpleProgramKey { diff --git a/libraries/render-utils/src/spot_light.slf b/libraries/render-utils/src/spot_light.slf index 8ee48c4f30..3195e5af0d 100644 --- a/libraries/render-utils/src/spot_light.slf +++ b/libraries/render-utils/src/spot_light.slf @@ -21,12 +21,9 @@ // Everything about light <@include model/Light.slh@> -<@include gpu/Transform.slh@> - -<$declareStandardTransform()$> // The view Matrix -//uniform mat4 invViewMat; +uniform mat4 invViewMat; in vec4 _texCoord0; out vec4 _fragColor; @@ -42,10 +39,6 @@ void main(void) { discard; } - // Need the camera inv view mat - TransformCamera cam = getTransformCamera(); - mat4 invViewMat = cam._viewInverse; - // Need the light now Light light = getLight(); @@ -96,6 +89,5 @@ void main(void) { } - _fragColor = vec4(frag.position.xyz, 1); }