Adding simple visibility pass
This commit is contained in:
@@ -20,7 +20,9 @@ target_sources(Engine
|
||||
TextPass.h
|
||||
TextPass.cpp
|
||||
UIPass.h
|
||||
UIPass.cpp)
|
||||
UIPass.cpp
|
||||
VisibilityPass.h
|
||||
VisibilityPass.cpp)
|
||||
|
||||
target_sources(Engine
|
||||
PUBLIC FILE_SET HEADERS
|
||||
@@ -35,4 +37,5 @@ target_sources(Engine
|
||||
RenderPass.h
|
||||
SkyboxRenderPass.h
|
||||
TextPass.h
|
||||
UIPass.h)
|
||||
UIPass.h
|
||||
VisibilityPass.h)
|
||||
@@ -40,7 +40,9 @@ void LightCullingPass::beginFrame(const Component::Camera& cam)
|
||||
.owner = Gfx::QueueType::COMPUTE
|
||||
}
|
||||
};
|
||||
oLightIndexCounter->rotateBuffer(sizeof(uint32));
|
||||
oLightIndexCounter->updateContents(counterReset);
|
||||
tLightIndexCounter->rotateBuffer(sizeof(uint32));
|
||||
tLightIndexCounter->updateContents(counterReset);
|
||||
oLightIndexCounter->pipelineBarrier(
|
||||
Gfx::SE_ACCESS_MEMORY_WRITE_BIT, Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
#include "VisibilityPass.h"
|
||||
|
||||
using namespace Seele;
|
||||
|
||||
VisibilityPass::VisibilityPass(Gfx::PGraphics graphics, PScene scene)
|
||||
: RenderPass(graphics, scene)
|
||||
{
|
||||
}
|
||||
|
||||
VisibilityPass::~VisibilityPass()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void VisibilityPass::beginFrame(const Component::Camera& cam)
|
||||
{
|
||||
RenderPass::beginFrame(cam);
|
||||
visibilityDescriptor->reset();
|
||||
visibilitySet = visibilityDescriptor->allocateDescriptorSet();
|
||||
visibilitySet->updateTexture(0, visibilityAttachment->getTexture());
|
||||
visibliitySet->updateBuffer(StaticMeshVertexData::getInstance()->get)
|
||||
}
|
||||
|
||||
void VisibilityPass::render()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void VisibilityPass::endFrame()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void VisibilityPass::publishOutputs()
|
||||
{
|
||||
visibilityDescriptor = graphcis->createDescriptorLayout("pVisibilityParams");
|
||||
visibilityDescriptor->addDescriptorBinding(Gfx::DescriptorBinding{ .binding = 0, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_SAMPLED_IMAGE, });
|
||||
visibilityDescriptor->addDescriptorBinding(Gfx::DescriptorBinding{ .binding = 1, .descriptorType = Gfx::SE_DESCRIPTOR_TYPE_STORAGE_BUFFER, .access = Gfx::SE_DESCRIPTOR_ACCESS_READ_WRITE_BIT, });
|
||||
visibilityDescriptor->create();
|
||||
|
||||
visibilityLayout = graphics->createPipelineLayout("VisibilityLayout");
|
||||
visibilityLayout->addDescriptorLayout(viewParamsLayout);
|
||||
visibilityLayout->addDescriptorLayout(visibilityDescriptor);
|
||||
|
||||
ShaderCreateInfo createInfo = {
|
||||
.name = "Visibility",
|
||||
.mainModule = "VisibilityCompute",
|
||||
.entryPoint = "computeMain",
|
||||
.rootSignature = visibilityLayout,
|
||||
};
|
||||
visibilityShader = graphics->createComputeShader(createInfo);
|
||||
visibilityLayout->create();
|
||||
|
||||
Gfx::ComputePipelineCreateInfo pipelineInfo;
|
||||
pipelineInfo.computeShader = visibilityShader;
|
||||
pipelineInfo.pipelineLayout = std::move(visibilityLayout);
|
||||
visibilityPipeline = graphics->createComputePipeline(std::move(pipelineInfo));
|
||||
}
|
||||
|
||||
void VisibilityPass::createRenderPass()
|
||||
{
|
||||
visibilityAttachment = resources->requestRenderTarget("VISIBILITY");
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
#include "RenderPass.h"
|
||||
|
||||
namespace Seele
|
||||
{
|
||||
class VisibilityPass : public RenderPass
|
||||
{
|
||||
public:
|
||||
VisibilityPass(Gfx::PGraphics graphics, PScene scene);
|
||||
VisibilityPass(VisibilityPass&&) = default;
|
||||
VisibilityPass& operator=(VisibilityPass&&) = default;
|
||||
virtual ~VisibilityPass();
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
virtual void createRenderPass() override;
|
||||
uint64 allocate
|
||||
private:
|
||||
Gfx::RenderTargetAttachment visibilityAttachment;
|
||||
Gfx::PDescriptorSet visibilitySet;
|
||||
Gfx::ODescriptorLayout visibilityDescriptor;
|
||||
Gfx::OPipelineLayout visibilityLayout;
|
||||
Gfx::PComputePipeline visibilityPipeline;
|
||||
|
||||
// Holds culling information for every meshlet for each instance
|
||||
Gfx::OShaderBuffer cullingBuffer;
|
||||
};
|
||||
DEFINE_REF(VisibilityPass)
|
||||
}
|
||||
@@ -117,8 +117,6 @@ namespace Seele
|
||||
Gfx::OShaderBuffer meshletBuffer;
|
||||
Gfx::OShaderBuffer vertexIndicesBuffer;
|
||||
Gfx::OShaderBuffer primitiveIndicesBuffer;
|
||||
// Holds culling information for every meshlet for each instance
|
||||
Gfx::OShaderBuffer cullingBuffer;
|
||||
Gfx::OShaderBuffer cullingOffsetBuffer;
|
||||
// for legacy pipeline
|
||||
Gfx::OIndexBuffer indexBuffer;
|
||||
|
||||
Reference in New Issue
Block a user