2023-11-05 10:36:01 +01:00
|
|
|
#include "RenderPass.h"
|
|
|
|
|
|
|
|
|
|
using namespace Seele;
|
|
|
|
|
|
|
|
|
|
RenderPass::RenderPass(Gfx::PGraphics graphics, PScene scene)
|
|
|
|
|
: graphics(graphics)
|
|
|
|
|
, scene(scene)
|
|
|
|
|
{
|
|
|
|
|
|
2024-04-19 18:23:36 +02:00
|
|
|
viewParamsLayout = graphics->createDescriptorLayout("pViewParams");
|
2023-11-05 10:36:01 +01:00
|
|
|
viewParamsLayout->addDescriptorBinding(0, Gfx::SE_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
|
|
|
|
|
UniformBufferCreateInfo uniformInitializer = {
|
|
|
|
|
.sourceData = {
|
|
|
|
|
.size = sizeof(ViewParameter),
|
|
|
|
|
.data = (uint8*)&viewParams,
|
|
|
|
|
},
|
|
|
|
|
.dynamic = true,
|
|
|
|
|
};
|
|
|
|
|
viewParamsBuffer = graphics->createUniformBuffer(uniformInitializer);
|
|
|
|
|
viewParamsLayout->create();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RenderPass::~RenderPass()
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
void RenderPass::beginFrame(const Component::Camera& cam)
|
|
|
|
|
{
|
|
|
|
|
viewParams = {
|
|
|
|
|
.viewMatrix = cam.getViewMatrix(),
|
|
|
|
|
.projectionMatrix = viewport->getProjectionMatrix(),
|
2024-02-23 08:31:21 +01:00
|
|
|
.inverseProjection = glm::inverse(viewport->getProjectionMatrix()),
|
2023-11-05 10:36:01 +01:00
|
|
|
.cameraPosition = Vector4(cam.getCameraPosition(), 1),
|
2023-11-15 00:06:00 +01:00
|
|
|
.screenDimensions = Vector2(static_cast<float>(viewport->getWidth()), static_cast<float>(viewport->getHeight())),
|
2023-11-05 10:36:01 +01:00
|
|
|
};
|
|
|
|
|
DataSource uniformUpdate = {
|
|
|
|
|
.size = sizeof(ViewParameter),
|
|
|
|
|
.data = (uint8*)&viewParams,
|
|
|
|
|
};
|
|
|
|
|
viewParamsBuffer->updateContents(uniformUpdate);
|
2024-01-26 16:26:22 +01:00
|
|
|
viewParamsBuffer->pipelineBarrier(
|
|
|
|
|
Gfx::SE_ACCESS_TRANSFER_WRITE_BIT,
|
|
|
|
|
Gfx::SE_PIPELINE_STAGE_TRANSFER_BIT,
|
|
|
|
|
Gfx::SE_ACCESS_MEMORY_READ_BIT,
|
|
|
|
|
Gfx::SE_PIPELINE_STAGE_ALL_COMMANDS_BIT);
|
2023-11-05 10:36:01 +01:00
|
|
|
viewParamsLayout->reset();
|
|
|
|
|
viewParamsSet = viewParamsLayout->allocateDescriptorSet();
|
|
|
|
|
viewParamsSet->updateBuffer(0, viewParamsBuffer);
|
|
|
|
|
viewParamsSet->writeChanges();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RenderPass::setResources(PRenderGraphResources _resources)
|
|
|
|
|
{
|
|
|
|
|
resources = _resources;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void RenderPass::setViewport(Gfx::PViewport _viewport)
|
|
|
|
|
{
|
|
|
|
|
viewport = _viewport;
|
|
|
|
|
publishOutputs();
|
2024-04-19 18:23:36 +02:00
|
|
|
}
|