From 93d93de897283d5c275bfc440e5d0dc921d14f60 Mon Sep 17 00:00:00 2001
From: Joseph Walton-Rivers <joseph@walton-rivers.uk>
Date: Sun, 23 Oct 2022 01:02:30 +0100
Subject: [PATCH] ensure that two objects using hte same texture share it

---
 fggl/gfx/ogl4/meshes.cpp | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/fggl/gfx/ogl4/meshes.cpp b/fggl/gfx/ogl4/meshes.cpp
index 6e59761..0a9dfb5 100644
--- a/fggl/gfx/ogl4/meshes.cpp
+++ b/fggl/gfx/ogl4/meshes.cpp
@@ -201,6 +201,11 @@ namespace fggl::gfx::ogl4 {
 	static ogl::Texture* upload_texture( std::string name, assets::AssetManager* manager ) {
 		debug::info("loading texture: {}", name);
 
+		auto* texture = manager->get<ogl::Texture>("ogl_"+name);
+		if ( texture != nullptr ) {
+			return texture;
+		}
+
 		auto textureData = manager->get<data::Texture2D>(name);
 		ogl::Image image{
 			.type = ogl::PixelFormat::UNSIGNED_BYTE,
@@ -209,9 +214,10 @@ namespace fggl::gfx::ogl4 {
 			.data = textureData->data,
 		};
 
-		ogl::Texture* texture = new ogl::Texture(ogl::TextureType::Tex2D);
+		texture = new ogl::Texture(ogl::TextureType::Tex2D);
 		texture->setData( ogl::InternalImageFormat::RedGreenBlue, image);
-		return texture;
+
+		return manager->set("ogl_"+name, texture);
 	}
 
 	static Material* upload_material( std::string name, assets::AssetManager* manager ) {
-- 
GitLab