Changed reference of draw_state variable

This commit is contained in:
korenkonder
2024-04-02 23:46:56 +03:00
parent f62503c874
commit 960ff20cda
6 changed files with 54 additions and 54 deletions
+2 -2
View File
@@ -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,
+3 -3
View File
@@ -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:
+26 -26
View File
@@ -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<GLuint>* 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;
+2 -2
View File
@@ -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)()
+1 -1
View File
@@ -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;
+20 -20
View File
@@ -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());