/* * 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 "Drawable.hpp" namespace OpenVulkano::Scene { class Geometry; class Material; class UniformBuffer; class SimpleDrawable final : public Drawable { Geometry* m_mesh = nullptr; Material* m_material = nullptr; UniformBuffer* m_uniBuffer = nullptr; public: SimpleDrawable(const DrawPhase phase = DrawPhase::MAIN) : Drawable(DrawEncoder::GetDrawEncoder(), phase) {} explicit SimpleDrawable(const SimpleDrawable* toCopy) : Drawable(DrawEncoder::GetDrawEncoder(), toCopy->GetDrawPhase()) , m_mesh(toCopy->m_mesh) , m_material(toCopy->m_material) , m_uniBuffer(toCopy->m_uniBuffer) { SetShader(toCopy->GetShader()); } ~SimpleDrawable() { //if (m_mesh) SimpleDrawable::Close(); } void Init(Shader* shader, Geometry* mesh, Material* material, UniformBuffer* uniBuffer = nullptr); void Init(SimpleDrawable* drawable); [[nodiscard]] Geometry* GetMesh() const { return m_mesh; } [[nodiscard]] Material* GetMaterial() const { return m_material; } [[nodiscard]] UniformBuffer* GetBuffer() const { return m_uniBuffer; } }; }