mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-01 11:18:23 +03:00
Added new findings (again)
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user