Procházet zdrojové kódy

Cleanup texture loading

Daniele Bartolini před 10 roky
rodič
revize
56bfab7e51
2 změnil soubory, kde provedl 21 přidání a 19 odebrání
  1. 20 12
      src/resource/texture_resource.cpp
  2. 1 7
      src/resource/texture_resource.h

+ 20 - 12
src/resource/texture_resource.cpp

@@ -80,28 +80,36 @@ namespace texture_resource
 
 	void* load(File& file, Allocator& a)
 	{
-		const u32 file_size = file.size();
-		file.skip(sizeof(TextureHeader));
-		const bgfx::Memory* mem = bgfx::alloc(file_size);
-		file.read(mem->data, file_size - sizeof(TextureHeader));
+		BinaryReader br(file);
 
-		TextureResource* teximg = (TextureResource*) a.allocate(sizeof(TextureResource));
-		teximg->mem = mem;
-		teximg->handle.idx = bgfx::invalidHandle;
+		u32 version;
+		br.read(version);
+		CE_ASSERT(version == RESOURCE_VERSION_TEXTURE, "Wrong version");
 
-		return teximg;
+		u32 size;
+		br.read(size);
+
+		TextureResource* tr = (TextureResource*)a.allocate(sizeof(TextureResource) + size);
+
+		void* data = &tr[1];
+		br.read(data, size);
+
+		tr->mem        = bgfx::makeRef(data, size);
+		tr->handle.idx = bgfx::invalidHandle;
+
+		return tr;
 	}
 
 	void online(StringId64 id, ResourceManager& rm)
 	{
-		TextureResource* teximg = (TextureResource*) rm.get(RESOURCE_TYPE_TEXTURE, id);
-		teximg->handle = bgfx::createTexture(teximg->mem);
+		TextureResource* tr = (TextureResource*)rm.get(RESOURCE_TYPE_TEXTURE, id);
+		tr->handle = bgfx::createTexture(tr->mem);
 	}
 
 	void offline(StringId64 id, ResourceManager& rm)
 	{
-		TextureResource* teximg = (TextureResource*) rm.get(RESOURCE_TYPE_TEXTURE, id);
-		bgfx::destroyTexture(teximg->handle);
+		TextureResource* tr = (TextureResource*)rm.get(RESOURCE_TYPE_TEXTURE, id);
+		bgfx::destroyTexture(tr->handle);
 	}
 
 	void unload(Allocator& a, void* resource)

+ 1 - 7
src/resource/texture_resource.h

@@ -14,15 +14,9 @@
 
 namespace crown
 {
-struct TextureHeader
-{
-	u32 version;
-	u32 size;
-};
-
 struct TextureResource
 {
-	const bgfx::Memory* mem; // BGFX will take care of deallocation
+	const bgfx::Memory* mem;
 	bgfx::TextureHandle handle;
 };