Changed std::vector<mdl::ObjData*> to std::list<mdl::ObjData*>

This commit is contained in:
korenkonder
2023-12-19 04:22:08 +03:00
parent c9ebc3d435
commit 1c1b72bfec
5 changed files with 18 additions and 35 deletions
+2 -3
View File
@@ -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);
+12 -28
View File
@@ -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<ObjData*>& vec = obj[type];
if (vec.size() < 1)
std::list<ObjData*>& 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<ObjData*>& i : obj)
for (std::list<ObjData*>& i : obj)
i.clear();
buffer_reset();
+1 -1
View File
@@ -420,7 +420,7 @@ namespace mdl {
shadow_type_enum shadow_type;
int32_t field_8;
int32_t field_C;
std::vector<mdl::ObjData*> obj[mdl::OBJ_TYPE_MAX];
std::list<mdl::ObjData*> obj[mdl::OBJ_TYPE_MAX];
mdl::CullingCheck culling;
int32_t put_index;
bool show_alpha_center;
+1 -1
View File
@@ -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<mdl::ObjData*>& vec = rctx->disp_manager->obj[type];
std::list<mdl::ObjData*>& vec = rctx->disp_manager->obj[type];
for (mdl::ObjData*& i : vec)
switch (i->kind) {
case mdl::OBJ_KIND_NORMAL: {
+2 -2
View File
@@ -109,7 +109,7 @@ void data_view_draw_task_imgui(class_data* data) {
}
render_context* rctx = data_view->rctx;
std::vector<mdl::ObjData*>* obj = rctx->disp_manager->obj;
std::list<mdl::ObjData*>* 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<mdl::ObjData*>& draw_tasks = obj[i];
std::list<mdl::ObjData*>& draw_tasks = obj[i];
size_t count = draw_tasks.size();
bool enable = count > 0;
ImGui::DisableElementPush(enable);