diff options
Diffstat (limited to 'res.c')
| -rw-r--r-- | res.c | 27 |
1 files changed, 26 insertions, 1 deletions
@@ -37,8 +37,29 @@ asset_load_data(cstr key) { return false; } + bool skinned = mdl.skeleton.boneCount > 0 && + mdl.skeleton.bindPose != NULL; + + cstr sdr_key = skinned ? "skinned" : "default"; + for (int i = 0; i < mdl.materialCount; ++i) { - mdl.materials[i].shader = shader_get("default")->sdr; + mdl.materials[i].shader = shader_get(sdr_key)->sdr; + } + + if (skinned) { + int anim_count = 0; + ModelAnimation *anims = + LoadModelAnimations(key, &anim_count); + + if (anim_count > 0) { + UpdateModelAnimation(mdl, anims[0], 0.0f); + } + + UnloadModelAnimations(anims, anim_count); + } + + for (int i = 0; i < mdl.materialCount; ++i) { + mdl.materials[i].shader = shader_get(sdr_key)->sdr; } asset->tag = ASSET_TAG_MODEL; @@ -148,6 +169,10 @@ res_init(void) { "res/sdr/mdl_vtx_lit.vs", "res/sdr/mdl_vtx_lit.fs"); + fun_shader_create("skinned", + "res/sdr/mdl_skinned_vtx_lit.vs", + "res/sdr/mdl_vtx_lit.fs"); + fun_shader_create("alpha_cutoff", "res/sdr/mdl_vtx_lit.vs", "res/sdr/mdl_vtx_lit_cutoff.fs"); |
