Refactoring camera
This commit is contained in:
@@ -88,11 +88,11 @@ BasePass::BasePass(Gfx::PGraphics graphics, PScene scene) : RenderPass(graphics)
|
||||
|
||||
BasePass::~BasePass() {}
|
||||
|
||||
void BasePass::beginFrame(const Component::Camera& cam) {
|
||||
RenderPass::beginFrame(cam);
|
||||
void BasePass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) {
|
||||
RenderPass::beginFrame(cam, transform);
|
||||
|
||||
cameraPos = cam.getCameraPosition();
|
||||
cameraForward = cam.getCameraForward();
|
||||
cameraPos = transform.getPosition();
|
||||
cameraForward = transform.getForward();
|
||||
|
||||
lightCullingLayout->reset();
|
||||
opaqueCulling = lightCullingLayout->allocateDescriptorSet();
|
||||
|
||||
@@ -11,7 +11,7 @@ class BasePass : public RenderPass {
|
||||
BasePass(BasePass&&) = default;
|
||||
BasePass& operator=(BasePass&&) = default;
|
||||
virtual ~BasePass();
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
|
||||
@@ -41,7 +41,7 @@ CachedDepthPass::CachedDepthPass(Gfx::PGraphics graphics, PScene scene) : Render
|
||||
|
||||
CachedDepthPass::~CachedDepthPass() {}
|
||||
|
||||
void CachedDepthPass::beginFrame(const Component::Camera& cam) { RenderPass::beginFrame(cam); }
|
||||
void CachedDepthPass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) { RenderPass::beginFrame(cam, transform); }
|
||||
|
||||
void CachedDepthPass::render() {
|
||||
query->beginQuery();
|
||||
|
||||
@@ -9,7 +9,7 @@ class CachedDepthPass : public RenderPass {
|
||||
CachedDepthPass(CachedDepthPass&&) = default;
|
||||
CachedDepthPass& operator=(CachedDepthPass&&) = default;
|
||||
virtual ~CachedDepthPass();
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
|
||||
@@ -65,7 +65,7 @@ DepthCullingPass::DepthCullingPass(Gfx::PGraphics graphics, PScene scene) : Rend
|
||||
|
||||
DepthCullingPass::~DepthCullingPass() {}
|
||||
|
||||
void DepthCullingPass::beginFrame(const Component::Camera& cam) { RenderPass::beginFrame(cam); }
|
||||
void DepthCullingPass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) { RenderPass::beginFrame(cam, transform); }
|
||||
|
||||
void DepthCullingPass::render() {
|
||||
query->beginQuery();
|
||||
|
||||
@@ -11,7 +11,7 @@ class DepthCullingPass : public RenderPass {
|
||||
DepthCullingPass(DepthCullingPass&&) = default;
|
||||
DepthCullingPass& operator=(DepthCullingPass&&) = default;
|
||||
virtual ~DepthCullingPass();
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
|
||||
@@ -14,8 +14,8 @@ LightCullingPass::LightCullingPass(Gfx::PGraphics graphics, PScene scene) : Rend
|
||||
|
||||
LightCullingPass::~LightCullingPass() {}
|
||||
|
||||
void LightCullingPass::beginFrame(const Component::Camera& cam) {
|
||||
RenderPass::beginFrame(cam);
|
||||
void LightCullingPass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) {
|
||||
RenderPass::beginFrame(cam, transform);
|
||||
|
||||
oLightIndexCounter->pipelineBarrier(Gfx::SE_ACCESS_MEMORY_WRITE_BIT | Gfx::SE_ACCESS_MEMORY_READ_BIT,
|
||||
Gfx::SE_PIPELINE_STAGE_COMPUTE_SHADER_BIT, Gfx::SE_ACCESS_MEMORY_WRITE_BIT,
|
||||
@@ -229,7 +229,7 @@ void LightCullingPass::setupFrustums() {
|
||||
numThreads = glm::ceil(glm::vec4(viewportWidth / (float)BLOCK_SIZE, viewportHeight / (float)BLOCK_SIZE, 1, 0));
|
||||
numThreadGroups = glm::ceil(glm::vec4(numThreads.x / (float)BLOCK_SIZE, numThreads.y / (float)BLOCK_SIZE, 1, 0));
|
||||
|
||||
RenderPass::beginFrame(Component::Camera());
|
||||
RenderPass::beginFrame(Component::Camera(), Component::Transform());
|
||||
|
||||
dispatchParamsLayout = graphics->createDescriptorLayout("pDispatchParams");
|
||||
dispatchParamsLayout->addDescriptorBinding(Gfx::DescriptorBinding{
|
||||
|
||||
@@ -15,7 +15,7 @@ class LightCullingPass : public RenderPass {
|
||||
LightCullingPass(LightCullingPass&&) = default;
|
||||
LightCullingPass& operator=(LightCullingPass&&) = default;
|
||||
virtual ~LightCullingPass();
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
|
||||
@@ -65,11 +65,11 @@ RayTracingPass::RayTracingPass(Gfx::PGraphics graphics, PScene scene) : RenderPa
|
||||
}
|
||||
|
||||
static uint32 pass = 0;
|
||||
static Component::Camera lastCam;
|
||||
void RayTracingPass::beginFrame(const Component::Camera& cam) {
|
||||
RenderPass::beginFrame(cam);
|
||||
if (lastCam.getCameraPosition() != cam.getCameraPosition() || lastCam.getCameraForward() != cam.getCameraForward()) {
|
||||
lastCam = cam;
|
||||
static Component::Transform lastCam;
|
||||
void RayTracingPass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) {
|
||||
RenderPass::beginFrame(cam, transform);
|
||||
if (lastCam.getPosition() != transform.getPosition() || lastCam.getForward() != transform.getForward()) {
|
||||
lastCam = transform;
|
||||
pass = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ class RayTracingPass : public RenderPass {
|
||||
RayTracingPass(Gfx::PGraphics graphics, PScene scene);
|
||||
RayTracingPass(RayTracingPass&& other) = default;
|
||||
RayTracingPass& operator=(RayTracingPass&& other) = default;
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
|
||||
@@ -23,9 +23,9 @@ class RenderGraph {
|
||||
pass->createRenderPass();
|
||||
}
|
||||
}
|
||||
void render(const Component::Camera& cam) {
|
||||
void render(const Component::Camera& cam, const Component::Transform& transform) {
|
||||
for (auto& pass : passes) {
|
||||
pass->beginFrame(cam);
|
||||
pass->beginFrame(cam, transform);
|
||||
}
|
||||
for (auto& pass : passes) {
|
||||
pass->render();
|
||||
|
||||
@@ -23,9 +23,9 @@ RenderPass::RenderPass(Gfx::PGraphics graphics) : graphics(graphics) {
|
||||
|
||||
RenderPass::~RenderPass() {}
|
||||
|
||||
void RenderPass::beginFrame(const Component::Camera& cam) {
|
||||
void RenderPass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) {
|
||||
auto screenDim = Vector2(static_cast<float>(viewport->getWidth()), static_cast<float>(viewport->getHeight()));
|
||||
Matrix4 cameraMatrix = cam.getViewMatrix();
|
||||
Matrix4 cameraMatrix = cam.viewMatrix;
|
||||
Matrix4 projectionMatrix = viewport->getProjectionMatrix();
|
||||
viewParams = {
|
||||
.viewMatrix = cameraMatrix,
|
||||
@@ -34,8 +34,8 @@ void RenderPass::beginFrame(const Component::Camera& cam) {
|
||||
.inverseProjection = glm::inverse(projectionMatrix),
|
||||
.viewProjectionMatrix = projectionMatrix * cameraMatrix,
|
||||
.inverseViewProjectionMatrix = glm::inverse(projectionMatrix * cameraMatrix),
|
||||
.cameraPosition_WS = Vector4(cam.getCameraPosition(), 1),
|
||||
.cameraForward_WS = Vector4(cam.getCameraForward(), 1),
|
||||
.cameraPosition_WS = Vector4(transform.getPosition(), 1),
|
||||
.cameraForward_WS = Vector4(transform.getForward(), 1),
|
||||
.screenDimensions = screenDim,
|
||||
.invScreenDimensions = 1.0f / screenDim,
|
||||
.frameIndex = Gfx::getCurrentFrameIndex(),
|
||||
|
||||
@@ -18,7 +18,7 @@ class RenderPass {
|
||||
RenderPass(RenderPass&&) = default;
|
||||
RenderPass& operator=(RenderPass&&) = default;
|
||||
virtual ~RenderPass();
|
||||
virtual void beginFrame(const Component::Camera& cam);
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform);
|
||||
virtual void render() = 0;
|
||||
virtual void endFrame() = 0;
|
||||
virtual void publishOutputs() = 0;
|
||||
|
||||
@@ -123,7 +123,7 @@ ToneMappingPass::ToneMappingPass(Gfx::PGraphics graphics) : RenderPass(graphics)
|
||||
|
||||
ToneMappingPass::~ToneMappingPass() {}
|
||||
|
||||
void ToneMappingPass::beginFrame(const Component::Camera& cam) { RenderPass::beginFrame(cam); }
|
||||
void ToneMappingPass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) { RenderPass::beginFrame(cam, transform); }
|
||||
|
||||
void ToneMappingPass::render() {
|
||||
hdrInputTexture.getTexture()->changeLayout(Gfx::SE_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, Gfx::SE_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
||||
|
||||
@@ -10,7 +10,7 @@ class ToneMappingPass : public RenderPass {
|
||||
ToneMappingPass(ToneMappingPass&&) = default;
|
||||
ToneMappingPass& operator=(ToneMappingPass&&) = default;
|
||||
virtual ~ToneMappingPass();
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
|
||||
@@ -53,8 +53,8 @@ UIPass::UIPass(Gfx::PGraphics graphics, UI::PSystem system) : RenderPass(graphic
|
||||
|
||||
UIPass::~UIPass() {}
|
||||
|
||||
void UIPass::beginFrame(const Component::Camera& cam) {
|
||||
RenderPass::beginFrame(cam);
|
||||
void UIPass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) {
|
||||
RenderPass::beginFrame(cam, transform);
|
||||
glyphs.clear();
|
||||
usedTextures.clear();
|
||||
elements.clear();
|
||||
|
||||
@@ -13,7 +13,7 @@ class UIPass : public RenderPass {
|
||||
UIPass(UIPass&&) = default;
|
||||
UIPass& operator=(UIPass&&) = default;
|
||||
virtual ~UIPass();
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
|
||||
@@ -7,8 +7,8 @@ VisibilityPass::VisibilityPass(Gfx::PGraphics graphics) : RenderPass(graphics) {
|
||||
|
||||
VisibilityPass::~VisibilityPass() {}
|
||||
|
||||
void VisibilityPass::beginFrame(const Component::Camera& cam) {
|
||||
RenderPass::beginFrame(cam);
|
||||
void VisibilityPass::beginFrame(const Component::Camera& cam, const Component::Transform& transform) {
|
||||
RenderPass::beginFrame(cam, transform);
|
||||
cullingBuffer->rotateBuffer(VertexData::getMeshletCount() * sizeof(VertexData::MeshletCullingInfo), true);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ class VisibilityPass : public RenderPass {
|
||||
VisibilityPass(VisibilityPass&&) = default;
|
||||
VisibilityPass& operator=(VisibilityPass&&) = default;
|
||||
virtual ~VisibilityPass();
|
||||
virtual void beginFrame(const Component::Camera& cam) override;
|
||||
virtual void beginFrame(const Component::Camera& cam, const Component::Transform& transform) override;
|
||||
virtual void render() override;
|
||||
virtual void endFrame() override;
|
||||
virtual void publishOutputs() override;
|
||||
|
||||
Reference in New Issue
Block a user