Setting up taa job and debug ui

This commit is contained in:
samcake 2017-08-14 17:24:08 -07:00
parent c90c3717a7
commit dfc0bb8bcc
5 changed files with 146 additions and 10 deletions

View file

@ -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<GeometryCache>()->allocateID();
}
Antialiasing::~Antialiasing() {
auto geometryCache = DependencyManager::get<GeometryCache>();
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

View file

@ -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<TAAParams>;
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;
};
/*

View file

@ -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;
}
}

View file

@ -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(); });

View file

@ -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 }
}
}
}
}