techkaczynski.dev / code

summaryrefslogtreecommitdiff
path: root/res.c
diff options
context:
space:
mode:
Diffstat (limited to 'res.c')
-rw-r--r--res.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/res.c b/res.c
index f4c8597..db74376 100644
--- a/res.c
+++ b/res.c
@@ -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");