diff --git a/assets.d b/assets.d index 1489c0c..6512de2 100644 --- a/assets.d +++ b/assets.d @@ -40,7 +40,10 @@ struct ImageData struct ModelData { - Model model; + Vertex[] vtx_buf; + u32[] idx_buf; + Mesh[] meshes; + Material[] mats; ImageData[] tex; } @@ -102,19 +105,6 @@ struct Mesh u32 mat_id; } -struct Model -{ - Mat4 transform; - - Vertex[] vtx_buf; - u32[] idx_buf; - - Mesh[] meshes; - Material[] mats; - - // TODO: bones/animations -} - /************************** ***** GFX STRUCTURES ***** **************************/ @@ -326,8 +316,7 @@ LoadImage(cgltf_image* asset_image, string tex_path) ModelData LoadGLTF(Arena* arena, string file_name) { - ModelData m_data; - Model* model = &m_data.model; + ModelData model; u8[] file_data = OpenFile(file_name); assert(file_data != null); @@ -386,7 +375,7 @@ LoadGLTF(Arena* arena, string file_name) model.vtx_buf = Alloc!(Vertex)(vtx_count); model.meshes = Alloc!(Mesh)(primitive_count); model.mats = Alloc!(Material)(data.materials_count+1); - m_data.tex = Alloc!(ImageData)(data.textures_count+1); + model.tex = Alloc!(ImageData)(data.textures_count+1); model.mats[0] = DEFAULT_MATERIAL; @@ -403,7 +392,7 @@ LoadGLTF(Arena* arena, string file_name) auto pbr_mr = &data.materials[i].pbr_metallic_roughness; if(pbr_mr.base_color_texture.texture) { - m_data.tex[tex_idx] = LoadImage(pbr_mr.base_color_texture.texture.image, file_path); + model.tex[tex_idx] = LoadImage(pbr_mr.base_color_texture.texture.image, file_path); model.mats[mat_idx].maps[MMI.Albedo].tex_id = tex_idx++; } @@ -411,7 +400,7 @@ LoadGLTF(Arena* arena, string file_name) if(pbr_mr.metallic_roughness_texture.texture) { - m_data.tex[tex_idx] = LoadImage(pbr_mr.base_color_texture.texture.image, file_path); + model.tex[tex_idx] = LoadImage(pbr_mr.base_color_texture.texture.image, file_path); model.mats[mat_idx].maps[MMI.Metallic].tex_id = tex_idx; model.mats[mat_idx].maps[MMI.Roughness].tex_id = tex_idx; tex_idx += 1; @@ -422,19 +411,19 @@ LoadGLTF(Arena* arena, string file_name) if(data.materials[i].normal_texture.texture) { - m_data.tex[tex_idx] = LoadImage(data.materials[i].normal_texture.texture.image, file_path); + model.tex[tex_idx] = LoadImage(data.materials[i].normal_texture.texture.image, file_path); model.mats[mat_idx].maps[MMI.Normal].tex_id = tex_idx++; } if(data.materials[i].occlusion_texture.texture) { - m_data.tex[tex_idx] = LoadImage(data.materials[i].occlusion_texture.texture.image, file_path); + model.tex[tex_idx] = LoadImage(data.materials[i].occlusion_texture.texture.image, file_path); model.mats[mat_idx].maps[MMI.Occlusion].tex_id = tex_idx++; } if(data.materials[i].emissive_texture.texture) { - m_data.tex[tex_idx] = LoadImage(data.materials[i].emissive_texture.texture.image, file_path); + model.tex[tex_idx] = LoadImage(data.materials[i].emissive_texture.texture.image, file_path); model.mats[mat_idx].maps[MMI.Emission].tex_id = tex_idx++; model.mats[mat_idx].maps[MMI.Emission].col.v[0 .. 3] = data.materials[i].emissive_factor; @@ -476,7 +465,7 @@ LoadGLTF(Arena* arena, string file_name) if(attr.type == cgltf_type_vec3 && attr.component_type == cgltf_component_type_r_32f) { - AddMeshVertices(attr, model, mesh_index, &vtx_count); + AddMeshVertices(attr, &model, mesh_index, &vtx_count); f32* buffer = GetGLTFBuffer!(f32)(attr); for(u64 k = 0; k < model.meshes[mesh_index].vtx.length; k += 1) @@ -493,7 +482,7 @@ LoadGLTF(Arena* arena, string file_name) if(attr.type == cgltf_type_vec3 && attr.component_type == cgltf_component_type_r_32f) { - AddMeshVertices(attr, model, mesh_index, &vtx_count); + AddMeshVertices(attr, &model, mesh_index, &vtx_count); f32* buffer = GetGLTFBuffer!(f32)(attr); for(u64 k = 0; k < model.meshes[mesh_index].vtx.length; k += 1) @@ -510,7 +499,7 @@ LoadGLTF(Arena* arena, string file_name) if(attr.type == cgltf_type_vec4 && attr.component_type == cgltf_component_type_r_32f) { - AddMeshVertices(attr, model, mesh_index, &vtx_count); + AddMeshVertices(attr, &model, mesh_index, &vtx_count); f32* buffer = GetGLTFBuffer!(f32)(attr); for(u64 k = 0; k < model.meshes[mesh_index].vtx.length; k += 1) @@ -526,7 +515,7 @@ LoadGLTF(Arena* arena, string file_name) if(attr.type == cgltf_type_vec2) { - AddMeshVertices(attr, model, mesh_index, &vtx_count); + AddMeshVertices(attr, &model, mesh_index, &vtx_count); u32 uv_idx = prim.attributes[j].index; if(uv_idx >= 2) @@ -571,7 +560,7 @@ LoadGLTF(Arena* arena, string file_name) if(attr.type == cgltf_type_vec3 || attr.type == cgltf_type_vec4) { - AddMeshVertices(attr, model, mesh_index, &vtx_count); + AddMeshVertices(attr, &model, mesh_index, &vtx_count); if(attr.type == cgltf_type_vec3) { @@ -716,11 +705,11 @@ LoadGLTF(Arena* arena, string file_name) } } - return m_data; + return model; } void -AddMeshVertices(cgltf_accessor* accessor, Model* model, u64 mesh_index, u64* vtx_count) +AddMeshVertices(cgltf_accessor* accessor, ModelData* model, u64 mesh_index, u64* vtx_count) { if(model.meshes[mesh_index].vtx == null) {