remove model struct

This commit is contained in:
Matthew 2025-11-22 16:09:08 +11:00
parent 6d1f6bf5c9
commit 443329b2dc

View File

@ -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)
{