Added new findings (again)

This commit is contained in:
korenkonder
2023-09-25 20:56:26 +03:00
parent d9ad883ee4
commit 012ae2bdd2
5 changed files with 75 additions and 62 deletions
+7 -7
View File
@@ -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<draw_user>::iterator i = user.begin(); i != user.end(); i++)
void RenderManager::clear_pre_process(int32_t type) {
for (std::list<draw_pre_process>::iterator i = pre_process.begin(); i != pre_process.end(); i++)
if (i->type == type) {
user.erase(i);
pre_process.erase(i);
break;
}
}
+17 -15
View File
@@ -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<draw_user> user;
std::list<draw_pre_process> 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);
};
}
+39 -28
View File
@@ -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;
+10 -10
View File
@@ -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<int32_t>& 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<int32_t>& 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<int32_t>& 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)
+2 -2
View File
@@ -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;
}