From 960ff20cda045a07ae7772e1b25e0c8d8082136a Mon Sep 17 00:00:00 2001 From: korenkonder Date: Tue, 2 Apr 2024 23:45:21 +0300 Subject: [PATCH] Changed reference of `draw_state` variable --- src/DivaGL/effect.cpp | 4 +-- src/DivaGL/mdl/disp_manager.cpp | 6 ++-- src/DivaGL/mdl/draw_object.cpp | 52 ++++++++++++++++----------------- src/DivaGL/render_context.cpp | 4 +-- src/DivaGL/render_context.hpp | 2 +- src/DivaGL/render_manager.cpp | 40 ++++++++++++------------- 6 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src/DivaGL/effect.cpp b/src/DivaGL/effect.cpp index 2388761..66f1a62 100644 --- a/src/DivaGL/effect.cpp +++ b/src/DivaGL/effect.cpp @@ -1394,11 +1394,11 @@ void effect_patch() { } void EffectFogRing::draw() { - draw_state->set_fog_height(false); + draw_state.set_fog_height(false); if (!enable || !display) return; - draw_state->set_fog_height(true); + draw_state.set_fog_height(true); RenderTexture& rt = render_manager->get_render_texture(8); rt.Bind(); glViewportDLL(0, 0, diff --git a/src/DivaGL/mdl/disp_manager.cpp b/src/DivaGL/mdl/disp_manager.cpp index e784f7a..945b6b2 100644 --- a/src/DivaGL/mdl/disp_manager.cpp +++ b/src/DivaGL/mdl/disp_manager.cpp @@ -1612,12 +1612,12 @@ namespace mdl { case OBJ_TYPE_TYPE_6: func = draw_sub_mesh_translucent; gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - draw_state->shader_index = SHADER_FT_SIL; + draw_state.shader_index = SHADER_FT_SIL; break; case OBJ_TYPE_TYPE_7: func = draw_sub_mesh_translucent; gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - draw_state->shader_index = SHADER_FT_SIL; + draw_state.shader_index = SHADER_FT_SIL; alpha_test = 1; min_alpha = 0.0f; alpha_threshold = 0.99999994f; @@ -1704,7 +1704,7 @@ namespace mdl { break; case OBJ_TYPE_TYPE_6: case OBJ_TYPE_TYPE_7: - draw_state->shader_index = -1; + draw_state.shader_index = -1; gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); break; case OBJ_TYPE_REFLECT_CHARA_OPAQUE: diff --git a/src/DivaGL/mdl/draw_object.cpp b/src/DivaGL/mdl/draw_object.cpp index f376fc7..de94284 100644 --- a/src/DivaGL/mdl/draw_object.cpp +++ b/src/DivaGL/mdl/draw_object.cpp @@ -60,11 +60,11 @@ namespace mdl { shaders_ft.draw_elements(mesh_draw_mode[primitive_type], count, mesh_indices_type[index_format], (void*)indices); - draw_state->stats.draw_count += count; + draw_state.stats.draw_count += count; if (primitive_type == OBJ_PRIMITIVE_TRIANGLES) - draw_state->stats.draw_triangle_count += count / 3; + draw_state.stats.draw_triangle_count += count / 3; else if (primitive_type == OBJ_PRIMITIVE_TRIANGLE_STRIP) - draw_state->stats.draw_triangle_count += count - 2; + draw_state.stats.draw_triangle_count += count - 2; } void draw_etc_obj(const mdl::EtcObj* etc, const mat4* mat) { @@ -250,7 +250,7 @@ namespace mdl { rctx->obj_batch.g_offset_color = 0.0f; } - draw_state->stats.object_draw_count++; + draw_state.stats.object_draw_count++; } void draw_sub_mesh_default_instanced( @@ -289,7 +289,7 @@ namespace mdl { rctx->obj_batch.g_offset_color = 0.0f; } - draw_state->stats.object_draw_count++; + draw_state.stats.object_draw_count++; } void draw_sub_mesh_sss(const ObjSubMeshArgs* args) { @@ -357,7 +357,7 @@ namespace mdl { draw_object_vertex_attrib_reset_reflect(args); uniform_value_reset(); - draw_state->stats.object_reflect_draw_count++; + draw_state.stats.object_reflect_draw_count++; } void draw_sub_mesh_reflect_reflect_map(const ObjSubMeshArgs* args) { @@ -377,7 +377,7 @@ namespace mdl { draw_object_material_reset_reflect(); draw_object_vertex_attrib_reset_reflect(args); - draw_state->stats.object_reflect_draw_count++; + draw_state.stats.object_reflect_draw_count++; } void draw_sub_mesh_shadow(const ObjSubMeshArgs* args) { @@ -399,13 +399,13 @@ namespace mdl { void draw_sub_mesh_translucent(const ObjSubMeshArgs* args) { const obj_material_data* material = args->material; const prj::vector* textures = args->textures; - if (draw_state->shader_index != -1) { + if (draw_state.shader_index != -1) { rctx->obj_batch.g_material_state_emission = args->emission; draw_object_material_set_uniform(material, false); if (material->material.attrib.m.alpha_texture) uniform->arr[U_TEXTURE_COUNT] = 0; rctx->obj_batch.g_texture_blend = { (float_t)uniform->arr[U_TEXTURE_BLEND], 0.0f, 0.0f, 0.0f }; - shaders_ft.set(draw_state->shader_index); + shaders_ft.set(draw_state.shader_index); } draw_object_vertex_attrib_set_default(args); @@ -491,10 +491,10 @@ namespace mdl { gl_state_enable_cull_face(); draw_object_vertex_attrib_reset_default(args); - if (draw_state->shader_index != -1) + if (draw_state.shader_index != -1) uniform_value_reset(); - draw_state->stats.object_translucent_draw_count++; + draw_state.stats.object_translucent_draw_count++; } } @@ -565,7 +565,7 @@ static bool draw_object_blend_set( chara_color->get_specular(specular); if (specular.w >= 4.0f && chara_color->get_type() == LIGHT_PARALLEL && (src_blend_factor != GL_ONE || dst_blend_factor)) { - int32_t shader_index = draw_state->shader_index; + int32_t shader_index = draw_state.shader_index; if (shader_index == -1) { shader_index = material->material.shader.index; if (shader_index == SHADER_FT_BLINN) { @@ -618,7 +618,7 @@ static void draw_object_chara_color_fog_set(const mdl::ObjSubMeshArgs* args, boo uniform->arr[U_FOG_HEIGHT] = 2 + attrib.fog_height; else uniform->arr[U_FOG_HEIGHT] = 1; - uniform->arr[U_FOG] = draw_state->fog_height ? 2 : 1; + uniform->arr[U_FOG] = draw_state.fog_height ? 2 : 1; } } @@ -645,14 +645,14 @@ static void draw_object_material_set_default(const mdl::ObjSubMeshArgs* args, bo material->material.shader_info.get_lighting_type(); bool disable_fog = draw_object_blend_set(args, lighting_type); draw_object_material_set_uniform(material, false); - if (!draw_state->light) + if (!draw_state.light) uniform->arr[U_LIGHT_0] = 0; else if (args->self_shadow) uniform->arr[U_LIGHT_0] = 1; else uniform->arr[U_LIGHT_0] = args->sub_mesh->attrib.m.recieve_shadow ? 1 : 0; uniform->arr[U_SHADOW] = 0; - uniform->arr[U_SELF_SHADOW] = draw_state->self_shadow ? 1 : 0; + uniform->arr[U_SELF_SHADOW] = draw_state.self_shadow ? 1 : 0; const obj_material_texture_data* texdata = material->material.texdata; uniform->arr[U_SHADOW] = args->shadow > SHADOW_CHARA; @@ -785,8 +785,8 @@ static void draw_object_material_set_default(const mdl::ObjSubMeshArgs* args, bo if (!use_shader) shaders_ft.set(SHADER_FT_SIMPLE); - else if (draw_state->shader_index != -1) - shaders_ft.set(draw_state->shader_index); + else if (draw_state.shader_index != -1) + shaders_ft.set(draw_state.shader_index); else if (material->material.shader.index != -1) { if (material->material.shader.index != SHADER_FT_BLINN) shaders_ft.set(material->material.shader.index); @@ -815,7 +815,7 @@ static void draw_object_material_set_default(const mdl::ObjSubMeshArgs* args, bo if (fresnel > 9.0f) fresnel = 9.0f; else if (fresnel == 0.0f) - fresnel = draw_state->fresnel; + fresnel = draw_state.fresnel; fresnel = (fresnel - 1.0f) * 0.12f * 0.82f; rctx->obj_batch.g_fresnel_coefficients = { fresnel, 0.18f, line_light, 0.0f }; @@ -857,15 +857,15 @@ static void draw_object_material_set_parameter(const obj_material_data* mat_data float_t reflect_uv_scale; float_t refract_uv_scale; float_t inv_bump_depth; - if (draw_state->use_global_material) { - bump_depth = draw_state->bump_depth; - intensity = draw_state->intensity; - reflect_uv_scale = draw_state->reflect_uv_scale; - refract_uv_scale = draw_state->refract_uv_scale; - inv_bump_depth = (1.0f - draw_state->bump_depth) * 64.0f + 1.0f; + if (draw_state.use_global_material) { + bump_depth = draw_state.bump_depth; + intensity = draw_state.intensity; + reflect_uv_scale = draw_state.reflect_uv_scale; + refract_uv_scale = draw_state.refract_uv_scale; + inv_bump_depth = (1.0f - draw_state.bump_depth) * 64.0f + 1.0f; vec4 specular = mat_data->material.color.specular; - specular.w = draw_state->reflectivity; + specular.w = draw_state.reflectivity; rctx->obj_batch.g_material_state_specular = specular; } else { @@ -951,7 +951,7 @@ static void draw_object_material_set_reflect(const mdl::ObjSubMeshArgs* args) { draw_object_material_set_uniform(material, true); rctx->obj_batch.g_texture_blend = { (float_t)uniform->arr[U_TEXTURE_BLEND], 0.0f, 0.0f, 0.0f }; - shaders_ft.set(draw_state->shader_index); + shaders_ft.set(draw_state.shader_index); rctx->obj_batch.g_material_state_ambient = ambient; rctx->obj_batch.g_material_state_diffuse = diffuse; rctx->obj_batch.g_material_state_emission = emission; diff --git a/src/DivaGL/render_context.cpp b/src/DivaGL/render_context.cpp index d87eef1..6624390 100644 --- a/src/DivaGL/render_context.cpp +++ b/src/DivaGL/render_context.cpp @@ -6,6 +6,8 @@ #include "render_context.hpp" #include "render_manager.hpp" +draw_state_struct& draw_state = *(draw_state_struct*)0x00000001411A32B0; + void draw_state_stats::reset() { object_draw_count = 0; object_translucent_draw_count = 0; @@ -17,8 +19,6 @@ void draw_state_stats::reset() { field_1C = 0; } -draw_state_struct* draw_state = (draw_state_struct*)0x00000001411A32B0; - render_context* rctx; sss_data* (FASTCALL* sss_data_get)() diff --git a/src/DivaGL/render_context.hpp b/src/DivaGL/render_context.hpp index d02d423..d905297 100644 --- a/src/DivaGL/render_context.hpp +++ b/src/DivaGL/render_context.hpp @@ -322,7 +322,7 @@ struct render_context { void init(); }; -extern draw_state_struct* draw_state; +extern draw_state_struct& draw_state; extern render_context* rctx; diff --git a/src/DivaGL/render_manager.cpp b/src/DivaGL/render_manager.cpp index 8b88d35..a67a532 100644 --- a/src/DivaGL/render_manager.cpp +++ b/src/DivaGL/render_manager.cpp @@ -281,7 +281,7 @@ namespace rndr { disp_manager->draw(mdl::OBJ_TYPE_TRANSPARENT); disp_manager->draw(mdl::OBJ_TYPE_TRANSLUCENT); - draw_state->shader_index = -1; + draw_state.shader_index = -1; uniform->arr[U_DEPTH] = 0; draw_pass_shadow_filter(&litproj_shadow[0], &litproj_shadow[1], 0, 1.5f, 0.01f, true); @@ -300,7 +300,7 @@ namespace rndr { gl_state_enable_blend(); disp_manager->draw(mdl::OBJ_TYPE_TRANSLUCENT); gl_state_disable_blend(); - draw_state->shader_index = -1; + draw_state.shader_index = -1; gl_state_bind_framebuffer(0); } } @@ -389,13 +389,13 @@ namespace rndr { rctx->obj_scene_ubo.WriteMemory(rctx->obj_scene); - draw_state->shader_index = SHADER_FT_SSS_SKIN; + draw_state.shader_index = SHADER_FT_SSS_SKIN; gl_state_enable_depth_test(); gl_state_set_depth_func(GL_LEQUAL); gl_state_set_depth_mask(GL_TRUE); disp_manager->draw(mdl::OBJ_TYPE_SSS); gl_state_disable_depth_test(); - draw_state->shader_index = -1; + draw_state.shader_index = -1; draw_pass_3d_shadow_reset(); uniform->arr[U_NPR] = 0; @@ -410,12 +410,12 @@ namespace rndr { rend->rend_texture[0].Bind(); rend->rend_texture[0].SetViewport(); glClearDLL(GL_DEPTH_BUFFER_BIT); - draw_state->shader_index = SHADER_FT_SSS_SKIN; + draw_state.shader_index = SHADER_FT_SSS_SKIN; gl_state_enable_depth_test(); gl_state_set_depth_mask(GL_TRUE); disp_manager->draw(mdl::OBJ_TYPE_SSS); gl_state_disable_depth_test(); - draw_state->shader_index = -1; + draw_state.shader_index = -1; gl_state_bind_framebuffer(0); uniform->arr[U_NPR] = 1; draw_pass_sss_contour(rend); @@ -478,7 +478,7 @@ namespace rndr { glClearColorDLL(0.0f, 0.0f, 0.0f, 0.0f); glClearDLL(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - draw_state->shader_index = SHADER_FT_S_REFL; + draw_state.shader_index = SHADER_FT_S_REFL; light_set* set = &light_set_data[LIGHT_SET_MAIN]; light_clip_plane clip_plane; @@ -505,7 +505,7 @@ namespace rndr { } gl_state_disable_depth_test(); uniform->arr[U_REFLECT] = 0; - draw_state->shader_index = -1; + draw_state.shader_index = -1; refl_buf_tex.Bind(); for (int32_t i = reflect_blur_num, j = 0; i > 0; i--, j++) { @@ -551,7 +551,7 @@ namespace rndr { glClearDLL(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColorDLL(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - draw_state->shader_index = SHADER_FT_S_REFR; + draw_state.shader_index = SHADER_FT_S_REFR; gl_state_enable_depth_test(); gl_state_set_depth_func(GL_LEQUAL); gl_state_set_depth_mask(GL_TRUE); @@ -559,7 +559,7 @@ namespace rndr { disp_manager->draw(mdl::OBJ_TYPE_REFRACT_TRANSPARENT); disp_manager->draw(mdl::OBJ_TYPE_REFRACT_TRANSLUCENT); gl_state_disable_depth_test(); - draw_state->shader_index = -1; + draw_state.shader_index = -1; } else { vec4 clear_color; @@ -1154,7 +1154,7 @@ static void draw_pass_shadow_begin_make_shadowmap(Shadow* shad, int32_t index, i mat4_mul(&proj, &temp, &rctx->proj_mat); mat4_look_at(view_point, interest, &rctx->view_mat); - draw_state->shader_index = SHADER_FT_SIL; + draw_state.shader_index = SHADER_FT_SIL; uniform->arr[U_DEPTH] = 0; } @@ -1162,7 +1162,7 @@ static void draw_pass_shadow_end_make_shadowmap(Shadow* shad, int32_t index, int gl_state_disable_depth_test(); gl_state_disable_scissor_test(); - draw_state->shader_index = -1; + draw_state.shader_index = -1; if (a3 == shad->num_light - 1) { draw_pass_shadow_filter(&shad->render_textures[3], &shad->render_textures[4], shad->curr_render_textures[0], @@ -1331,7 +1331,7 @@ static bool draw_pass_shadow_litproj() { return false; } - draw_state->shader_index = SHADER_FT_LITPROJ; + draw_state.shader_index = SHADER_FT_LITPROJ; gl_state_active_bind_texture_2d(17, tex->tex); gl_state_bind_sampler(17, rctx->render_samplers[2]); gl_state_active_bind_texture_2d(18, litproj_shadow[0].GetColorTex()); @@ -1355,7 +1355,7 @@ static bool draw_pass_shadow_litproj_set() { glClearBufferfv(GL_DEPTH, 0, &depth_clear); if (draw_pass_shadow_litproj_set_mat(false)) { - draw_state->shader_index = SHADER_FT_SIL; + draw_state.shader_index = SHADER_FT_SIL; uniform->arr[U_DEPTH] = 1; return true; } @@ -1597,8 +1597,8 @@ static void draw_pass_3d_shadow_reset() { gl_state_active_bind_texture_2d(7, 0); rctx->obj_scene.set_g_self_shadow_receivers(0, mat4_identity); rctx->obj_scene.set_g_self_shadow_receivers(1, mat4_identity); - draw_state->self_shadow = false; - draw_state->light = false; + draw_state.self_shadow = false; + draw_state.light = false; } static void draw_pass_3d_shadow_set(Shadow* shad) { @@ -1608,20 +1608,20 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { gl_state_active_texture(0); float_t esm_param = (shad->field_2D8 * shad->field_208 * 2.0f) * 1.442695f; rctx->obj_scene.g_esm_param = { esm_param, 0.0f, 0.0f, 0.0f }; - draw_state->self_shadow = true; + draw_state.self_shadow = true; } else { gl_state_active_bind_texture_2d(19, rctx->empty_texture_2d); gl_state_active_bind_texture_2d(20, rctx->empty_texture_2d); gl_state_active_texture(0); - draw_state->self_shadow = false; + draw_state.self_shadow = false; } gl_state_bind_sampler(19, rctx->render_samplers[0]); gl_state_bind_sampler(20, rctx->render_samplers[0]); if (shad->num_light > 0) { - draw_state->light = true; + draw_state.light = true; uniform->arr[U_LIGHT_1] = shad->num_light > 1 ? 1 : 0; float_t shadow_range = shad->get_shadow_range(); @@ -1682,7 +1682,7 @@ static void draw_pass_3d_shadow_set(Shadow* shad) { rctx->obj_scene.g_shadow_ambient1 = { 1.0f - ambient.x, 1.0f - ambient.y, 1.0f - ambient.z, 0.0f }; } else { - draw_state->light = false; + draw_state.light = false; for (int32_t i = 0; i < 2; i++) gl_state_active_bind_texture_2d(6 + i, shad->curr_render_textures[1 + i]->GetColorTex());