1#include "TransparencyRenderTask.h"
3#include "Rendering/ITextures.h"
5#include "Renderer/Renderer.h"
6#include "Renderer/RenderTexture.h"
7#include "Renderer/RenderBuffer.h"
8#include "Renderer/RenderTarget.h"
10#include "Renderer/RenderStateUpdater.h"
24void Cogs::Core::TransparencyRenderTask::initialize(RenderTaskContext * context)
29void Cogs::Core::TransparencyRenderTask::apply(RenderTaskContext * context)
31 RenderInstrumentationScope(context->device->getImmediateContext(), SCOPE_RENDERING,
"TransparencyRenderTask::apply");
33 auto renderTarget = output.get(RenderResourceType::RenderTarget)->renderTarget;
35 auto listTarget = output.get(
"ListBuffer")->renderBuffer;
36 auto nodeTarget = output.get(
"NodeBuffer")->renderBuffer;
37 auto dataTarget = output.get(
"DataBuffer")->renderBuffer;
39 auto renderer = context->renderer;
40 auto device = renderer->getDevice();
41 auto deviceContext = device->getImmediateContext();
43 auto renderList = input.get(RenderResourceType::RenderList)->renderList;
46 defaultViewportSize.x = renderTarget->width;
47 defaultViewportSize.y = renderTarget->height;
49 deviceContext->setDepthStencilState(renderer->getRenderStates().noWriteDepthStencilStateHandle);
50 deviceContext->setBlendState(renderer->getRenderStates().blendStates[
size_t(
BlendMode::None)].handle);
52 transparencyContext = TransparencyDrawContext{
59 deviceContext->setBufferCounter(transparencyContext.fragmentNodeBuffer, 0);
61 MappedBuffer<TransparencyParameters> parameters(deviceContext, transparencyContext.parameterBuffer,
MapMode::WriteDiscard);
64 parameters->allocated =
static_cast<int>(nodeTarget->bufferSize);
65 parameters->width = renderTarget->width;
69 permutationIndex = renderer->getEnginePermutations().getIndex(
"Transparent");
76 StateChangeFlags::ChangeAll & ~(StateChangeFlags::ChangeDepthStencilState | StateChangeFlags::ChangeBlendState));
79void Cogs::Core::TransparencyRenderTask::cleanup(RenderTaskContext * context)
81 context->renderer->getDevice()->getBuffers()->releaseBuffer(parameterHandle);
84void Cogs::Core::TransparencyRenderTask::applyMaterial(
const DrawContext & drawContext,
const RenderItem & item)
86 RenderListTask::applyMaterial(drawContext, item);
88 auto deviceContext = drawContext.deviceContext;
90 deviceContext->setConstantBuffer(
"TransparencyParameters", transparencyContext.parameterBuffer);
91 deviceContext->setBuffer(
"List", transparencyContext.listBuffer);
92 deviceContext->setBuffer(
"Node", transparencyContext.fragmentNodeBuffer);
93 deviceContext->setBuffer(
"Data", transparencyContext.fragmentDataBuffer);
@ None
No blending enabled for opaque shapes, defaults to Blend for transparent shapes.
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.
static const Handle_t InvalidHandle
Represents an invalid handle.
@ WriteDiscard
Write access. When unmapping the graphics system will discard the old contents of the resource.
@ Dynamic
Buffer will be loaded and modified with some frequency.