Просмотр исходного кода

resource: move dynamic data at the end

Daniele Bartolini 1 год назад
Родитель
Сommit
364ab6ded9
3 измененных файлов с 11 добавлено и 5 удалено
  1. 8 4
      src/resource/material_resource.cpp
  2. 2 0
      src/resource/material_resource.h
  3. 1 1
      src/resource/types.h

+ 8 - 4
src/resource/material_resource.cpp

@@ -42,7 +42,7 @@ namespace material_resource
 
 	const char *uniform_name(const MaterialResource *mr, const UniformData *ud, u32 i)
 	{
-		return (const char *)mr + mr->dynamic_data_offset + mr->dynamic_data_size + ud[i].name_offset;
+		return (const char *)mr + mr->names_data_offset + ud[i].name_offset;
 	}
 
 	TextureData *texture_data_array(const MaterialResource *mr)
@@ -63,7 +63,7 @@ namespace material_resource
 
 	const char *texture_name(const MaterialResource *mr, const TextureData *td, u32 i)
 	{
-		return (const char *)mr + mr->dynamic_data_offset + mr->dynamic_data_size + td[i].sampler_name_offset;
+		return (const char *)mr + mr->names_data_offset + td[i].sampler_name_offset;
 	}
 
 	UniformHandle *uniform_handle(const UniformData *ud, u32 i, char *dynamic)
@@ -308,8 +308,10 @@ namespace material_resource_internal
 		mr.texture_data_offset = sizeof(mr);
 		mr.num_uniforms        = array::size(unidata);
 		mr.uniform_data_offset = mr.texture_data_offset + sizeof(TextureData)*array::size(texdata);
+		mr.names_data_size     = array::size(names);
+		mr.names_data_offset   = mr.uniform_data_offset + sizeof(UniformData)*array::size(unidata);
 		mr.dynamic_data_size   = array::size(dynblob);
-		mr.dynamic_data_offset = mr.uniform_data_offset + sizeof(UniformData)*array::size(unidata);
+		mr.dynamic_data_offset = mr.names_data_offset + mr.names_data_size;
 
 		// Write
 		opts.write(mr.version);
@@ -318,6 +320,8 @@ namespace material_resource_internal
 		opts.write(mr.texture_data_offset);
 		opts.write(mr.num_uniforms);
 		opts.write(mr.uniform_data_offset);
+		opts.write(mr.names_data_size);
+		opts.write(mr.names_data_offset);
 		opts.write(mr.dynamic_data_size);
 		opts.write(mr.dynamic_data_offset);
 
@@ -336,8 +340,8 @@ namespace material_resource_internal
 			opts.write(unidata[i].data_offset);
 		}
 
-		opts.write(dynblob);
 		opts.write(names);
+		opts.write(dynblob);
 
 		return 0;
 	}

+ 2 - 0
src/resource/material_resource.h

@@ -21,6 +21,8 @@ struct MaterialResource
 	u32 texture_data_offset;
 	u32 num_uniforms;
 	u32 uniform_data_offset;
+	u32 names_data_size;
+	u32 names_data_offset;
 	u32 dynamic_data_size;
 	u32 dynamic_data_offset;
 };

+ 1 - 1
src/resource/types.h

@@ -79,7 +79,7 @@ struct Platform
 #define RESOURCE_VERSION_FONT             RESOURCE_VERSION(1)
 #define RESOURCE_VERSION_UNIT             RESOURCE_VERSION(10)
 #define RESOURCE_VERSION_LEVEL            (RESOURCE_VERSION_UNIT + 4) //!< Level embeds UnitResource
-#define RESOURCE_VERSION_MATERIAL         RESOURCE_VERSION(4)
+#define RESOURCE_VERSION_MATERIAL         RESOURCE_VERSION(5)
 #define RESOURCE_VERSION_MESH             RESOURCE_VERSION(5)
 #define RESOURCE_VERSION_PACKAGE          RESOURCE_VERSION(7)
 #define RESOURCE_VERSION_PHYSICS_CONFIG   RESOURCE_VERSION(2)