#pragma once
#define MDL_VERSION_MIN 101
-#define MDL_VERSION_NR 105
+#define MDL_VERSION_NR 106
enum mdl_shader{
k_shader_standard = 0,
typedef struct glmesh glmesh;
struct glmesh
{
- GLuint vao, vbo, ebo;
+ u32 vao, vbo, ebo;
u32 indice_count;
u32 loaded;
};
v3_mul( a->s, b->s, d->s );
}
-struct mdl_material
+struct mdl_file
+{
+ u32 pstr_path,
+ pack_offset,
+ pack_size;
+};
+
+#if (MDL_VERSION_MIN <= 105)
+struct mdl_material_v105
{
u32 pstr_name,
shader,
tex_none0,
tex_none1;
};
+#endif
+
+struct mdl_material
+{
+ u32 pstr_name,
+ shader,
+ flags,
+ surface_prop;
+
+ union
+ {
+ struct
+ {
+ u32 offset, size;
+ /* -> vg_msg containing KV properties */
+ }
+ kvs;
+ void *compiled; /* -> shader specific structure for render */
+ }
+ props;
+};
struct mdl_bone
{
armature_id;
};
-struct mdl_file
-{
- u32 pstr_path,
- pack_offset,
- pack_size;
-};
-
struct mdl_texture
{
mdl_file file;
mdl_array index;
};
-struct mdl_context{
+struct mdl_context
+{
FILE *file;
mdl_header info;
int mdl_load_animation_block( mdl_context *mdl, void *lin_alloc );
int mdl_load_metadata_block( mdl_context *mdl, void *lin_alloc );
int mdl_load_mesh_block( mdl_context *mdl, void *lin_alloc );
+int mdl_load_materials( mdl_context *mdl, void *lin_alloc );
/* load mesh */
void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh, u32 *fixup_table );
/* rendering */
void mdl_draw_submesh( mdl_submesh *sm );
mdl_mesh *mdl_find_mesh( mdl_context *mdl, const char *name );
+mdl_submesh *mdl_find_submesh( mdl_context *mdl, const char *mesh_name );
/* pstrs */
const char *mdl_pstr( mdl_context *mdl, u32 pstr );