#pragma once #include "darray.h" #include "defines.h" #include "maths_types.h" KITC_DECL_TYPED_ARRAY(f32) typedef enum Interpolation { INTERPOLATION_LINEAR, INTERPOLATION_COUNT } Interpolation; typedef enum KeyframeKind { KEYFRAME_ROTATION, KEYFRAME_TRANSLATION, KEYFRAME_SCALE, KEYFRAME_WEIGHTS, } KeyframeKind; // typedef union keyframe { // quat rotation; // vec3 translation; // vec3 scale; // float* weights; // } keyframe; // typedef struct keyframes { // keyframe_kind kind; // keyframe* values; // size_t count; // } keyframes; // typedef struct joint { // char* name; // optional // transform transform_components; // mat4 inverse_bind_matrix; // mat4 local_transform; // } joint; // typedef struct animation_spline { // f32* timestamps; // size_t n_timestamps; // keyframes values; // interpolation interpolation; // } animation_spline; // typedef struct animation_sampler { // int current_index; // f32 min; // f32 max; // animation_spline animation; // } animation_sampler; // /** @brief Sample an animation at a given time `t` */ // keyframe animation_sample(animation_sampler* sampler, f32 t); // typedef struct animation_clip { // // A clip contains one or more animation curves // // for now I think we can just enumerate all of the properties (assuming *only* one per type is in // // a clip) NULL = this property is not animated in this clip // animation_sampler* rotation; // animation_sampler* translation; // animation_sampler* scale; // animation_sampler* weights; // } animation_clip; // typedef struct skinned_animation { // mat4* joint_matrices; // size_t n_joints; // } skinned_animation; // // void animation_update_joint_matrices(animation_clip* ) // void animation_play(animation_clip* clip);