From a8cc914b1bd971a669dd40f728cd7aa924a6ab06 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Wed, 31 May 2017 09:06:01 -0400 Subject: [PATCH] gamnit: don't load the same .mat material more than once MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/gamnit/depth/more_models.nit | 15 +++++++++------ lib/gamnit/model_parsers/obj.nit | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/gamnit/depth/more_models.nit b/lib/gamnit/depth/more_models.nit index 8d7d8a1..482f282 100644 --- a/lib/gamnit/depth/more_models.nit +++ b/lib/gamnit/depth/more_models.nit @@ -113,12 +113,11 @@ private class ModelFromObj end # Load material libs - # TODO do not load each libs more than once - var mtl_libs = new Map[String, Map[String, MtlDef]] + var mtl_libs = sys.mtl_libs var lib_names = obj_def.material_libs for name in lib_names do - var lib_path = self.path.dirname / name - var lib_asset = new TextAsset(lib_path) + var asset_path = self.path.dirname / name + var lib_asset = new TextAsset(asset_path) lib_asset.load var error = lib_asset.error @@ -129,7 +128,7 @@ private class ModelFromObj var mtl_parser = new MtlFileParser(lib_asset.to_s) var mtl_lib = mtl_parser.parse - mtl_libs[name] = mtl_lib + mtl_libs[asset_path] = mtl_lib end # Create 1 mesh per material, and prepare materials @@ -149,7 +148,8 @@ private class ModelFromObj var mtl_lib_name = faces.first.material_lib var mtl_name = faces.first.material_name if mtl_lib_name != null and mtl_name != null then - var mtl_lib = mtl_libs[mtl_lib_name] + var asset_path = self.path.dirname / mtl_lib_name + var mtl_lib = mtl_libs[asset_path] var mtl = mtl_lib.get_or_null(mtl_name) if mtl != null then mtl_def = mtl @@ -381,6 +381,9 @@ redef class Sys # Textures loaded from .mtl files for models var asset_textures_by_name = new Map[String, TextureAsset] + # Loaded .mtl material definitions, sorted by path in assets and material name + private var mtl_libs = new Map[String, Map[String, MtlDef]] + # All instantiated asset models var models = new Set[ModelAsset] diff --git a/lib/gamnit/model_parsers/obj.nit b/lib/gamnit/model_parsers/obj.nit index abd573d..e9f8499 100644 --- a/lib/gamnit/model_parsers/obj.nit +++ b/lib/gamnit/model_parsers/obj.nit @@ -155,7 +155,7 @@ class ObjDef # Faces var faces = new Array[ObjFace] - # Referenced material libraries + # Relative paths to referenced material libraries fun material_libs: Set[String] do var libs = new Set[String] for face in faces do -- 1.7.9.5