From 001933a5d42e52c0d85965bad463d72ec9fee594 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Sat, 17 Aug 2024 11:58:11 +0300 Subject: [PATCH] Changed `Skinning` UBO to SSBO --- src/CRE/effect.cpp | 2 +- src/CRE/mdl/disp_manager.cpp | 10 ---------- src/CRE/mdl/draw_object.cpp | 8 +++++++- src/CRE/render_context.cpp | 4 ++-- src/CRE/render_context.hpp | 3 ++- src/CRE/shader_ft.cpp | 2 +- src/ReDIVA/main.cpp | 2 +- 7 files changed, 14 insertions(+), 17 deletions(-) diff --git a/src/CRE/effect.cpp b/src/CRE/effect.cpp index f7edbd76..53d6fff4 100644 --- a/src/CRE/effect.cpp +++ b/src/CRE/effect.cpp @@ -4088,7 +4088,7 @@ void water_particle::draw(mat4* mat) { shaders_ft.set(SHADER_FT_W_PTCL); gl_state_bind_vertex_array(rctx_ptr->common_vao); - water_particle_scene_ubo.Bind(5); + water_particle_scene_ubo.Bind(0); ssbo.Bind(0); texture* tex = texture_manager_get_texture(splash_tex_id); if (tex) diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index 34bc422e..6580af8a 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -2016,11 +2016,6 @@ namespace mdl { uniform_value_reset(); gl_state_get(); - rctx->obj_shader_ubo.Bind(0); - rctx->obj_scene_ubo.Bind(1); - rctx->obj_batch_ubo.Bind(2); - rctx->obj_skinning_ubo.Bind(4); - switch (type) { case OBJ_TYPE_TRANSLUCENT: case OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS: @@ -2178,11 +2173,6 @@ namespace mdl { uniform_value_reset(); gl_state_get(); - rctx->obj_shader_ubo.Bind(0); - rctx->obj_scene_ubo.Bind(1); - rctx->obj_batch_ubo.Bind(2); - rctx->obj_skinning_ubo.Bind(4); - switch (type) { case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1: case OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2: diff --git a/src/CRE/mdl/draw_object.cpp b/src/CRE/mdl/draw_object.cpp index 34616b12..5d09b158 100644 --- a/src/CRE/mdl/draw_object.cpp +++ b/src/CRE/mdl/draw_object.cpp @@ -54,6 +54,10 @@ namespace mdl { rctx->obj_shader_ubo.WriteMemory(rctx->obj_shader); rctx->obj_batch_ubo.WriteMemory(rctx->obj_batch); + rctx->obj_shader_ubo.Bind(0); + rctx->obj_scene_ubo.Bind(1); + rctx->obj_batch_ubo.Bind(2); + if (primitive_type == OBJ_PRIMITIVE_TRIANGLE_STRIP && index_format == OBJ_INDEX_U16) shaders_ft.draw_range_elements(GL_TRIANGLE_STRIP, start, end, count, GL_UNSIGNED_SHORT, (void*)indices); @@ -204,7 +208,9 @@ namespace mdl { g_joint_transforms[2] = mat.row2; } - rctx->obj_skinning_ubo.WriteMemory(rctx->obj_skinning); + rctx->obj_skinning_ssbo.WriteMemory(rctx->obj_skinning); + + rctx->obj_skinning_ssbo.Bind(0); rctx->obj_batch.set_transforms(mat4_identity, rctx->view_mat, rctx->proj_mat); diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index 407acdf9..dc17cc91 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -496,7 +496,7 @@ sprite_width(), sprite_height(), screen_x_offset(), screen_y_offset(), screen_wi obj_shader_ubo.Create(sizeof(obj_shader_shader_data)); obj_scene_ubo.Create(sizeof(obj_scene_shader_data)); obj_batch_ubo.Create(sizeof(obj_batch_shader_data)); - obj_skinning_ubo.Create(sizeof(obj_skinning_shader_data)); + obj_skinning_ssbo.Create(sizeof(obj_skinning_shader_data)); static const vec4 border_color = 0.0f; @@ -596,7 +596,7 @@ render_context::~render_context() { glDeleteSamplers(4, render_samplers); glDeleteSamplers(18, samplers); - obj_skinning_ubo.Destroy(); + obj_skinning_ssbo.Destroy(); obj_batch_ubo.Destroy(); obj_scene_ubo.Destroy(); obj_shader_ubo.Destroy(); diff --git a/src/CRE/render_context.hpp b/src/CRE/render_context.hpp index a56b6632..50e7ce4a 100644 --- a/src/CRE/render_context.hpp +++ b/src/CRE/render_context.hpp @@ -9,6 +9,7 @@ #include "../KKdLib/time.hpp" #include "../KKdLib/vec.hpp" #include "GL/array_buffer.hpp" +#include "GL/shader_storage_buffer.hpp" #include "GL/uniform_buffer.hpp" #include "light_param/face.hpp" #include "light_param/fog.hpp" @@ -445,7 +446,7 @@ struct render_context { GL::UniformBuffer obj_shader_ubo; GL::UniformBuffer obj_scene_ubo; GL::UniformBuffer obj_batch_ubo; - GL::UniformBuffer obj_skinning_ubo; + GL::ShaderStorageBuffer obj_skinning_ssbo; texture* empty_texture_2d; texture* empty_texture_cube_map; diff --git a/src/CRE/shader_ft.cpp b/src/CRE/shader_ft.cpp index 2ed3142e..ff89b7db 100644 --- a/src/CRE/shader_ft.cpp +++ b/src/CRE/shader_ft.cpp @@ -1465,7 +1465,7 @@ static void glass_eye_set(glass_eye_struct* glass_eye) { extern render_context* rctx_ptr; rctx_ptr->glass_eye_batch_ubo.WriteMemory(glass_eye_batch); - rctx_ptr->glass_eye_batch_ubo.Bind(5); + rctx_ptr->glass_eye_batch_ubo.Bind(3); } static void shader_bind_blinn(shader_set_data* set, shader* shad) { diff --git a/src/ReDIVA/main.cpp b/src/ReDIVA/main.cpp index 5f7c8405..06d6b0ec 100644 --- a/src/ReDIVA/main.cpp +++ b/src/ReDIVA/main.cpp @@ -673,7 +673,7 @@ void compile_shaders(farc* f, farc* of, const shader_table* shaders_table, const program_data_frag_spv.push_back({ size, (size_t)data }); } else { - printf("There was an error while compiling %.*s\n", frag_buf_len - 4, vert_buf); + printf("There was an error while compiling %.*s\n", frag_buf_len - 4, frag_buf); program_data_frag_spv.push_back({ 0, 0 }); }