diff --git a/libraries/render-utils/src/AntialiasingEffect.cpp b/libraries/render-utils/src/AntialiasingEffect.cpp index 75f5402edc..32bc57f7c5 100644 --- a/libraries/render-utils/src/AntialiasingEffect.cpp +++ b/libraries/render-utils/src/AntialiasingEffect.cpp @@ -171,20 +171,14 @@ void Antialiasing::run(const render::RenderContextPointer& renderContext, const } */ -#include "fxaa_vert.h" #include "fxaa_frag.h" #include "fxaa_blend_frag.h" Antialiasing::Antialiasing() { - _geometryId = DependencyManager::get()->allocateID(); } Antialiasing::~Antialiasing() { - auto geometryCache = DependencyManager::get(); - if (geometryCache) { - geometryCache->releaseID(_geometryId); - } } const gpu::PipelinePointer& Antialiasing::getAntialiasingPipeline() { @@ -201,8 +195,6 @@ const gpu::PipelinePointer& Antialiasing::getAntialiasingPipeline() { gpu::Shader::makeProgram(*program, slotBindings); - _texcoordOffsetLoc = program->getUniforms().findLocation("texcoordOffset"); - gpu::StatePointer state = gpu::StatePointer(new gpu::State()); PrepareStencil::testMask(*state); @@ -236,6 +228,12 @@ const gpu::PipelinePointer& Antialiasing::getBlendPipeline() { return _blendPipeline; } +void Antialiasing::configure(const Config& config) { + _params.edit().debugX = config.debugX; + _params.edit().blend = config.blend; +} + + void Antialiasing::run(const render::RenderContextPointer& renderContext, const gpu::FramebufferPointer& sourceBuffer) { assert(renderContext->args); assert(renderContext->args->hasViewFrustum()); @@ -269,6 +267,9 @@ void Antialiasing::run(const render::RenderContextPointer& renderContext, const batch.setResourceTexture(0, sourceBuffer->getRenderBuffer(0)); batch.setFramebuffer(_antialiasingBuffer); batch.setPipeline(getAntialiasingPipeline()); + + batch.setUniformBuffer(0, _params._buffer); + batch.draw(gpu::TRIANGLE_STRIP, 4); // Blend step diff --git a/libraries/render-utils/src/AntialiasingEffect.h b/libraries/render-utils/src/AntialiasingEffect.h index 8b17b328e4..ada8d5376d 100644 --- a/libraries/render-utils/src/AntialiasingEffect.h +++ b/libraries/render-utils/src/AntialiasingEffect.h @@ -18,10 +18,29 @@ class AntialiasingConfig : public render::Job::Config { Q_OBJECT + Q_PROPERTY(float debugX MEMBER debugX NOTIFY dirty) + Q_PROPERTY(float blend MEMBER blend NOTIFY dirty) + public: AntialiasingConfig() : render::Job::Config(true) {} + + float debugX{ 1.0f }; + float blend { 0.1f }; + +signals: + void dirty(); }; + +struct TAAParams { + float debugX{ 1.0f }; + float blend{ 0.1f }; + float spareA; + float spareB; + +}; +using TAAParamsBuffer = gpu::StructBuffer; + class Antialiasing { public: using Config = AntialiasingConfig; @@ -29,12 +48,15 @@ public: Antialiasing(); ~Antialiasing(); - void configure(const Config& config) {} + void configure(const Config& config); void run(const render::RenderContextPointer& renderContext, const gpu::FramebufferPointer& sourceBuffer); const gpu::PipelinePointer& getAntialiasingPipeline(); const gpu::PipelinePointer& getBlendPipeline(); + + + private: // Uniforms for AA @@ -46,7 +68,8 @@ private: gpu::PipelinePointer _antialiasingPipeline; gpu::PipelinePointer _blendPipeline; - int _geometryId { 0 }; + + TAAParamsBuffer _params; }; /* diff --git a/libraries/render-utils/src/taa.slf b/libraries/render-utils/src/taa.slf new file mode 100644 index 0000000000..bd55a40539 --- /dev/null +++ b/libraries/render-utils/src/taa.slf @@ -0,0 +1,45 @@ +<@include gpu/Config.slh@> +<$VERSION_HEADER$> +// Generated on <$_SCRIBE_DATE$> +// +// taa.frag +// fragment shader +// +// Created by Sam Gateau on 8/14/2017 +// 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 +// + + +#ifdef GL_ES +precision mediump float; +precision mediump int; +#endif + +uniform sampler2D colorTexture; +//uniform sampler2D historyTexture; + +in vec2 varTexCoord0; +layout(location = 0) out vec4 outFragColor; + +struct TAAParams +{ + float debugX; + float blend; + float spareA; + float spareB; +}; + +layout(std140, location=0) uniform taaParamsBuffer { + TAAParams params; +}; + +void main() { + outFragColor = vec4(texture(colorTexture, varTexCoord0).xyz, params.blend); + + if (varTexCoord0.x < params.debugX) { + outFragColor.a = 1.0; + } +} diff --git a/scripts/developer/utilities/render/antialiasing.js b/scripts/developer/utilities/render/antialiasing.js new file mode 100644 index 0000000000..c5a8f05a76 --- /dev/null +++ b/scripts/developer/utilities/render/antialiasing.js @@ -0,0 +1,21 @@ +// +// antialiasing.js +// +// Created by Sam Gateau on 8/14/2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html +// + +// Set up the qml ui +var qml = Script.resolvePath('antialiasing.qml'); +var window = new OverlayWindow({ + title: 'Antialiasing', + source: qml, + width: 400, height:400, +}); +window.setPosition(Window.innerWidth - 420, 50); +window.closed.connect(function() { Script.stop(); }); + + diff --git a/scripts/developer/utilities/render/antialiasing.qml b/scripts/developer/utilities/render/antialiasing.qml new file mode 100644 index 0000000000..c8b756945a --- /dev/null +++ b/scripts/developer/utilities/render/antialiasing.qml @@ -0,0 +1,46 @@ +// +// Antialiasing.qml +// +// Created by Sam Gateau on 8/14/2017 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html +// +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import "configSlider" +import "../lib/plotperf" + +Column { + spacing: 8 + Column { + id: antialiasing + spacing: 10 + + Column{ + ConfigSlider { + label: qsTr("Debug X") + integral: false + config: Render.getConfig("RenderMainView.Antialiasing") + property: "debugX" + max: 1.0 + min: 0.0 + } + ConfigSlider { + label: qsTr("History blend") + integral: false + config: Render.getConfig("RenderMainView.Antialiasing") + property: "blend" + max: 1.0 + min: 0.0 + } + CheckBox { + text: "Freeze " + checked: Render.getConfig("RenderMainView.JitterCam")["freeze"] + onCheckedChanged: { Render.getConfig("RenderMainView.JitterCam")["freeze"] = checked } + } + + } + } +}