Kaynağa Gözat

Add MeshResource

Daniele Bartolini 12 yıl önce
ebeveyn
işleme
9a10b962e4

+ 2 - 0
engine/CMakeLists.txt

@@ -275,6 +275,7 @@ set (RESOURCE_SRC
 	resource/MaterialResource.cpp
 	resource/ResourceManager.cpp
 	resource/TextureResource.cpp
+	resource/MeshResource.cpp
 	resource/TextResource.cpp
 	resource/FontResource.cpp
 	resource/VertexShaderResource.cpp
@@ -289,6 +290,7 @@ set (RESOURCE_HEADERS
 	resource/ResourceManager.h
 	resource/Bundle.h
 	resource/TextureResource.h
+	resource/MeshResource.h
 	resource/TextResource.h
 	resource/FontResource.h
 	resource/VertexShaderResource.h

+ 80 - 0
engine/resource/MeshResource.cpp

@@ -0,0 +1,80 @@
+/*
+Copyright (c) 2013 Daniele Bartolini, Michele Rossi
+Copyright (c) 2012 Daniele Bartolini, Simone Boscaratto
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "MeshResource.h"
+#include "Bundle.h"
+#include "Log.h"
+#include "DiskFile.h"
+#include "Assert.h"
+#include "Allocator.h"
+#include "Device.h"
+#include "Renderer.h"
+
+namespace crown
+{
+
+//-----------------------------------------------------------------------------
+void* MeshResource::load(Allocator& allocator, Bundle& bundle, ResourceId id)
+{
+	DiskFile* file = bundle.open(id);
+
+	CE_ASSERT(file != NULL, "Resource does not exist: %.8X%.8X", id.name, id.type);
+
+	MeshResource* resource = (MeshResource*)allocator.allocate(sizeof(MeshResource));
+	file->read(&resource->m_header, sizeof(MeshHeader));
+
+	// Read vertices
+	file->read(&resource->m_vertex_count, sizeof(uint32_t));
+	resource->m_vertices = (float*) allocator.allocate(sizeof(float) * resource->m_vertex_count);
+	file->read(resource->m_vertices, sizeof(float) * resource->m_vertex_count);
+
+	// Read triangles
+	file->read(&resource->m_index_count, sizeof(uint32_t));
+	resource->m_indices = (uint16_t*) allocator.allocate(sizeof(uint16_t) * resource->m_index_count);
+	file->read(resource->m_indices, sizeof(uint16_t) * resource->m_index_count);
+
+	bundle.close(file);
+
+	return resource;
+}
+
+//-----------------------------------------------------------------------------
+void MeshResource::online(void* )
+{
+}
+
+//-----------------------------------------------------------------------------
+void MeshResource::unload(Allocator& , void* )
+{
+}
+
+//-----------------------------------------------------------------------------
+void MeshResource::offline()
+{
+
+}
+
+} // namespace crown

+ 71 - 0
engine/resource/MeshResource.h

@@ -0,0 +1,71 @@
+/*
+Copyright (c) 2013 Daniele Bartolini, Michele Rossi
+Copyright (c) 2012 Daniele Bartolini, Simone Boscaratto
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#pragma once
+
+#include "Types.h"
+#include "Resource.h"
+#include "PixelFormat.h"
+#include "Texture.h"
+
+namespace crown
+{
+
+// Bump the version whenever a change in the format is made.
+const uint32_t MESH_VERSION = 1;
+
+struct MeshHeader
+{
+	uint32_t	version;
+	uint32_t	mesh_count;
+	uint32_t	joint_count;
+	uint32_t	padding[16];
+};
+
+class Bundle;
+class Allocator;
+
+class MeshResource
+{
+public:
+
+	static void*		load(Allocator& allocator, Bundle& bundle, ResourceId id);
+	static void			online(void* resource);
+	static void			unload(Allocator& allocator, void* resource);
+	static void			offline();
+
+public:
+
+	MeshHeader			m_header;
+
+	size_t				m_vertex_count;
+	float*				m_vertices;
+
+	size_t				m_index_count;
+	uint16_t*			m_indices;
+};
+
+} // namespace crown

+ 5 - 0
engine/resource/ResourceManager.cpp

@@ -41,6 +41,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "TextureResource.h"
 #include "VertexShaderResource.h"
 #include "PixelShaderResource.h"
+#include "MeshResource.h"
 
 namespace crown
 {
@@ -356,6 +357,10 @@ void* ResourceManager::load_by_type(ResourceId name)
 	{
 		return PixelShaderResource::load(m_resource_allocator, m_resource_bundle, name);
 	}
+	else if (name.type == MESH_TYPE)
+	{
+		return MeshResource::load(m_resource_allocator, m_resource_bundle, name);
+	}
 
 	return NULL;
 }