From d7388ee954d9ea7acea346aad4af57764e20dd04 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 23 Jan 2021 14:51:57 +0000 Subject: Allow physical objects to share meshes and textures --- game/physical.cpp | 12 +++++++++--- game/physical.h | 15 +++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/game/physical.cpp b/game/physical.cpp index f4c17d4..5263268 100644 --- a/game/physical.cpp +++ b/game/physical.cpp @@ -1,8 +1,14 @@ #include "physical.h" +#include "gfx/models/mesh.h" +#include "gfx/models/texture.h" +#include #include +Cache Physical::cachedMesh; +Cache Physical::cachedTexture; + Physical::Physical(glm::vec3 where, const std::string & m, const std::string & t) : - location {where}, mesh {m}, texture {t} + location {where}, mesh {cachedMesh.get(m)}, texture {cachedTexture.get(t)} { } @@ -10,6 +16,6 @@ void Physical::render(const Shader & shader, const Camera & camera) const { shader.Update(location, camera); - texture.Bind(); - mesh.Draw(); + texture->Bind(); + mesh->Draw(); } diff --git a/game/physical.h b/game/physical.h index ff9d316..ad2207d 100644 --- a/game/physical.h +++ b/game/physical.h @@ -1,14 +1,16 @@ #ifndef PHYSICAL_H #define PHYSICAL_H -#include "gfx/models/mesh.h" -#include "gfx/models/texture.h" #include #include +#include #include class Camera; class Shader; +class Mesh; +class Texture; +template class Cache; class Physical { public: @@ -24,8 +26,13 @@ public: protected: Transform location; - Mesh mesh; - Texture texture; + + std::shared_ptr mesh; + std::shared_ptr texture; + +private: + static Cache cachedMesh; + static Cache cachedTexture; }; #endif -- cgit v1.2.3