From 0b51e3c129e6057e8aaaedd69c7f894c711746bd Mon Sep 17 00:00:00 2001 From: Anna Date: Tue, 9 Jul 2019 09:37:07 -0700 Subject: [PATCH] progress --- interface/src/ui/Snapshot.cpp | 2 +- libraries/render-utils/src/BloomEffect.cpp | 2 +- .../render-utils/src/RenderDeferredTask.cpp | 4 +-- .../render-utils/src/RenderForwardTask.cpp | 3 +- .../src/ToneMapAndResampleTask.cpp | 36 ++++++++++--------- 5 files changed, 24 insertions(+), 23 deletions(-) diff --git a/interface/src/ui/Snapshot.cpp b/interface/src/ui/Snapshot.cpp index 926588e4ca..363e7a5cf1 100644 --- a/interface/src/ui/Snapshot.cpp +++ b/interface/src/ui/Snapshot.cpp @@ -41,7 +41,7 @@ #include "MainWindow.h" #include "Snapshot.h" #include "SnapshotUploader.h" -#include "ToneMappingEffect.h" +#include "ToneMapAndResampleTask.h" // filename format: hifi-snap-by-%username%-on-%date%_%time%_@-%location%.jpg // %1 <= username, %2 <= date and time, %3 <= current location diff --git a/libraries/render-utils/src/BloomEffect.cpp b/libraries/render-utils/src/BloomEffect.cpp index 414a1c3f91..10df138fad 100644 --- a/libraries/render-utils/src/BloomEffect.cpp +++ b/libraries/render-utils/src/BloomEffect.cpp @@ -15,7 +15,7 @@ #include #include -#include +#include "ToneMapAndResampleTask.h" #include "render-utils/ShaderConstants.h" #define BLOOM_BLUR_LEVEL_COUNT 3 diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index cb7ef696ad..a4f1d6b6c9 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -29,7 +29,6 @@ #include #include #include -#include #include "RenderHifi.h" #include "render-utils/ShaderConstants.h" @@ -246,7 +245,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren { // Debug the bounds of the rendered items, still look at the zbuffer const auto extraDebugBuffers = RenderDeferredTaskDebug::ExtraBuffers(linearDepthTarget, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, ambientOcclusionUniforms, scatteringResource, velocityBuffer); const auto debugInputs = RenderDeferredTaskDebug::Input(fetchedItems, shadowTaskOutputs, lightingStageInputs, lightClusters, prepareDeferredOutputs, extraDebugBuffers, - deferredFrameTransform, jitter, lightingModel).asVarying(); + deferredFrameTransform, jitter, lightingModel).asVarying(); task.addJob("DebugRenderDeferredTask", debugInputs); } @@ -412,7 +411,6 @@ void RenderDeferredTaskDebug::build(JobModel& task, const render::Varying& input const auto debugZoneInputs = DebugZoneLighting::Inputs(deferredFrameTransform, lightFrame, backgroundFrame).asVarying(); task.addJob("DrawZoneStack", debugZoneInputs); - } diff --git a/libraries/render-utils/src/RenderForwardTask.cpp b/libraries/render-utils/src/RenderForwardTask.cpp index 0c13d2cfb8..c16af23218 100755 --- a/libraries/render-utils/src/RenderForwardTask.cpp +++ b/libraries/render-utils/src/RenderForwardTask.cpp @@ -19,7 +19,6 @@ #include #include #include -#include #include @@ -100,6 +99,8 @@ void RenderForwardTask::build(JobModel& task, const render::Varying& input, rend // GPU jobs: Start preparing the main framebuffer const auto scaledPrimaryFramebuffer = task.addJob("PreparePrimaryBuffer"); + qDebug() << "anna forward " << "scaled " << renderContext->args->_viewport.z << " x " << renderContext->args->_viewport.w; + // Prepare deferred, generate the shared Deferred Frame Transform. Only valid with the scaled frame buffer const auto deferredFrameTransform = task.addJob("DeferredFrameTransform"); diff --git a/libraries/render-utils/src/ToneMapAndResampleTask.cpp b/libraries/render-utils/src/ToneMapAndResampleTask.cpp index 521c23685d..474c56525a 100644 --- a/libraries/render-utils/src/ToneMapAndResampleTask.cpp +++ b/libraries/render-utils/src/ToneMapAndResampleTask.cpp @@ -34,7 +34,7 @@ void ToneMapAndResample::init(RenderArgs* args) { gpu::StatePointer blitState = gpu::StatePointer(new gpu::State()); // TODO why was this in the upsample task - //blitState->setDepthTest(gpu::State::DepthTest(false, false)); + blitState->setDepthTest(gpu::State::DepthTest(false, false)); blitState->setColorWriteMask(true, true, true, true); _pipeline = gpu::PipelinePointer(gpu::Pipeline::create(gpu::Shader::createProgram(toneMapping), blitState)); @@ -63,13 +63,16 @@ gpu::FramebufferPointer ToneMapAndResample::getResampledFrameBuffer(const gpu::F auto resampledFramebufferSize = glm::uvec2(glm::vec2(sourceFramebuffer->getSize()) * _factor); - if (!_destinationFrameBuffer || resampledFramebufferSize != _destinationFrameBuffer->getSize()) { - _destinationFrameBuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("ResampledOutput")); + _destinationFrameBuffer = gpu::FramebufferPointer(gpu::Framebuffer::create("ResampledOutput")); + + auto sampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR); + auto target = gpu::Texture::createRenderBuffer(sourceFramebuffer->getRenderBuffer(0)->getTexelFormat(), resampledFramebufferSize.x, resampledFramebufferSize.y, gpu::Texture::SINGLE_MIP, sampler); + _destinationFrameBuffer->setRenderBuffer(0, target); + + auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format + auto primaryDepthTexture = gpu::Texture::createRenderBuffer(depthFormat, resampledFramebufferSize.x, resampledFramebufferSize.y, gpu::Texture::SINGLE_MIP, sampler); + _destinationFrameBuffer->setDepthStencilBuffer(primaryDepthTexture, depthFormat); - auto sampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR); - auto target = gpu::Texture::createRenderBuffer(sourceFramebuffer->getRenderBuffer(0)->getTexelFormat(), resampledFramebufferSize.x, resampledFramebufferSize.y, gpu::Texture::SINGLE_MIP, sampler); - _destinationFrameBuffer->setRenderBuffer(0, target); - } return _destinationFrameBuffer; } @@ -84,9 +87,11 @@ void ToneMapAndResample::render(RenderArgs* args, const gpu::TexturePointer& lig return; } - //auto framebufferSize = glm::ivec2(lightingBuffer->getDimensions()); + const auto destBufferSize = destinationFramebuffer->getSize(); - auto framebufferSize = destinationFramebuffer->getSize(); + auto srcBufferSize = glm::ivec2(lightingBuffer->getDimensions()); + + glm::ivec4 destViewport{ 0, 0, destBufferSize.x, destBufferSize.y }; gpu::doInBatch("ToneMapAndResample::render", args->_context, [&](gpu::Batch& batch) { batch.enableStereo(false); @@ -95,10 +100,10 @@ void ToneMapAndResample::render(RenderArgs* args, const gpu::TexturePointer& lig // FIXME: Generate the Luminosity map //batch.generateTextureMips(lightingBuffer); - batch.setViewportTransform(args->_viewport); + batch.setViewportTransform(destViewport); batch.setProjectionTransform(glm::mat4()); batch.resetViewTransform(); - batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(framebufferSize, args->_viewport)); + batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport)); batch.setPipeline(args->_renderMode == RenderArgs::MIRROR_RENDER_MODE ? _mirrorPipeline : _pipeline); batch.setUniformBuffer(render_utils::slot::buffer::ToneMappingParams, _parametersBuffer); @@ -106,13 +111,10 @@ void ToneMapAndResample::render(RenderArgs* args, const gpu::TexturePointer& lig batch.draw(gpu::TRIANGLE_STRIP, 4); }); - destinationFramebuffer = getResampledFrameBuffer(destinationFramebuffer); + //Set full final viewport + args->_viewport = destViewport; - const auto bufferSize = destinationFramebuffer->getSize(); - glm::ivec4 viewport{ 0, 0, bufferSize.x, bufferSize.y }; - - //Set full final viewport - args->_viewport = viewport; + // TODO access violation reading 0xFFFFFFFFFFFFFFFF } void ToneMapAndResample::configure(const Config& config) {