Files
Seele/src/Engine/Graphics/RenderPass/RenderPass.cpp
T

53 lines
2.1 KiB
C++
Raw Normal View History

2023-11-05 10:36:01 +01:00
#include "RenderPass.h"
using namespace Seele;
2024-06-09 12:20:04 +02:00
RenderPass::RenderPass(Gfx::PGraphics graphics, PScene scene) : graphics(graphics), scene(scene) {
2023-11-05 10:36:01 +01:00
2024-04-19 18:23:36 +02:00
viewParamsLayout = graphics->createDescriptorLayout("pViewParams");
2024-06-09 12:20:04 +02:00
viewParamsLayout->addDescriptorBinding(Gfx::DescriptorBinding{
.binding = 0,
.descriptorType = Gfx::SE_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
});
2023-11-05 10:36:01 +01:00
UniformBufferCreateInfo uniformInitializer = {
2024-06-09 12:20:04 +02:00
.sourceData =
{
.size = sizeof(ViewParameter),
.data = (uint8*)&viewParams,
},
2023-11-05 10:36:01 +01:00
.dynamic = true,
2024-04-20 21:35:43 +02:00
.name = "viewParamsBuffer",
2023-11-05 10:36:01 +01:00
};
viewParamsBuffer = graphics->createUniformBuffer(uniformInitializer);
viewParamsLayout->create();
}
2024-06-09 12:20:04 +02:00
RenderPass::~RenderPass() {}
2023-11-05 10:36:01 +01:00
2024-06-09 12:20:04 +02:00
void RenderPass::beginFrame(const Component::Camera& cam) {
2023-11-05 10:36:01 +01:00
viewParams = {
.viewMatrix = cam.getViewMatrix(),
.inverseViewMatrix = glm::inverse(cam.getViewMatrix()),
2023-11-05 10:36:01 +01:00
.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,
};
2024-05-22 10:30:45 +02:00
viewParamsBuffer->rotateBuffer(sizeof(ViewParameter));
2023-11-05 10:36:01 +01:00
viewParamsBuffer->updateContents(uniformUpdate);
2024-06-09 12:20:04 +02: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();
}
2024-06-09 12:20:04 +02:00
void RenderPass::setResources(PRenderGraphResources _resources) { resources = _resources; }
2023-11-05 10:36:01 +01:00
2024-06-09 12:20:04 +02:00
void RenderPass::setViewport(Gfx::PViewport _viewport) { viewport = _viewport; }