Graphics/FramePass: Add SetReadInput method

This commit is contained in:
Jérôme Leclercq 2021-12-13 23:44:34 +01:00
parent dfa2a0040a
commit 90ab0e9438
4 changed files with 17 additions and 13 deletions

View File

@ -672,10 +672,7 @@ int main()
Nz::PixelFormat::RGBA16F
});
bloomOutput = graph.AddAttachment({
"Backbuffer",
Nz::PixelFormat::RGBA16F
});
bloomOutput = graph.AddAttachmentProxy("Bloom output", lightOutput);
unsigned int bloomSize = 50'000;
bloomBrightOutput = graph.AddAttachment({
@ -889,11 +886,6 @@ int main()
builder.SetViewport(renderArea);
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
// Blit light output
builder.BindPipeline(*Nz::Graphics::Instance()->GetBlitPipeline(false));
builder.BindShaderBinding(0, *bloomBlitBinding);
builder.Draw(3);
// Blend bloom
builder.BindPipeline(*bloomBlendPipeline);
for (std::size_t i = 0; i < BloomSubdivisionCount; ++i)
@ -909,6 +901,8 @@ int main()
});
bloomBlendPass.AddInput(lightOutput);
bloomBlendPass.SetReadInput(0, false);
for (std::size_t i = 0; i < BloomSubdivisionCount; ++i)
bloomBlendPass.AddInput(bloomTextures[i * 2 + 1]);

View File

@ -61,10 +61,10 @@ namespace Nz
inline void SetCommandCallback(CommandCallback callback);
inline void SetClearColor(std::size_t outputIndex, const std::optional<Color>& color);
inline void SetDepthStencilClear(float depth, UInt32 stencil);
inline void SetExecutionCallback(ExecutionCallback callback);
inline void SetDepthStencilInput(std::size_t attachmentId);
inline void SetDepthStencilOutput(std::size_t attachmentId);
inline void SetExecutionCallback(ExecutionCallback callback);
inline void SetReadInput(std::size_t inputIndex, bool doesRead);
FramePass& operator=(const FramePass&) = delete;
FramePass& operator=(FramePass&&) noexcept = default;
@ -80,6 +80,7 @@ namespace Nz
struct Input
{
std::size_t attachmentId;
bool doesRead = true;
};
struct Output

View File

@ -126,6 +126,12 @@ namespace Nz
m_executionCallback = std::move(callback);
}
inline void FramePass::SetReadInput(std::size_t inputIndex, bool doesRead)
{
assert(inputIndex < m_inputs.size());
m_inputs[inputIndex].doesRead = doesRead;
}
inline void FramePass::SetDepthStencilInput(std::size_t attachmentId)
{
m_depthStencilInput = attachmentId;

View File

@ -658,7 +658,7 @@ namespace Nz
std::vector<RenderPass::SubpassDescription> subpassesDesc;
std::vector<RenderPass::SubpassDependency> subpassesDeps;
auto RegisterColorInput = [&](const FramePass::Input& input, PhysicalPassData::Subpass& subpass)
auto RegisterColorInputRead = [&](const FramePass::Input& input, PhysicalPassData::Subpass& subpass)
{
std::size_t textureId = Retrieve(m_pending.attachmentToTextures, input.attachmentId);
@ -769,7 +769,10 @@ namespace Nz
colorAttachments.reserve(subpassOutputs.size());
for (const auto& input : subpassInputs)
RegisterColorInput(input, subpass);
{
if (input.doesRead)
RegisterColorInputRead(input, subpass);
}
for (const auto& output : subpassOutputs)
{