Explorar o código

resource: add a way to access a TextureHandle by name

Part-of: #164
Daniele Bartolini hai 1 ano
pai
achega
e2f920182f
Modificáronse 2 ficheiros con 24 adicións e 0 borrados
  1. 18 0
      src/resource/material_resource.cpp
  2. 6 0
      src/resource/material_resource.h

+ 18 - 0
src/resource/material_resource.cpp

@@ -53,6 +53,18 @@ namespace material_resource
 		return &base[i];
 		return &base[i];
 	}
 	}
 
 
+	TextureData *texture_data_by_name(const MaterialResource *mr, StringId32 name)
+	{
+		for (u32 i = 0, n = mr->num_textures; i < n; ++i) {
+			TextureData *data = texture_data(mr, i);
+			if (data->name == name)
+				return data;
+		}
+
+		CE_FATAL("Unknown texture");
+		return NULL;
+	}
+
 	const char *texture_name(const MaterialResource *mr, const TextureData *td)
 	const char *texture_name(const MaterialResource *mr, const TextureData *td)
 	{
 	{
 		return (const char *)mr + mr->dynamic_data_offset + mr->dynamic_data_size + td->sampler_name_offset;
 		return (const char *)mr + mr->dynamic_data_offset + mr->dynamic_data_size + td->sampler_name_offset;
@@ -76,6 +88,12 @@ namespace material_resource
 		return (TextureHandle *)(dynamic + td->data_offset);
 		return (TextureHandle *)(dynamic + td->data_offset);
 	}
 	}
 
 
+	TextureHandle *texture_handle_by_name(const MaterialResource *mr, StringId32 name, char *dynamic)
+	{
+		TextureData *td = texture_data_by_name(mr, name);
+		return (TextureHandle *)(dynamic + td->data_offset);
+	}
+
 } // namespace material_resource
 } // namespace material_resource
 
 
 namespace material_resource_internal
 namespace material_resource_internal

+ 6 - 0
src/resource/material_resource.h

@@ -95,6 +95,9 @@ namespace material_resource
 	///
 	///
 	TextureData *texture_data(const MaterialResource *mr, u32 i);
 	TextureData *texture_data(const MaterialResource *mr, u32 i);
 
 
+	///
+	TextureData *texture_data_by_name(const MaterialResource *mr, StringId32 name);
+
 	///
 	///
 	const char *texture_name(const MaterialResource *mr, const TextureData *td);
 	const char *texture_name(const MaterialResource *mr, const TextureData *td);
 
 
@@ -107,6 +110,9 @@ namespace material_resource
 	///
 	///
 	TextureHandle *texture_handle(const MaterialResource *mr, u32 i, char *dynamic);
 	TextureHandle *texture_handle(const MaterialResource *mr, u32 i, char *dynamic);
 
 
+	///
+	TextureHandle *texture_handle_by_name(const MaterialResource *mr, StringId32 name, char *dynamic);
+
 } // namespace material_resource
 } // namespace material_resource
 
 
 } // namespace crown
 } // namespace crown