Daniele Bartolini 10 سال پیش
والد
کامیت
1b189b67f2
1فایلهای تغییر یافته به همراه31 افزوده شده و 26 حذف شده
  1. 31 26
      src/resource/mesh_resource.cpp

+ 31 - 26
src/resource/mesh_resource.cpp

@@ -265,8 +265,8 @@ namespace mesh_resource
 
 		MeshCompiler mc(opts);
 
-		const typename JsonObject::Node* begin = map::begin(geometries);
-		const typename JsonObject::Node* end = map::end(geometries);
+		auto begin = map::begin(geometries);
+		auto end = map::end(geometries);
 		for (; begin != end; ++begin)
 		{
 			const FixedString key = begin->pair.first;
@@ -288,14 +288,14 @@ namespace mesh_resource
 		br.read(version);
 		CE_ASSERT(version == MESH_VERSION, "Wrong version");
 
-		uint32_t num_geometries;
-		br.read(num_geometries);
+		uint32_t num_geoms;
+		br.read(num_geoms);
 
 		MeshResource* mr = CE_NEW(a, MeshResource)(a);
-		array::resize(mr->geometry_names, num_geometries);
-		array::resize(mr->geometries, num_geometries);
+		array::resize(mr->geometry_names, num_geoms);
+		array::resize(mr->geometries, num_geoms);
 
-		for (uint32_t i = 0; i < num_geometries; ++i)
+		for (uint32_t i = 0; i < num_geoms; ++i)
 		{
 			StringId32 name;
 			br.read(name);
@@ -315,25 +315,24 @@ namespace mesh_resource
 			uint32_t num_inds;
 			br.read(num_inds);
 
-			const uint32_t verts_size = num_verts*stride;
-			const uint32_t inds_size  = num_inds*sizeof(uint16_t);
+			const uint32_t vsize = num_verts*stride;
+			const uint32_t isize = num_inds*sizeof(uint16_t);
 
-			const uint32_t size = sizeof(MeshGeometry)
-				+ verts_size
-				+ inds_size
-				;
+			const uint32_t size = sizeof(MeshGeometry) + vsize + isize;
 
 			MeshGeometry* mg = (MeshGeometry*)a.allocate(size);
 			mg->obb             = obb;
 			mg->decl            = decl;
+			mg->vertex_buffer   = BGFX_INVALID_HANDLE;
+			mg->index_buffer    = BGFX_INVALID_HANDLE;
 			mg->vertices.num    = num_verts;
 			mg->vertices.stride = stride;
 			mg->vertices.data   = (char*)&mg[1];
 			mg->indices.num     = num_inds;
-			mg->indices.data    = mg->vertices.data + verts_size;
+			mg->indices.data    = mg->vertices.data + vsize;
 
-			br.read(mg->vertices.data, verts_size);
-			br.read(mg->indices.data, inds_size);
+			br.read(mg->vertices.data, vsize);
+			br.read(mg->indices.data, isize);
 
 			mr->geometry_names[i] = name;
 			mr->geometries[i] = mg;
@@ -348,16 +347,21 @@ namespace mesh_resource
 
 		for (uint32_t i = 0; i < array::size(mr->geometries); ++i)
 		{
-			const uint32_t verts_num    = mr->geometries[i]->vertices.num;
-			const uint32_t verts_stride = mr->geometries[i]->vertices.stride;
-			const uint32_t verts_size   = verts_num*verts_stride;
-			const uint32_t inds_size    = mr->geometries[i]->indices.num*sizeof(uint16_t);
+			MeshGeometry& mg = *mr->geometries[i];
 
-			const bgfx::Memory* vbmem = bgfx::makeRef(mr->geometries[i]->vertices.data, verts_size);
-			const bgfx::Memory* ibmem = bgfx::makeRef(mr->geometries[i]->indices.data, inds_size);
+			const uint32_t vsize = mg.vertices.num * mg.vertices.stride;
+			const uint32_t isize = mg.indices.num * sizeof(uint16_t);
 
-			mr->geometries[i]->vertex_buffer = bgfx::createVertexBuffer(vbmem, mr->geometries[i]->decl);
-			mr->geometries[i]->index_buffer = bgfx::createIndexBuffer(ibmem);
+			const bgfx::Memory* vmem = bgfx::makeRef(mg.vertices.data, vsize);
+			const bgfx::Memory* imem = bgfx::makeRef(mg.indices.data, isize);
+
+			bgfx::VertexBufferHandle vbh = bgfx::createVertexBuffer(vmem, mg.decl);
+			bgfx::IndexBufferHandle ibh  = bgfx::createIndexBuffer(imem);
+			CE_ASSERT(bgfx::isValid(vbh), "Invalid vertex buffer");
+			CE_ASSERT(bgfx::isValid(ibh), "Invalid index buffer");
+
+			mg.vertex_buffer = vbh;
+			mg.index_buffer  = ibh;
 		}
 	}
 
@@ -367,8 +371,9 @@ namespace mesh_resource
 
 		for (uint32_t i = 0; i < array::size(mr->geometries); ++i)
 		{
-			bgfx::destroyVertexBuffer(mr->geometries[i]->vertex_buffer);
-			bgfx::destroyIndexBuffer(mr->geometries[i]->index_buffer);
+			MeshGeometry& mg = *mr->geometries[i];
+			bgfx::destroyVertexBuffer(mg.vertex_buffer);
+			bgfx::destroyIndexBuffer(mg.index_buffer);
 		}
 	}