diff --git a/src/DivaGL/render_context.cpp b/src/DivaGL/render_context.cpp index 6624390..3fc747b 100644 --- a/src/DivaGL/render_context.cpp +++ b/src/DivaGL/render_context.cpp @@ -8,6 +8,10 @@ draw_state_struct& draw_state = *(draw_state_struct*)0x00000001411A32B0; +sss_data& _sss_data = *(sss_data*)0x000000014CC924E0; + +render_context* rctx; + void draw_state_stats::reset() { object_draw_count = 0; object_translucent_draw_count = 0; @@ -19,10 +23,10 @@ void draw_state_stats::reset() { field_1C = 0; } -render_context* rctx; - -sss_data* (FASTCALL* sss_data_get)() - = (sss_data * (FASTCALL*)())0x0000000140641B70; +void sss_data::set_texture(int32_t texture_index) { + gl_state_active_bind_texture_2d(16, textures[texture_index].GetColorTex()); + gl_state_active_texture(0); +} void draw_state_struct::set_fog_height(bool value) { fog_height = value; @@ -509,6 +513,10 @@ void render_context::init() { screen_buffer.Init(screen_width, screen_height, 0, GL_RGBA8, 0); } +sss_data* sss_data_get() { + return &_sss_data; +} + void fbo_blit(GLuint src_fbo, GLuint dst_fbo, GLint src_x, GLint src_y, GLint src_width, GLint src_height, GLint dst_x, GLint dst_y, GLint dst_width, GLint dst_height, GLbitfield mask, GLenum filter) { diff --git a/src/DivaGL/render_context.hpp b/src/DivaGL/render_context.hpp index d905297..9eddecd 100644 --- a/src/DivaGL/render_context.hpp +++ b/src/DivaGL/render_context.hpp @@ -33,11 +33,13 @@ struct draw_state_stats { }; struct sss_data { - bool init; + bool init_data; bool enable; bool npr_contour; RenderTexture textures[4]; vec4 param; + + void set_texture(int32_t); }; struct draw_state_struct { @@ -326,7 +328,7 @@ extern draw_state_struct& draw_state; extern render_context* rctx; -extern sss_data* (FASTCALL* sss_data_get)(); +extern sss_data* sss_data_get(); void fbo_blit(GLuint src_fbo, GLuint dst_fbo, GLint src_x, GLint src_y, GLint src_width, GLint src_height, diff --git a/src/DivaGL/render_manager.cpp b/src/DivaGL/render_manager.cpp index a67a532..ed8099f 100644 --- a/src/DivaGL/render_manager.cpp +++ b/src/DivaGL/render_manager.cpp @@ -358,7 +358,7 @@ namespace rndr { void RenderManager::pass_ss_sss() { ::sss_data* sss = sss_data_get(); - if (!sss->init || !sss->enable) + if (!sss->init_data || !sss->enable) return; gl_state_begin_event("pass_ss_sss"); @@ -695,8 +695,7 @@ namespace rndr { uniform->arr[U_WATER_REFLECT] = 0; } - gl_state_active_bind_texture_2d(16, sss_data_get()->textures[1].GetColorTex()); - gl_state_active_texture(0); + sss_data_get()->set_texture(1); gl_state_bind_sampler(14, rctx->render_samplers[0]); gl_state_bind_sampler(15, rctx->render_samplers[0]);