Changed reference of draw_state variable
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)()
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user