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

Implement TextureResource::load()

Daniele Bartolini 13 лет назад
Родитель
Сommit
5332214591
2 измененных файлов с 44 добавлено и 10 удалено
  1. 37 2
      src/TextureResource.cpp
  2. 7 8
      src/TextureResource.h

+ 37 - 2
src/TextureResource.cpp

@@ -1,15 +1,50 @@
 #include "TextureResource.h"
+#include "ResourceArchive.h"
+#include "Log.h"
+#include "FileStream.h"
 #include <cassert>
 
 namespace crown
 {
 
 //-----------------------------------------------------------------------------
-TextureResource* TextureResource::load(ResourceArchive* archive, uint32_t name)
+TextureResource* TextureResource::load(ResourceArchive* archive, ResourceId id)
 {
 	assert(archive != NULL);
 	
-	// TODO
+	Log::D("TextureResource::load called.");
+	
+	FileStream* stream = archive->find(id);
+
+	if (stream != NULL)
+	{
+		TextureResource* resource = new TextureResource;
+	
+		stream->read(&resource->format, sizeof(PixelFormat));
+		stream->read(&resource->width, sizeof(uint16_t));
+		stream->read(&resource->height, sizeof(uint16_t));
+		
+		stream->read(&resource->mode, sizeof(TextureMode));
+		stream->read(&resource->filter, sizeof(TextureFilter));
+		stream->read(&resource->wrap, sizeof(TextureWrap));
+		
+		printf("Debug: Format = %d\n", resource->format);
+		printf("Debug: Width  = %d\n", resource->width);
+		printf("Debug: Height = %d\n", resource->height);
+		printf("Debug: Mode   = %d\n", resource->mode);
+		printf("Debug: Filter = %d\n", resource->filter);
+		printf("Debug: Wrap   = %d\n", resource->wrap);
+	
+		size_t size = resource->width * resource->height * Pixel::GetBytesPerPixel(resource->format);
+
+		resource->data = new uint8_t[size];
+
+		stream->read(resource->data, size);
+
+		return resource;
+	}
+
+	return NULL;
 }
 
 //-----------------------------------------------------------------------------

+ 7 - 8
src/TextureResource.h

@@ -26,10 +26,8 @@ OTHER DEALINGS IN THE SOFTWARE.
 #pragma once
 
 #include "Types.h"
-#include "Color4.h"
 #include "Resource.h"
-#include "Image.h"
-#include "ResourceArchive.h"
+#include "Pixel.h"
 
 namespace crown
 {
@@ -67,24 +65,25 @@ enum TextureWrap
 	TW_COUNT
 };
 
-class Stream;
+class ResourceArchive;
 
 class TextureResource
 {
 public:
 
-	static TextureResource*		load(ResourceArchive* archive, uint32_t name);
+	static TextureResource*		load(ResourceArchive* archive, ResourceId id);
 	static void					unload(TextureResource* texture);
 
 private:
 
-	uint32_t					width;
-	uint32_t					height;
+	PixelFormat					format;
+	uint16_t					width;
+	uint16_t					height;
 
 	TextureMode					mode;
 	TextureFilter				filter;
 	TextureWrap					wrap;
-	
+
 	void*						data;
 };