diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index f2a81825..00ae230c 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -71,10 +71,10 @@ void draw_state::set_fog_height(bool value) { } sss_data::sss_data() : init_data(), enable(), npr_contour(), param() { - init_data = true; + init_data = false; enable = true; npr_contour = true; - param = { 0.0f, 0.0f, 0.0f, 1.0f }; + param = 1.0f; } sss_data::~sss_data() { @@ -82,14 +82,27 @@ sss_data::~sss_data() { } void sss_data::free() { - + if (init_data) + for (RenderTexture& i : textures) + i.Free(); } void sss_data::init() { + if (init_data) + return; + textures[0].Init(640, 360, 0, GL_RGBA16F, GL_ZERO /*GL_DEPTH_COMPONENT32F*/); textures[1].Init(320, 180, 0, GL_RGBA16F, GL_ZERO); textures[2].Init(320, 180, 0, GL_RGBA16F, GL_ZERO); textures[3].Init(320, 180, 0, GL_RGBA16F, GL_ZERO); + + param = { 0.0f, 0.0f, 0.0f, 1.0f }; + init_data = true; +} + +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); } light_proj::light_proj(int32_t width, int32_t height) : enable(), texture_id() { diff --git a/src/CRE/render_context.hpp b/src/CRE/render_context.hpp index bbbfb90c..c00d210a 100644 --- a/src/CRE/render_context.hpp +++ b/src/CRE/render_context.hpp @@ -78,6 +78,7 @@ struct sss_data { void free(); void init(); + void set_texture(int32_t); }; struct light_proj { diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index a377e326..85abd2e6 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -133,14 +133,14 @@ namespace rndr { gpu_time[i] = 0.0; } - set_pass_sw(RND_PASSID_2, 0); - set_pass_sw(RND_PASSID_REFLECT, 0); - set_pass_sw(RND_PASSID_REFRACT, 0); - set_pass_sw(RND_PASSID_PRE_PROCESS, 0); - set_pass_sw(RND_PASSID_SHOW_VECTOR, 0); + set_pass_sw(RND_PASSID_2, false); + set_pass_sw(RND_PASSID_REFLECT, false); + set_pass_sw(RND_PASSID_REFRACT, false); + set_pass_sw(RND_PASSID_PRE_PROCESS, false); + set_pass_sw(RND_PASSID_SHOW_VECTOR, false); shadow_ptr = 0; - sync_gpu = 0; + sync_gpu = false; time.get_timestamp(); shadow = true; @@ -807,8 +807,7 @@ namespace rndr { uniform_value[U_WATER_REFLECT] = 0; } - gl_state_active_bind_texture_2d(16, rctx->sss_data->textures[1].GetColorTex()); - gl_state_active_texture(0); + rctx->sss_data->set_texture(1); gl_state_bind_sampler(14, rctx->render_samplers[0]); gl_state_bind_sampler(15, rctx->render_samplers[0]); diff --git a/src/CRE/shadow.cpp b/src/CRE/shadow.cpp index d9c0e03a..83dbdb7c 100644 --- a/src/CRE/shadow.cpp +++ b/src/CRE/shadow.cpp @@ -29,11 +29,10 @@ void Shadow::ctrl() { view_mat[0] = rctx_ptr->camera->view; view_mat[1] = rctx_ptr->camera->inv_view; - ::light_set* set = &rctx_ptr->light_set[LIGHT_SET_MAIN]; - light_data* data = &set->lights[LIGHT_CHARA]; + light_data& light_chara = rctx_ptr->light_set[LIGHT_SET_MAIN].lights[LIGHT_CHARA]; vec3 position; - data->get_position(position); + light_chara.get_position(position); float_t length = vec3::length(position); if (length < 0.000001f) direction = { 0.0f, 1.0f, 0.0f };