diff options
-rw-r--r-- | game/physical.cpp | 12 | ||||
-rw-r--r-- | 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 <cache.h> #include <gfx/gl/shader.h> +Cache<Mesh> Physical::cachedMesh; +Cache<Texture> 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 <gfx/gl/transform.h> #include <glm/glm.hpp> +#include <memory> #include <string> class Camera; class Shader; +class Mesh; +class Texture; +template<typename Obj> class Cache; class Physical { public: @@ -24,8 +26,13 @@ public: protected: Transform location; - Mesh mesh; - Texture texture; + + std::shared_ptr<Mesh> mesh; + std::shared_ptr<Texture> texture; + +private: + static Cache<Mesh> cachedMesh; + static Cache<Texture> cachedTexture; }; #endif |