diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index 47e396d4..ebb79b1e 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -3072,7 +3072,7 @@ namespace mdl { namespace rndr { RenderManager::RenderManager() : pass_sw(), reflect_blur_num(), reflect_blur_filter(), sync_gpu(), - cpu_time(), gpu_time(), time(), draw_pass_3d(), reflect_type(), tex_index(), + cpu_time(), gpu_time(), time(), draw_pass_3d(), show_ref_map(), reflect_type(), clear(), tex_index(), multisample_framebuffer(), multisample_renderbuffer(), multisample(), show_vector_flags(), show_vector_length(), show_vector_z_offset(), field_2F8(), effect_texture(), npr_param(), field_31C(), field_31D(), field_31E(), field_31F(), field_320(), npr(), samplers(), sprite_samplers() { @@ -3082,7 +3082,7 @@ namespace rndr { 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_USER, false); + set_pass_sw(RND_PASSID_PRE_PROCESS, false); set_pass_sw(RND_PASSID_SHOW_VECTOR, false); shadow = true; @@ -3192,14 +3192,14 @@ namespace rndr { delete shadow_ptr; } - void RenderManager::add_user_func(int32_t type, void(*func)(void*), void* data) { - user.push_back({ type, func, data }); + void RenderManager::add_pre_process(int32_t type, void(*func)(void*), void* data) { + pre_process.push_back({ type, func, data }); } - void RenderManager::clear_user_func(int32_t type) { - for (std::list::iterator i = user.begin(); i != user.end(); i++) + void RenderManager::clear_pre_process(int32_t type) { + for (std::list::iterator i = pre_process.begin(); i != pre_process.end(); i++) if (i->type == type) { - user.erase(i); + pre_process.erase(i); break; } } diff --git a/src/CRE/render_context.hpp b/src/CRE/render_context.hpp index dff4ad0b..a14774c2 100644 --- a/src/CRE/render_context.hpp +++ b/src/CRE/render_context.hpp @@ -151,18 +151,18 @@ namespace mdl { namespace rndr { enum RenderPassID { - RND_PASSID_SHADOWMAP = 0, + RND_PASSID_SHADOW = 0, RND_PASSID_SS_SSS, RND_PASSID_2, RND_PASSID_REFLECT, RND_PASSID_REFRACT, - RND_PASSID_USER, + RND_PASSID_PRE_PROCESS, RND_PASSID_CLEAR, - RND_PASSID_SPRITE_BG, - RND_PASSID_ALL_3D, + RND_PASSID_PRE_SPRITE, + RND_PASSID_3D, RND_PASSID_SHOW_VECTOR, RND_PASSID_POST_PROCESS, - RND_PASSID_SPRITE_FG, + RND_PASSID_SPRITE, RND_PASSID_12, RND_PASSID_NUM, }; @@ -224,7 +224,7 @@ struct draw_state { void set_fog_height(bool value); }; -struct draw_user { +struct draw_pre_process { int32_t type; void(*func)(void*); void* data; @@ -638,7 +638,9 @@ namespace rndr { bool opaque_z_sort; bool alpha_z_sort; bool draw_pass_3d[DRAW_PASS_3D_MAX]; + bool show_ref_map; stage_data_reflect_type reflect_type; + bool clear; int32_t tex_index[12]; // Extra for buf RenderTexture render_textures[9]; // Extra for buf GLuint multisample_framebuffer; @@ -648,7 +650,7 @@ namespace rndr { float_t show_vector_length; float_t show_vector_z_offset; bool field_2F8; - std::list user; + std::list pre_process; texture* effect_texture; int32_t npr_param; bool field_31C; @@ -664,8 +666,8 @@ namespace rndr { RenderManager(); ~RenderManager(); - void add_user_func(int32_t type, void(*func)(void*), void* data); - void clear_user_func(int32_t type); + void add_pre_process(int32_t type, void(*func)(void*), void* data); + void clear_pre_process(int32_t type); RenderTexture& get_render_texture(int32_t index); void resize(int32_t width, int32_t height); void set_effect_texture(texture* value); @@ -688,20 +690,20 @@ namespace rndr { void render_pass_begin(); void render_pass_end(rndr::RenderPassID id); - void pass_shadowmap(render_context* rctx); + void pass_shadow(render_context* rctx); void pass_ss_sss(render_context* rctx); void pass_reflect(render_context* rctx); void pass_refract(render_context* rctx); - void pass_user(render_context* rctx); + void pass_pre_process(render_context* rctx); void pass_clear(render_context* rctx); - void pass_sprite_bg(render_context* rctx); - void pass_all_3d(render_context* rctx); + void pass_pre_sprite(render_context* rctx); + void pass_3d(render_context* rctx); void pass_show_vector(render_context* rctx); void pass_post_process(render_context* rctx); - void pass_sprite_fg(render_context* rctx); + void pass_sprite(render_context* rctx); void pass_3d_contour(render_context* rctx); - void pass_sprite_fg_surf(render_context* rctx); + void pass_sprite_surf(render_context* rctx); }; } diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index c677dd9f..627c7f10 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -71,8 +71,21 @@ namespace rndr { gl_state_enable_depth_test(); gl_state_set_depth_func(GL_LEQUAL); gl_state_set_depth_mask(GL_TRUE); - for (int32_t i = RND_PASSID_SHADOWMAP; i < RND_PASSID_NUM; i++) + + gl_state_begin_event("rndpass_render_all_pass::Caller::execute_pre3d"); + for (int32_t i = RND_PASSID_SHADOW; i <= RND_PASSID_CLEAR; i++) RenderManager::render_single_pass((RenderPassID)i, rctx); + gl_state_end_event(); + + gl_state_begin_event("rndpass_render_all_pass::Caller::execute_3d"); + for (int32_t i = RND_PASSID_PRE_SPRITE; i <= RND_PASSID_3D; i++) + RenderManager::render_single_pass((RenderPassID)i, rctx); + gl_state_end_event(); + + gl_state_begin_event("rndpass_render_all_pass::Caller::execute_2d"); + for (int32_t i = RND_PASSID_SHOW_VECTOR; i <= RND_PASSID_12; i++) + RenderManager::render_single_pass((RenderPassID)i, rctx); + gl_state_end_event(); rctx->disp_manager.check_vertex_arrays(); gl_state_bind_vertex_array(0); @@ -94,8 +107,8 @@ namespace rndr { render_pass_begin(); switch (id) { - case RND_PASSID_SHADOWMAP: - pass_shadowmap(rctx); + case RND_PASSID_SHADOW: + pass_shadow(rctx); break; case RND_PASSID_SS_SSS: pass_ss_sss(rctx); @@ -106,17 +119,17 @@ namespace rndr { case RND_PASSID_REFRACT: pass_refract(rctx); break; - case RND_PASSID_USER: - pass_user(rctx); + case RND_PASSID_PRE_PROCESS: + pass_pre_process(rctx); break; case RND_PASSID_CLEAR: pass_clear(rctx); break; - case RND_PASSID_SPRITE_BG: - pass_sprite_bg(rctx); + case RND_PASSID_PRE_SPRITE: + pass_pre_sprite(rctx); break; - case RND_PASSID_ALL_3D: - pass_all_3d(rctx); + case RND_PASSID_3D: + pass_3d(rctx); break; case RND_PASSID_SHOW_VECTOR: pass_show_vector(rctx); @@ -124,8 +137,8 @@ namespace rndr { case RND_PASSID_POST_PROCESS: pass_post_process(rctx); break; - case RND_PASSID_SPRITE_FG: - pass_sprite_fg(rctx); + case RND_PASSID_SPRITE: + pass_sprite(rctx); break; } render_pass_end(id); @@ -149,8 +162,8 @@ namespace rndr { gpu_time[id] = 0; } - void RenderManager::pass_shadowmap(render_context* rctx) { - gl_state_begin_event("pass_shadowmap"); + void RenderManager::pass_shadow(render_context* rctx) { + gl_state_begin_event("pass_shadow"); rctx->camera->update_data(); if (rctx->litproj->set(rctx)) { rctx->obj_scene_ubo.WriteMapMemory(rctx->obj_scene); @@ -460,9 +473,9 @@ namespace rndr { gl_state_end_event(); } - void RenderManager::pass_user(render_context* rctx) { - gl_state_begin_event("pass_user"); - for (draw_user& i : user) + void RenderManager::pass_pre_process(render_context* rctx) { + gl_state_begin_event("pass_pre_process"); + for (draw_pre_process& i : pre_process) if (i.func) i.func(i.data); gl_state_end_event(); @@ -471,7 +484,7 @@ namespace rndr { void RenderManager::pass_clear(render_context* rctx) { gl_state_begin_event("pass_clear"); - if (false/*field_128*/) { + if (clear) { vec4 clear_color = get_clear_color(); glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -490,7 +503,7 @@ namespace rndr { vec4 clear_color = get_clear_color(); glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); glClearDepth(1.0f); - if (false/*field_128*/) + if (clear) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); else glClear(GL_DEPTH_BUFFER_BIT); @@ -504,7 +517,7 @@ namespace rndr { glClear(GL_COLOR_BUFFER_BIT); gl_state_bind_framebuffer(0); } - else if (false/*field_128*/) { + else if (clear) { vec4 clear_color = get_clear_color(); glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); glClear(GL_COLOR_BUFFER_BIT); @@ -516,11 +529,11 @@ namespace rndr { gl_state_end_event(); } - void RenderManager::pass_sprite_bg(render_context* rctx) { + void RenderManager::pass_pre_sprite(render_context* rctx) { if (!sprite_manager_get_reqlist_count(2)) return; - gl_state_begin_event("pass_sprite_bg"); + gl_state_begin_event("pass_pre_sprite"); post_process* pp = &rctx->post_process; pp->set_render_texture(true); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); @@ -541,8 +554,7 @@ namespace rndr { gl_state_end_event(); } - void RenderManager::pass_all_3d(render_context* rctx) { - gl_state_begin_event("pass_all_3d"); + void RenderManager::pass_3d(render_context* rctx) { rctx->camera->update_data(); rctx->post_process.set_render_texture(); draw_pass_set_camera(rctx); @@ -725,9 +737,8 @@ namespace rndr { if (shadow) draw_pass_3d_shadow_reset(rctx); shader::unbind(); - pass_sprite_fg_surf(rctx); + pass_sprite_surf(rctx); gl_state_bind_framebuffer(0); - gl_state_end_event(); } void RenderManager::pass_show_vector(render_context* rctx) { @@ -786,11 +797,11 @@ namespace rndr { gl_state_end_event(); } - void RenderManager::pass_sprite_fg(render_context* rctx) { + void RenderManager::pass_sprite(render_context* rctx) { if (!sprite_manager_get_reqlist_count(0)) return; - gl_state_begin_event("pass_sprite_fg"); + gl_state_begin_event("pass_sprite"); post_process* pp = &rctx->post_process; glViewport(0, 0, pp->sprite_width, pp->sprite_height); @@ -864,7 +875,7 @@ namespace rndr { gl_state_disable_blend(); } - void RenderManager::pass_sprite_fg_surf(render_context* rctx) { + void RenderManager::pass_sprite_surf(render_context* rctx) { if (!sprite_manager_get_reqlist_count(1)) return; diff --git a/src/CRE/task_effect.cpp b/src/CRE/task_effect.cpp index 8aa8118b..b138063d 100644 --- a/src/CRE/task_effect.cpp +++ b/src/CRE/task_effect.cpp @@ -978,8 +978,8 @@ void TaskEffectFogRing::Data::Dest() { ssbo.Destroy(); - rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_USER, false); - rctx_ptr->render_manager.clear_user_func(0); + rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_PRE_PROCESS, false); + rctx_ptr->render_manager.clear_pre_process(0); rctx_ptr->draw_state.set_fog_height(false); } @@ -1053,8 +1053,8 @@ void TaskEffectFogRing::Data::Reset() { } void TaskEffectFogRing::Data::SetStageIndices(std::vector& stage_indices) { - rctx_ptr->render_manager.clear_user_func(0); - rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_USER, false); + rctx_ptr->render_manager.clear_pre_process(0); + rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_PRE_PROCESS, false); disp = false; current_stage_index = -1; this->stage_indices.clear(); @@ -1144,8 +1144,8 @@ void TaskEffectFogRing::Data::SetStageIndices(std::vector& stage_indice InitParticleData(); - rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_USER, true); - rctx_ptr->render_manager.add_user_func(0, TaskEffectFogRing::Data::DrawStatic, this); + rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_PRE_PROCESS, true); + rctx_ptr->render_manager.add_pre_process(0, TaskEffectFogRing::Data::DrawStatic, this); } void TaskEffectFogRing::Data::DrawStatic(void* data) { @@ -1815,8 +1815,8 @@ void ripple_emit::ctrl() { void ripple_emit::dest() { stage_param_data_ripple_storage_clear(); - rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_USER, false); - rctx_ptr->render_manager.clear_user_func(0); + rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_PRE_PROCESS, false); + rctx_ptr->render_manager.clear_pre_process(0); this->ground_y = -1001.0; } @@ -1968,8 +1968,8 @@ void ripple_emit::set_stage_indices(std::vector& stage_indices) { counter = 0; field_BEC = 0; - rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_USER, true); - rctx_ptr->render_manager.add_user_func(0, ripple_emit::draw_static, this); + rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_PRE_PROCESS, true); + rctx_ptr->render_manager.add_pre_process(0, ripple_emit::draw_static, this); field_4F0 = 18; for (struc_207& i : field_4F4) diff --git a/src/ReDIVA/system_startup.cpp b/src/ReDIVA/system_startup.cpp index ee5aba1b..ca220f45 100644 --- a/src/ReDIVA/system_startup.cpp +++ b/src/ReDIVA/system_startup.cpp @@ -59,7 +59,7 @@ namespace system_startup_detail { system_startup.state = 4; break; case 4: - rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_ALL_3D, false); + rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_3D, false); task_pv_game_init_test_pv(); system_startup.state = 5; break; @@ -76,7 +76,7 @@ namespace system_startup_detail { system_startup.state = 8; break; case 8: - rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_ALL_3D, true); + rctx_ptr->render_manager.set_pass_sw(rndr::RND_PASSID_3D, true); system_startup_ready = 1; break; }