From e54266b74995fdb41058a31f3d17cac9f6ba66b0 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Tue, 29 Apr 2025 18:56:01 +0300 Subject: [PATCH] Renamed draw_sub_mesh functions --- src/CRE/mdl/disp_manager.cpp | 26 ++-- src/CRE/mdl/draw_object.cpp | 241 ++++++++++++++++++----------------- src/CRE/mdl/draw_object.hpp | 12 +- src/CRE/render_context.cpp | 19 +-- src/CRE/render_context.hpp | 6 +- 5 files changed, 155 insertions(+), 149 deletions(-) diff --git a/src/CRE/mdl/disp_manager.cpp b/src/CRE/mdl/disp_manager.cpp index a86f95cb..8c317c65 100644 --- a/src/CRE/mdl/disp_manager.cpp +++ b/src/CRE/mdl/disp_manager.cpp @@ -2114,7 +2114,7 @@ namespace mdl { case OBJ_TYPE_TRANSLUCENT: case OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS: if (depth_mask) - func = draw_sub_mesh_translucent; + func = draw_sub_mesh_no_mat; else rend_data_ctx.state.set_depth_mask(GL_FALSE); @@ -2134,12 +2134,12 @@ namespace mdl { func = draw_sub_mesh_shadow; break; case OBJ_TYPE_TYPE_6: - func = draw_sub_mesh_translucent; + func = draw_sub_mesh_no_mat; rend_data_ctx.state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); rctx_ptr->draw_state->rend_data[rend_data_ctx.index].shader_index = SHADER_FT_SIL; break; case OBJ_TYPE_TYPE_7: - func = draw_sub_mesh_translucent; + func = draw_sub_mesh_no_mat; rend_data_ctx.state.set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); rctx_ptr->draw_state->rend_data[rend_data_ctx.index].shader_index = SHADER_FT_SIL; @@ -2152,9 +2152,9 @@ namespace mdl { if (!reflect_draw) { if (reflect) - func = draw_sub_mesh_reflect; + func = draw_sub_mesh_cheap; else if (rctx_ptr->render_manager->reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) - func = draw_sub_mesh_reflect_reflect_map; + func = draw_sub_mesh_cheap_reflect_map; } break; case OBJ_TYPE_REFLECT_CHARA_TRANSLUCENT: @@ -2164,9 +2164,9 @@ namespace mdl { if (!reflect_draw) { if (reflect) - func = draw_sub_mesh_reflect; + func = draw_sub_mesh_cheap; else if (rctx_ptr->render_manager->reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) - func = draw_sub_mesh_reflect_reflect_map; + func = draw_sub_mesh_cheap_reflect_map; } break; case OBJ_TYPE_REFLECT_CHARA_TRANSPARENT: @@ -2178,9 +2178,9 @@ namespace mdl { if (!reflect_draw) { if (reflect) - func = draw_sub_mesh_reflect; + func = draw_sub_mesh_cheap; else if (rctx_ptr->render_manager->reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) - func = draw_sub_mesh_reflect_reflect_map; + func = draw_sub_mesh_cheap_reflect_map; } break; case OBJ_TYPE_REFLECT_OPAQUE: @@ -2190,7 +2190,7 @@ namespace mdl { if (reflect_draw) rend_data_ctx.state.set_cull_face_mode(GL_FRONT); else if (!reflect_texture_mask) - func = draw_sub_mesh_reflect_reflect_map; + func = draw_sub_mesh_cheap_reflect_map; break; case OBJ_TYPE_REFLECT_TRANSLUCENT: rend_data_ctx.state.set_depth_mask(GL_FALSE); @@ -2243,7 +2243,7 @@ namespace mdl { alpha_threshold = 0.0f; break; case OBJ_TYPE_USER: - func = draw_sub_mesh_translucent; + func = draw_sub_mesh_no_mat; break; } rend_data_ctx.set_batch_alpha_threshold(alpha_threshold); @@ -2363,7 +2363,7 @@ namespace mdl { switch (type) { case OBJ_TYPE_LOCAL_TRANSLUCENT: if (depth_mask) - func = draw_sub_mesh_translucent; + func = draw_sub_mesh_no_mat; else rend_data_ctx.state.set_depth_mask(GL_FALSE); @@ -2430,7 +2430,7 @@ namespace mdl { switch (type) { case OBJ_TYPE_REFLECT_TRANSLUCENT_SORT_BY_RADIUS: if (depth_mask) - func = draw_sub_mesh_translucent; + func = draw_sub_mesh_no_mat; else rend_data_ctx.state.set_depth_mask(GL_FALSE); diff --git a/src/CRE/mdl/draw_object.cpp b/src/CRE/mdl/draw_object.cpp index 6b07b9ba..2c5cc72d 100644 --- a/src/CRE/mdl/draw_object.cpp +++ b/src/CRE/mdl/draw_object.cpp @@ -16,22 +16,22 @@ static void draw_object_chara_color_fog_set(render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args, bool disable_fog); static void draw_object_material_reset_default( render_data_context& rend_data_ctx, const obj_material_data* mat_data); -static void draw_object_material_reset_reflect(render_data_context& rend_data_ctx); +static void draw_object_material_reset_cheap(render_data_context& rend_data_ctx); static void draw_object_material_set_default(render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args, bool use_shader); static void draw_object_material_set_parameter( render_data_context& rend_data_ctx, const obj_material_data* mat_data); -static void draw_object_material_set_reflect( +static void draw_object_material_set_cheap( render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args); static void draw_object_material_set_uniform(render_data_context& rend_data_ctx, const obj_material_data* mat_data, bool disable_color_l); static void draw_object_vertex_attrib_reset_default( render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args); -static void draw_object_vertex_attrib_reset_reflect( +static void draw_object_vertex_attrib_reset_cheap( render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args); static void draw_object_vertex_attrib_set_default( render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args); -static void draw_object_vertex_attrib_set_reflect( +static void draw_object_vertex_attrib_set_cheap( render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args); extern render_context* rctx_ptr; @@ -215,8 +215,59 @@ namespace mdl { } } + void draw_sub_mesh_cheap(render_data_context& rend_data_ctx, + const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { + + const obj_material_data* material = args->material; + draw_object_vertex_attrib_set_cheap(rend_data_ctx, args); + obj_material_shader_lighting_type lighting_type + = material->material.shader_info.get_lighting_type(); + bool disable_fog = draw_object_blend_set(rend_data_ctx, args, lighting_type); + draw_object_chara_color_fog_set(rend_data_ctx, args, disable_fog); + draw_object_material_set_cheap(rend_data_ctx, args); + + const obj_sub_mesh* sub_mesh = args->sub_mesh; + if (sub_mesh->index_format != OBJ_INDEX_U8) + draw(rend_data_ctx, + sub_mesh->primitive_type, + sub_mesh->num_index, + sub_mesh->first_index, + sub_mesh->last_index, + sub_mesh->index_format, + sub_mesh->index_offset); + + draw_object_material_reset_cheap(rend_data_ctx); + draw_object_vertex_attrib_reset_cheap(rend_data_ctx, args); + rend_data_ctx.reset_shader_flags(); + + rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.sub_mesh_cheap_count++; + } + + void draw_sub_mesh_cheap_reflect_map(render_data_context& rend_data_ctx, + const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { + + draw_object_vertex_attrib_set_cheap(rend_data_ctx, args); + draw_object_material_set_cheap(rend_data_ctx, args); + + const obj_sub_mesh* sub_mesh = args->sub_mesh; + if (sub_mesh->index_format != OBJ_INDEX_U8) + draw(rend_data_ctx, + sub_mesh->primitive_type, + sub_mesh->num_index, + sub_mesh->first_index, + sub_mesh->last_index, + sub_mesh->index_format, + sub_mesh->index_offset); + + draw_object_material_reset_cheap(rend_data_ctx); + draw_object_vertex_attrib_reset_cheap(rend_data_ctx, args); + + rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.sub_mesh_cheap_count++; + } + void draw_sub_mesh_default(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { + if (args->set_blend_color) rend_data_ctx.set_batch_blend_color_offset_color(args->blend_color, 0.0f); @@ -241,11 +292,12 @@ namespace mdl { if (args->set_blend_color) rend_data_ctx.set_batch_blend_color_offset_color(1.0f, 0.0f); - rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.object_draw_count++; + rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.sub_mesh_count++; } void draw_sub_mesh_default_instanced(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { + if (args->set_blend_color) rend_data_ctx.set_batch_blend_color_offset_color(args->blend_color, 0.0f); @@ -276,118 +328,12 @@ namespace mdl { if (args->set_blend_color) rend_data_ctx.set_batch_blend_color_offset_color(1.0f, 0.0f); - rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.object_draw_count++; + rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.sub_mesh_count++; } - void draw_sub_mesh_sss(render_data_context& rend_data_ctx, + void draw_sub_mesh_no_mat(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { - obj_material_attrib_member attrib = args->material->material.attrib.m; - rend_data_ctx.shader_flags.arr[U_ALPHA_TEST] = (!attrib.flag_28 && (args->blend_color.w < 1.0f - || (attrib.alpha_texture || attrib.alpha_material) && !attrib.punch_through - || args->sub_mesh->attrib.m.translucent) - || attrib.punch_through) ? 1 : 0; - rend_data_ctx.shader_flags.arr[U_NPR_NORMAL] = 1; - bool chara = false; - const obj_material_data* material = args->material; - switch (material->material.shader.index) { - case SHADER_FT_CLOTH: - if (!rctx_ptr->render_manager->npr_param && material->material.color.ambient.w < 1.0f - && material->material.shader_info.m.aniso_direction == OBJ_MATERIAL_ANISO_DIRECTION_NORMAL) - chara = true; - break; - case SHADER_FT_TIGHTS: - if (!rctx_ptr->render_manager->npr_param) - chara = true; - break; - case SHADER_FT_GLASEYE: - rend_data_ctx.shader_flags.arr[U_NPR_NORMAL] = 0; - chara = true; - break; - case SHADER_FT_SKIN: - chara = true; - break; - } - - if (chara) { - rend_data_ctx.set_batch_sss_param({ 0.0f, 0.0f, 0.0f, 0.5f }); - rend_data_ctx.shader_flags.arr[U_SSS_CHARA] = 1; - } - else { - const vec4& sss_param = rctx_ptr->sss_data->param; - rend_data_ctx.set_batch_sss_param({ sss_param.x, sss_param.y, sss_param.z, 0.5f }); - rend_data_ctx.shader_flags.arr[U_SSS_CHARA] = 0; - } - draw_sub_mesh_default(rend_data_ctx, args, cam, mat); - } - - void draw_sub_mesh_reflect(render_data_context& rend_data_ctx, - const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { - const obj_material_data* material = args->material; - draw_object_vertex_attrib_set_reflect(rend_data_ctx, args); - obj_material_shader_lighting_type lighting_type - = material->material.shader_info.get_lighting_type(); - bool disable_fog = draw_object_blend_set(rend_data_ctx, args, lighting_type); - draw_object_chara_color_fog_set(rend_data_ctx, args, disable_fog); - draw_object_material_set_reflect(rend_data_ctx, args); - - const obj_sub_mesh* sub_mesh = args->sub_mesh; - if (sub_mesh->index_format != OBJ_INDEX_U8) - draw(rend_data_ctx, - sub_mesh->primitive_type, - sub_mesh->num_index, - sub_mesh->first_index, - sub_mesh->last_index, - sub_mesh->index_format, - sub_mesh->index_offset); - - draw_object_material_reset_reflect(rend_data_ctx); - draw_object_vertex_attrib_reset_reflect(rend_data_ctx, args); - rend_data_ctx.reset_shader_flags(); - - rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.object_reflect_draw_count++; - } - - void draw_sub_mesh_reflect_reflect_map(render_data_context& rend_data_ctx, - const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { - draw_object_vertex_attrib_set_reflect(rend_data_ctx, args); - draw_object_material_set_reflect(rend_data_ctx, args); - - const obj_sub_mesh* sub_mesh = args->sub_mesh; - if (sub_mesh->index_format != OBJ_INDEX_U8) - draw(rend_data_ctx, - sub_mesh->primitive_type, - sub_mesh->num_index, - sub_mesh->first_index, - sub_mesh->last_index, - sub_mesh->index_format, - sub_mesh->index_offset); - - draw_object_material_reset_reflect(rend_data_ctx); - draw_object_vertex_attrib_reset_reflect(rend_data_ctx, args); - - rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.object_reflect_draw_count++; - } - - void draw_sub_mesh_shadow(render_data_context& rend_data_ctx, - const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { - obj_material_attrib_member attrib = args->material->material.attrib.m; - if (!attrib.flag_28 && (args->blend_color.w < 1.0f - || (attrib.alpha_texture || attrib.alpha_material) && !attrib.punch_through - || args->sub_mesh->attrib.m.translucent) - || attrib.punch_through) { - rend_data_ctx.shader_flags.arr[U_ALPHA_TEST] = 1; - rend_data_ctx.set_batch_alpha_threshold(0.5f); - draw_sub_mesh_translucent(rend_data_ctx, args, cam, mat); - rend_data_ctx.shader_flags.arr[U_ALPHA_TEST] = 0; - rend_data_ctx.set_batch_alpha_threshold(0.0f); - } - else - draw_sub_mesh_translucent(rend_data_ctx, args, cam, mat); - } - - void draw_sub_mesh_translucent(render_data_context& rend_data_ctx, - const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { const obj_material_data* material = args->material; const std::vector* textures = args->textures; if (rctx_ptr->draw_state->rend_data[rend_data_ctx.index].shader_index != -1) { @@ -484,7 +430,66 @@ namespace mdl { if (rctx_ptr->draw_state->rend_data[rend_data_ctx.index].shader_index != -1) rend_data_ctx.reset_shader_flags(); - rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.object_translucent_draw_count++; + rctx_ptr->draw_state->rend_data[rend_data_ctx.index].stats.sub_mesh_no_mat_count++; + } + + void draw_sub_mesh_shadow(render_data_context& rend_data_ctx, + const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { + obj_material_attrib_member attrib = args->material->material.attrib.m; + if (!attrib.flag_28 && (args->blend_color.w < 1.0f + || (attrib.alpha_texture || attrib.alpha_material) && !attrib.punch_through + || args->sub_mesh->attrib.m.translucent) + || attrib.punch_through) { + rend_data_ctx.shader_flags.arr[U_ALPHA_TEST] = 1; + rend_data_ctx.set_batch_alpha_threshold(0.5f); + draw_sub_mesh_no_mat(rend_data_ctx, args, cam, mat); + rend_data_ctx.shader_flags.arr[U_ALPHA_TEST] = 0; + rend_data_ctx.set_batch_alpha_threshold(0.0f); + } + else + draw_sub_mesh_no_mat(rend_data_ctx, args, cam, mat); + } + + void draw_sub_mesh_sss(render_data_context& rend_data_ctx, + const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat) { + obj_material_attrib_member attrib = args->material->material.attrib.m; + rend_data_ctx.shader_flags.arr[U_ALPHA_TEST] = (!attrib.flag_28 && (args->blend_color.w < 1.0f + || (attrib.alpha_texture || attrib.alpha_material) && !attrib.punch_through + || args->sub_mesh->attrib.m.translucent) + || attrib.punch_through) ? 1 : 0; + + rend_data_ctx.shader_flags.arr[U_NPR_NORMAL] = 1; + bool chara = false; + const obj_material_data* material = args->material; + switch (material->material.shader.index) { + case SHADER_FT_CLOTH: + if (!rctx_ptr->render_manager->npr_param && material->material.color.ambient.w < 1.0f + && material->material.shader_info.m.aniso_direction == OBJ_MATERIAL_ANISO_DIRECTION_NORMAL) + chara = true; + break; + case SHADER_FT_TIGHTS: + if (!rctx_ptr->render_manager->npr_param) + chara = true; + break; + case SHADER_FT_GLASEYE: + rend_data_ctx.shader_flags.arr[U_NPR_NORMAL] = 0; + chara = true; + break; + case SHADER_FT_SKIN: + chara = true; + break; + } + + if (chara) { + rend_data_ctx.set_batch_sss_param({ 0.0f, 0.0f, 0.0f, 0.5f }); + rend_data_ctx.shader_flags.arr[U_SSS_CHARA] = 1; + } + else { + const vec4& sss_param = rctx_ptr->sss_data->param; + rend_data_ctx.set_batch_sss_param({ sss_param.x, sss_param.y, sss_param.z, 0.5f }); + rend_data_ctx.shader_flags.arr[U_SSS_CHARA] = 0; + } + draw_sub_mesh_default(rend_data_ctx, args, cam, mat); } } @@ -620,7 +625,7 @@ static void draw_object_material_reset_default( rend_data_ctx.reset_shader_flags(); } -static void draw_object_material_reset_reflect(render_data_context& rend_data_ctx) { +static void draw_object_material_reset_cheap(render_data_context& rend_data_ctx) { rend_data_ctx.state.active_bind_texture_2d(0, rctx_ptr->empty_texture_2d->glid); rend_data_ctx.state.enable_cull_face(); rend_data_ctx.reset_shader_flags(); @@ -879,7 +884,7 @@ static void draw_object_material_set_parameter( reflect_uv_scale, refract_uv_scale); } -static void draw_object_material_set_reflect( +static void draw_object_material_set_cheap( render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args) { const obj_material_data* material = args->material; const std::vector* textures = args->textures; @@ -1027,7 +1032,7 @@ static void draw_object_vertex_attrib_reset_default( rend_data_ctx.state.active_texture(0); } -static void draw_object_vertex_attrib_reset_reflect( +static void draw_object_vertex_attrib_reset_cheap( render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args) { const obj_mesh* mesh = args->mesh; obj_vertex_format vertex_format = mesh->vertex_format; @@ -1111,7 +1116,7 @@ static void draw_object_vertex_attrib_set_default( rend_data_ctx.shader_flags.arr[U_INSTANCE] = 0;*/ } -static void draw_object_vertex_attrib_set_reflect( +static void draw_object_vertex_attrib_set_cheap( render_data_context& rend_data_ctx, const mdl::ObjSubMeshArgs* args) { const obj_mesh* mesh = args->mesh; obj_vertex_format vertex_format = mesh->vertex_format; diff --git a/src/CRE/mdl/draw_object.hpp b/src/CRE/mdl/draw_object.hpp index 7e7fa872..ec4970e1 100644 --- a/src/CRE/mdl/draw_object.hpp +++ b/src/CRE/mdl/draw_object.hpp @@ -20,19 +20,19 @@ namespace mdl { extern void draw_sub_mesh(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const mat4* mat, void(*func)(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat), const cam_data& cam); + extern void draw_sub_mesh_cheap(render_data_context& rend_data_ctx, + const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); + extern void draw_sub_mesh_cheap_reflect_map(render_data_context& rend_data_ctx, + const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); extern void draw_sub_mesh_default(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); extern void draw_sub_mesh_default_instanced(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); - extern void draw_sub_mesh_sss(render_data_context& rend_data_ctx, - const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); - extern void draw_sub_mesh_reflect(render_data_context& rend_data_ctx, - const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); - extern void draw_sub_mesh_reflect_reflect_map(render_data_context& rend_data_ctx, + extern void draw_sub_mesh_no_mat(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); extern void draw_sub_mesh_shadow(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); - extern void draw_sub_mesh_translucent(render_data_context& rend_data_ctx, + extern void draw_sub_mesh_sss(render_data_context& rend_data_ctx, const ObjSubMeshArgs* args, const cam_data& cam, const mat4* mat); }; diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index 016f25f5..6593f602 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -34,15 +34,15 @@ static const GLuint MORPH_TEXCOORD0_INDEX = 13; static const GLuint MORPH_TEXCOORD1_INDEX = 14; static const GLuint BONE_INDEX_INDEX = 15; -draw_state_stats::draw_state_stats() : object_draw_count(), object_translucent_draw_count(), -object_reflect_draw_count(), field_C(), field_10(), draw_count(), draw_triangle_count(), field_1C() { +draw_state_stats::draw_state_stats() : sub_mesh_count(), sub_mesh_no_mat_count(), +sub_mesh_cheap_count(), field_C(), field_10(), draw_count(), draw_triangle_count(), field_1C() { } void draw_state_stats::reset() { - object_draw_count = 0; - object_translucent_draw_count = 0; - object_reflect_draw_count = 0; + sub_mesh_count = 0; + sub_mesh_no_mat_count = 0; + sub_mesh_cheap_count = 0; field_C = 0; field_10 = 0; draw_count = 0; @@ -58,7 +58,8 @@ global_material_struct::global_material_struct() { refract_uv_scale = 0.1f; } -draw_state::render_data::render_data() : self_shadow(), shadow(), blend(), cull_front(), field_8() { +draw_state::render_data::render_data() : self_shadow(), shadow(), +blend(), cull_front(), field_8(), curr_obj_sub_mesh_args() { shader_index = -1; } @@ -78,9 +79,9 @@ void draw_state::stats_update() { stats_prev.reset(); for (draw_state::render_data& i : rend_data) { - stats_prev.object_draw_count += i.stats.object_draw_count; - stats_prev.object_translucent_draw_count += i.stats.object_translucent_draw_count; - stats_prev.object_reflect_draw_count += i.stats.object_reflect_draw_count; + stats_prev.sub_mesh_count += i.stats.sub_mesh_count; + stats_prev.sub_mesh_no_mat_count += i.stats.sub_mesh_no_mat_count; + stats_prev.sub_mesh_cheap_count += i.stats.sub_mesh_cheap_count; stats_prev.field_C += i.stats.field_C; stats_prev.field_10 += i.stats.field_10; stats_prev.draw_count += i.stats.draw_count; diff --git a/src/CRE/render_context.hpp b/src/CRE/render_context.hpp index 0aeb39cf..a3368cf1 100644 --- a/src/CRE/render_context.hpp +++ b/src/CRE/render_context.hpp @@ -31,9 +31,9 @@ enum render_data_flags { }; struct draw_state_stats { - int32_t object_draw_count; - int32_t object_translucent_draw_count; - int32_t object_reflect_draw_count; + int32_t sub_mesh_count; + int32_t sub_mesh_no_mat_count; + int32_t sub_mesh_cheap_count; int32_t field_C; int32_t field_10; int32_t draw_count;