diff --git a/src/CRE/Glitter/effect_inst.cpp b/src/CRE/Glitter/effect_inst.cpp index 65d3d11a..17f201e7 100644 --- a/src/CRE/Glitter/effect_inst.cpp +++ b/src/CRE/Glitter/effect_inst.cpp @@ -366,7 +366,6 @@ namespace Glitter { && flags & EFFECT_INST_HAS_EXT_ANIM_TRANS)) return; - mat4 mat; int32_t chara_id; if (flags & EFFECT_INST_CHARA_ANIM) { @@ -374,7 +373,7 @@ namespace Glitter { if (!rob_chr) return; - mat4& mat = rob_chr->data.adjust_data.mat; + mat4 mat = rob_chr->data.adjust_data.mat; vec3 scale; mat4_get_scale(&mat, &scale); @@ -419,7 +418,7 @@ namespace Glitter { return; } - mat = mat4_identity; + mat4 mat = mat4_identity; chara_id = auth_3d_id(ext_anim->a3da_id).get_chara_id(); if (chara_id >= 0 && chara_id < ROB_CHARA_COUNT) { rob_chara* rob_chr = rob_chara_array_get(chara_id); diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index 28cc103d..7489f53c 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -4,7 +4,6 @@ */ #include "disp_manager.hpp" -#include "../../KKdLib/sort.hpp" #include "../Glitter/glitter.hpp" #include "../render_context.hpp" #include "../shader_ft.hpp" @@ -3114,43 +3113,28 @@ namespace mdl { return wet_param; } - static int mdl_obj_data_sort_quicksort_compare0(void const* src1, void const* src2) { - float_t d1 = (*(ObjData**)src1)->view_z; - float_t d2 = (*(ObjData**)src2)->view_z; - return d1 > d2 ? -1 : (d1 < d2 ? 1 : 0); - } - - static int mdl_obj_data_sort_quicksort_compare1(void const* src1, void const* src2) { - float_t d1 = (*(ObjData**)src1)->view_z; - float_t d2 = (*(ObjData**)src2)->view_z; - return d1 < d2 ? -1 : (d1 > d2 ? 1 : 0); - } - - static int mdl_obj_data_sort_quicksort_compare2(void const* src1, void const* src2) { - float_t r1 = (*(ObjData**)src1)->radius; - float_t r2 = (*(ObjData**)src2)->radius; - return r1 > r2 ? -1 : (r1 < r2 ? 1 : 0); - } - void DispManager::obj_sort(const mat4* view, ObjType type, int32_t compare_func) { - std::vector& vec = obj[type]; - if (vec.size() < 1) + std::list& list = obj[type]; + if (list.size() < 1) return; calc_obj_radius(view, type); switch (compare_func) { case 0: - quicksort_custom(vec.data(), vec.size(), - sizeof(ObjData*), mdl_obj_data_sort_quicksort_compare0); + list.sort([](ObjData* left, ObjData* right) { + return left->view_z > right->view_z; + }); break; case 1: - quicksort_custom(vec.data(), vec.size(), - sizeof(ObjData*), mdl_obj_data_sort_quicksort_compare1); + list.sort([](ObjData* left, ObjData* right) { + return left->view_z < right->view_z; + }); break; case 2: - quicksort_custom(vec.data(), vec.size(), - sizeof(ObjData*), mdl_obj_data_sort_quicksort_compare2); + list.sort([](ObjData* left, ObjData* right) { + return left->radius > right->radius; + }); break; } } @@ -3174,7 +3158,7 @@ namespace mdl { texture_specular_coefficients = 1.0f; texture_specular_offset = 0.0f; - for (std::vector& i : obj) + for (std::list& i : obj) i.clear(); buffer_reset(); diff --git a/src/CRE/mdl/disp_manager.hpp b/src/CRE/mdl/disp_manager.hpp index 1e466586..94f3f636 100644 --- a/src/CRE/mdl/disp_manager.hpp +++ b/src/CRE/mdl/disp_manager.hpp @@ -420,7 +420,7 @@ namespace mdl { shadow_type_enum shadow_type; int32_t field_8; int32_t field_C; - std::vector obj[mdl::OBJ_TYPE_MAX]; + std::list obj[mdl::OBJ_TYPE_MAX]; mdl::CullingCheck culling; int32_t put_index; bool show_alpha_center; diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index c6613d00..7de037a8 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -1764,7 +1764,7 @@ static int32_t draw_pass_3d_translucent_count_layers(render_context* rctx, static void draw_pass_3d_translucent_has_objects(render_context* rctx, bool* arr, mdl::ObjType type) { rctx->disp_manager->calc_obj_radius(&rctx->view_mat, type); - std::vector& vec = rctx->disp_manager->obj[type]; + std::list& vec = rctx->disp_manager->obj[type]; for (mdl::ObjData*& i : vec) switch (i->kind) { case mdl::OBJ_KIND_NORMAL: { diff --git a/src/ReDIVA/classes/data_view/draw_task.cpp b/src/ReDIVA/classes/data_view/draw_task.cpp index 8cd9badd..77f55c89 100644 --- a/src/ReDIVA/classes/data_view/draw_task.cpp +++ b/src/ReDIVA/classes/data_view/draw_task.cpp @@ -109,7 +109,7 @@ void data_view_draw_task_imgui(class_data* data) { } render_context* rctx = data_view->rctx; - std::vector* obj = rctx->disp_manager->obj; + std::list* obj = rctx->disp_manager->obj; auto& obj_data = data_view->obj_data; ImGuiTreeNodeFlags tree_node_base_flags = 0; @@ -123,7 +123,7 @@ void data_view_draw_task_imgui(class_data* data) { tree_node_flags = tree_node_base_flags; ImGui::PushID(i); - std::vector& draw_tasks = obj[i]; + std::list& draw_tasks = obj[i]; size_t count = draw_tasks.size(); bool enable = count > 0; ImGui::DisableElementPush(enable);