/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ #pragma once #include "Base/ICloseable.hpp" #include "IRecordable.hpp" #include "Scene/Camera.hpp" #include "Vulkan/Resources/UniformBuffer.hpp" namespace openVulkanoCpp { namespace Vulkan { struct VulkanNode : virtual IRecordable, virtual ICloseable { Scene::Node* node = nullptr; UniformBuffer* buffer = nullptr; virtual void Init(Scene::Node* node, UniformBuffer* uniformBuffer) { this->node = node; this->buffer = uniformBuffer; } void Record(vk::CommandBuffer& cmdBuffer, uint32_t bufferId) override { buffer->Record(cmdBuffer, 0); } void Close() override {} }; struct VulkanNodeDynamic : VulkanNode { uint32_t lastUpdate = -1; void Init(Scene::Node* node, UniformBuffer* uniformBuffer) override { VulkanNode::Init(node, uniformBuffer); lastUpdate = -1; } void Record(vk::CommandBuffer& cmdBuffer, uint32_t bufferId) override { if(bufferId != lastUpdate) { lastUpdate = bufferId; buffer->Update(&node->worldMat, sizeof(Math::Matrix4f), bufferId); } buffer->Record(cmdBuffer, bufferId); } void Close() override{} }; } }