diff options
Diffstat (limited to 'src/render/pbr.c')
-rw-r--r-- | src/render/pbr.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/render/pbr.c b/src/render/pbr.c index 044e6eb..6ea5746 100644 --- a/src/render/pbr.c +++ b/src/render/pbr.c @@ -13,6 +13,7 @@ #include "render_types.h" #include "shader_layouts.h" + void PBR_Init(PBR_Storage* storage) { INFO("PBR shaders init"); storage->pbr_pass = PBR_RPassCreate(); @@ -144,12 +145,27 @@ void PBR_Execute(PBR_Storage* storage, Camera camera, TextureHandle shadowmap_te Binding_Model model_data = { .model = renderable.affine }; GPU_EncodeBindShaderData(enc, 1, Binding_Model_GetLayout(&model_data)); + // Skinning matrices + + // 1. calculate matrices AnimDataUniform anim_data = { 0 }; - for (int i = 0; i < 4; i++) { - anim_data.bone_matrices[i] = mat4_ident(); + CASSERT(renderable.armature); + Armature* skeleton = renderable.armature; + // Skip the first one as we assume its root for this test + for (int j_i = 1; j_i < skeleton->joints->len; j_i++) { + Joint* j = &skeleton->joints->data[j_i]; + j->local_transform = transform_to_mat(&j->transform_components); + Mat4 m = mat4_mult(j->local_transform, j->inverse_bind_matrix); + Joint* p = &skeleton->joints->data[j->parent]; + j->local_transform = mat4_mult(j->local_transform, p->local_transform); + printf("Quat %f \n", j->transform_components.rotation.z); + } + + // 2. bind and upload + for (int j_i = 1; j_i < skeleton->joints->len; j_i++) { + anim_data.bone_matrices[j_i] = skeleton->joints->data[j_i].local_transform; } GPU_EncodeBindShaderData(enc, 3, AnimData_GetLayout(&anim_data)); - // Calculate matrices here // set buffers GPU_EncodeSetVertexBuffer(enc, mesh->vertex_buffer); |