diff --git a/src/DivaGL/camera.cpp b/src/DivaGL/camera.cpp index 56c2254..6212de2 100644 --- a/src/DivaGL/camera.cpp +++ b/src/DivaGL/camera.cpp @@ -60,7 +60,7 @@ HOOK(void, FASTCALL, camera_data_update_projection, 0x00000001401F8E90) { mat4_mul(&spr_3d_view, &spr_3d_proj, &spr_3d_proj); mat4_transpose(&spr_3d_proj, &camera_data->view_projection_aet_3d); - render->calc_projection_matrix(&camera_data->projection, camera_data->fov, + render_get()->calc_projection_matrix(&camera_data->projection, camera_data->fov, (float_t)camera_data->aspect, camera_data->min_distance, camera_data->max_distance, camera_data->projection_scale.x, camera_data->projection_scale.y, camera_data->projection_scale.z, camera_data->projection_scale.w); diff --git a/src/DivaGL/effect.cpp b/src/DivaGL/effect.cpp index 3bc5380..2388761 100644 --- a/src/DivaGL/effect.cpp +++ b/src/DivaGL/effect.cpp @@ -699,8 +699,8 @@ void snow_particle_draw() { mat4_transpose(&rctx->view_mat, &temp); snow_scene.g_view_world_row2 = temp.row2; - snow_scene.g_size_in_projection.x = 1.0f / (float_t)render->render_width[0]; - snow_scene.g_size_in_projection.y = 1.0f / (float_t)render->render_height[0]; + snow_scene.g_size_in_projection.x = 1.0f / (float_t)render_get()->render_width[0]; + snow_scene.g_size_in_projection.y = 1.0f / (float_t)render_get()->render_height[0]; snow_scene.g_size_in_projection.z = snow_particle_size_min; snow_scene.g_size_in_projection.w = snow_particle_size_max; snow_scene.g_state_point_attenuation = { 0.0f, 0.0f, point_attenuation, 0.0f }; @@ -718,7 +718,7 @@ void snow_particle_draw() { snow_particle_batch_ubo.WriteMemory(snow_batch); gl_state_active_bind_texture_2d(0, tex->tex); - gl_state_active_bind_texture_2d(1, render->rend_texture[0].GetDepthTex()); + gl_state_active_bind_texture_2d(1, render_get()->rend_texture[0].GetDepthTex()); gl_state_bind_vertex_array(rctx->common_vao); uniform->arr[U_SNOW_PARTICLE] = 0; @@ -1205,7 +1205,7 @@ HOOK(void, FASTCALL, snow_particle_init, 0x000000014035DD30, bool change_stage) snow_particle_fallen_count = 0; snow_particle_fallen_index = 0; - int32_t render_height = render->render_height[0]; + int32_t render_height = render_get()->render_height[0]; float_t snow_particle_size = (float_t)render_height * (float_t)(1.0 / 720.0); snow_particle_size_min = snow_particle_size; snow_particle_size_mid = snow_particle_size * 31.0f; diff --git a/src/DivaGL/render.cpp b/src/DivaGL/render.cpp index e8bf58f..cd0de09 100644 --- a/src/DivaGL/render.cpp +++ b/src/DivaGL/render.cpp @@ -15,7 +15,7 @@ extern bool task_stage_is_modern; extern render_context* rctx; -rndr::Render* render = (rndr::Render*)0x00000001411AB670; +rndr::Render* (FASTCALL* render_get)() = (rndr::Render * (FASTCALL*)())0x00000001404AE8A0; #define MLAA_MAX_EDGE_DETECTION_LEN (3) #define MLAA_GRID_SIDE_LEN (2 * MLAA_MAX_EDGE_DETECTION_LEN + 1) diff --git a/src/DivaGL/render.hpp b/src/DivaGL/render.hpp index d038ce0..79c4626 100644 --- a/src/DivaGL/render.hpp +++ b/src/DivaGL/render.hpp @@ -213,4 +213,4 @@ namespace rndr { static_assert(sizeof(rndr::Render) == 0x1510, "\"rndr::Render\" struct should have a size of 0x1510"); } -extern rndr::Render* render; +extern rndr::Render* (FASTCALL* render_get)(); diff --git a/src/DivaGL/render_context.cpp b/src/DivaGL/render_context.cpp index cafdfc8..d87eef1 100644 --- a/src/DivaGL/render_context.cpp +++ b/src/DivaGL/render_context.cpp @@ -499,7 +499,7 @@ void render_context::init() { src.depth_texture ? src.depth_texture->internal_format : GL_ZERO); }; - RenderTexture& render_buffer = render->rend_texture[0]; + RenderTexture& render_buffer = render_get()->rend_texture[0]; RenderTexture& reflect_buffer = render_manager->get_render_texture(1); RenderTexture& shadow_buffer = shadow_ptr_get()->render_textures[1]; init_copy_buffer(reflect_buffer, this->reflect_buffer); diff --git a/src/DivaGL/render_manager.cpp b/src/DivaGL/render_manager.cpp index cc786e3..8b88d35 100644 --- a/src/DivaGL/render_manager.cpp +++ b/src/DivaGL/render_manager.cpp @@ -584,7 +584,7 @@ namespace rndr { } void RenderManager::pass_clear() { - void(FASTCALL * clear_color_set_gl)() = (void(FASTCALL*)())0x00000001405022A0; + static void(FASTCALL * clear_color_set_gl)() = (void(FASTCALL*)())0x00000001405022A0; gl_state_begin_event("pass_clear"); if (clear) { @@ -1447,7 +1447,7 @@ static void draw_pass_sss_contour(rndr::Render* rend) { shaders_ft.set(SHADER_FT_CONTOUR); rctx->contour_coef_ubo.Bind(2); - render->draw_quad( + render_get()->draw_quad( rend->render_post_width[0], rend->render_post_height[0], rend->render_post_width_scale, rend->render_post_height_scale, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); @@ -1536,12 +1536,12 @@ static void draw_pass_sss_filter(sss_data* sss) { if (sss->npr_contour) { sss->textures[0].Bind(); glViewportDLL(0, 0, 640, 360); - rndr::Render* rend = render; + rndr::Render* rend = render_get(); uniform->arr[U_REDUCE] = 0; shaders_ft.set(SHADER_FT_REDUCE); gl_state_bind_texture_2d(rend->rend_texture[0].GetColorTex()); gl_state_bind_sampler(0, rctx->render_samplers[1]); - render->draw_quad(640, 360, 1.0f, 1.0f, + render_get()->draw_quad(640, 360, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f); } sss->textures[2].Bind(); @@ -1550,7 +1550,7 @@ static void draw_pass_sss_filter(sss_data* sss) { shaders_ft.set(SHADER_FT_SSS_FILT); gl_state_bind_texture_2d(sss->textures[0].GetColorTex()); gl_state_bind_sampler(0, rctx->render_samplers[0]); - render->draw_quad(640, 360, 1.0f, 1.0f, + render_get()->draw_quad(640, 360, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f); sss_filter_gaussian_coef_shader_data shader_data = {}; @@ -1570,7 +1570,7 @@ static void draw_pass_sss_filter(sss_data* sss) { gl_state_bind_texture_2d(sss->textures[2].GetColorTex()); gl_state_bind_sampler(0, rctx->render_samplers[0]); rctx->sss_filter_gaussian_coef_ubo.Bind(1); - render->draw_quad(320, 180, 1.0f, 1.0f, + render_get()->draw_quad(320, 180, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.96f, 1.0f, 0.0f); gl_state_bind_texture_2d(0); } @@ -1704,7 +1704,7 @@ static void draw_pass_3d_translucent(bool opaque_enable, && disp_manager->get_obj_count(translucent) < 1) return; - rndr::Render* rend = render; + rndr::Render* rend = render_get(); int32_t alpha_array[256]; int32_t count = draw_pass_3d_translucent_count_layers( diff --git a/src/DivaGL/stage.cpp b/src/DivaGL/stage.cpp index 86da88e..f10b51d 100644 --- a/src/DivaGL/stage.cpp +++ b/src/DivaGL/stage.cpp @@ -125,7 +125,7 @@ HOOK(void, FASTCALL, stage__disp, 0x0000000140649560, stage* s) { if (s->stage_data->lens_flare_texture != -1 && s->lens_flare) { int32_t object_set_id = s->stage_data->object_set_id; - rndr::Render* rend = render; + rndr::Render* rend = render_get(); rend->lens_flare_texture = object_database_get_set_texture( object_set_id, s->stage_data->lens_flare_texture); if (rend->lens_flare_texture) {