/* * 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 SimpleDrawable final : public Drawable { Geometry* m_mesh = nullptr; Material* m_material = nullptr; public: SimpleDrawable() : Drawable(DrawEncoder::GetDrawEncoder()) {} explicit SimpleDrawable(const SimpleDrawable* toCopy) : Drawable(DrawEncoder::GetDrawEncoder()) , m_mesh(toCopy->m_mesh) , m_material(toCopy->m_material) { SetShader(toCopy->GetShader()); } ~SimpleDrawable() { if (m_mesh) SimpleDrawable::Close(); } void Init(Shader* shader, Geometry* mesh, Material* material); void Init(SimpleDrawable* drawable); [[nodiscard]] Drawable* Copy() override { return new SimpleDrawable(this); } [[nodiscard]] Geometry* GetMesh() const { return m_mesh; } [[nodiscard]] Material* GetMaterial() const { return m_material; } }; }