1#include "TransparencyUpscaleTask.h"
4#include "Renderer/Renderer.h"
5#include "Renderer/RenderTarget.h"
6#include "Renderer/RenderStateUpdater.h"
7#include "Services/Time.h"
8#include "Services/Variables.h"
14 struct UpscaleParameters
16 uint32_t width, height;
20void Cogs::Core::TransparencyUpscaleTask::initialize(RenderTaskContext * context)
22 auto device = context->renderer->getDevice();
23 auto buffers = device->getBuffers();
26 desc.vs =
"Engine/FullscreenV3T2VS.hlsl";
27 desc.ps =
"Engine/TransparencyUpscalePS.hlsl";
28 effect = context->renderer->getEffectCache().loadEffect(context, desc);
32 buffers->annotate(parameterHandle,
"UpscaleParameters");
35void Cogs::Core::TransparencyUpscaleTask::cleanup(RenderTaskContext * context)
37 auto device = context->renderer->getDevice();
38 auto buffers = device->getBuffers();
39 context->renderer->getEffectCache().release(context, effect);
40 buffers->releaseBuffer(parameterHandle);
43void Cogs::Core::TransparencyUpscaleTask::apply(RenderTaskContext * taskContext)
45 RenderInstrumentationScope(taskContext->device->getImmediateContext(), SCOPE_RENDERING,
"TransparencyUpscaleTask::apply");
47 uint32_t frame = taskContext->context->time->getFrame();
49 RenderTexture *color = (frame%2==0) ? input.resources[0].renderTexure : input.resources[1].renderTexure;
50 auto deferredRenderTarget = input.get(RenderResourceType::RenderTarget)->renderTarget;
51 auto renderTarget = output.get(RenderResourceType::RenderTarget)->renderTarget;
53 auto device = taskContext->renderer->getDevice();
54 auto deviceContext = device->getImmediateContext();
57 deviceContext->setEffect(effect->handle);
59 deviceContext->setRenderTarget(renderTarget->renderTargetHandle, renderTarget->depthTargetHandle);
60 deviceContext->setViewport(0, 0,
static_cast<float>(renderTarget->width),
static_cast<float>(renderTarget->height));
62 deviceContext->setDepthStencilState(taskContext->states->noTestDepthStencilStateHandle);
63 deviceContext->setRasterizerState(taskContext->states->defaultRasterizerStateHandle);
65 deviceContext->setTexture(
"oitTexture", 0, color->textureHandle);
66 deviceContext->setTexture(
"colorTexture", 0, deferredRenderTarget->textures[0]->textureHandle);
67 deviceContext->setTexture(
"depthTexture", 1, deferredRenderTarget->depth->textureHandle);
73 parameters->width = taskContext->context->variables->get(
"renderer.oit.UpscaleWidth", 1);
74 parameters->height = taskContext->context->variables->get(
"renderer.oit.UpscaleHeight", 1);
78 deviceContext->setConstantBuffer(
"UpscaleParameters", parameterHandle);
80 deviceContext->setVertexBuffers(
nullptr, 0,
nullptr,
nullptr);
bool HandleIsValid(const ResourceHandle_t< T > &handle)
Check if the given resource is valid, that is not equal to NoHandle or InvalidHandle.
Contains all Cogs related functionality.
@ Write
The buffer can be mapped and written to by the CPU after creation.
@ ConstantBuffer
The buffer can be bound as input to effects as a constant buffer.
Contains an effect description used to load a single effect.
static const Handle_t NoHandle
Represents a handle to nothing.
@ WriteDiscard
Write access. When unmapping the graphics system will discard the old contents of the resource.
Provides RAII style mapping of a buffer resource.
@ TriangleList
List of triangles.
@ Dynamic
Buffer will be loaded and modified with some frequency.