diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index 962c43e4..a606d27f 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -433,6 +433,14 @@ void render_data::obj_batch_data::reset() { g_reflect_uv_scale = 0.0f; } +void render_data::obj_skinning_data::reset() { + for (size_t i = 0; i < sizeof(g_joint_transforms) / sizeof(vec4); i += 3) { + g_joint_transforms[i + 0] = mat4_identity.row0; + g_joint_transforms[i + 1] = mat4_identity.row1; + g_joint_transforms[i + 2] = mat4_identity.row2; + } +} + void render_data::init() { buffer_shader.Create(gl_state, sizeof(obj_shader_data)); buffer_scene.Create(gl_state, sizeof(obj_scene_data)); @@ -448,7 +456,15 @@ void render_data::init() { enum_or(flags, RENDER_DATA_SCENE_UPDATE); buffer_batch_data.reset(); enum_or(flags, RENDER_DATA_BATCH_UPDATE); + buffer_skinning_data.reset(); inv_view_mat = mat4_identity; + + if (GLAD_GL_VERSION_4_3) + buffer_skinning.WriteMemory(gl_state, + 0, sizeof(obj_skinning_data), &buffer_skinning_data); + else + buffer_skinning_ubo.WriteMemory(gl_state, + 0, sizeof(obj_skinning_data), &buffer_skinning_data); } void render_data::free() { diff --git a/src/CRE/render_context.hpp b/src/CRE/render_context.hpp index 1852cba4..d133f71d 100644 --- a/src/CRE/render_context.hpp +++ b/src/CRE/render_context.hpp @@ -407,6 +407,8 @@ struct render_data { struct obj_skinning_data { vec4 g_joint_transforms[768]; + + void reset(); }; render_data_flags flags;