mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-05 05:07:56 +03:00
Added some missing code for Liar Betty PV
This commit is contained in:
+1
-1
@@ -3151,7 +3151,7 @@ void EffectRipple::draw() {
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
if (rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_USER)) {
|
||||
gl_state_active_bind_texture_2d(7, rt[counter % 3]->GetColorTex());
|
||||
rctx->disp_manager->draw(mdl::OBJ_TYPE_USER, 0, true);
|
||||
rctx->disp_manager->draw(mdl::OBJ_TYPE_USER);
|
||||
gl_state_active_bind_texture_2d(7, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@ static const GLuint BONE_INDEX_INDEX = 15;
|
||||
static void object_data_get_vertex_attrib_buffer_bindings(const mdl::ObjSubMeshArgs* args,
|
||||
int32_t texcoord_array[2], GLuint vertex_attrib_buffer_binding[16]);
|
||||
|
||||
static void sub_140436760();
|
||||
|
||||
material_list_struct::material_list_struct() : blend_color(), has_blend_color(), emission(), has_emission() {
|
||||
hash = (uint32_t)-1;
|
||||
}
|
||||
@@ -1994,7 +1996,7 @@ namespace mdl {
|
||||
i.reset_vertex_attrib();
|
||||
}
|
||||
|
||||
void DispManager::draw(ObjType type, int32_t depth_mask, bool a4) {
|
||||
void DispManager::draw(ObjType type, int32_t depth_mask, bool reflect_texture_mask) {
|
||||
if (type < 0 || type >= mdl::OBJ_TYPE_MAX || get_obj_count(type) < 1)
|
||||
return;
|
||||
|
||||
@@ -2082,7 +2084,7 @@ namespace mdl {
|
||||
break;
|
||||
case OBJ_TYPE_REFLECT_OPAQUE:
|
||||
alpha_test = 1;
|
||||
if (!a4)
|
||||
if (!reflect_texture_mask)
|
||||
func = draw_sub_mesh_reflect_reflect_map;
|
||||
break;
|
||||
case OBJ_TYPE_REFLECT_TRANSLUCENT:
|
||||
@@ -3108,11 +3110,14 @@ namespace mdl {
|
||||
return wet_param;
|
||||
}
|
||||
|
||||
void DispManager::obj_sort(const mat4* view, ObjType type, int32_t compare_func) {
|
||||
void DispManager::obj_sort(const mat4* view, ObjType type, int32_t compare_func, bool a3) {
|
||||
std::list<ObjData*>& list = obj[type];
|
||||
if (list.size() < 1)
|
||||
return;
|
||||
|
||||
if (a3 && type == mdl::OBJ_TYPE_TRANSLUCENT)
|
||||
sub_140436760();
|
||||
|
||||
calc_obj_radius(view, type);
|
||||
|
||||
switch (compare_func) {
|
||||
@@ -3296,3 +3301,65 @@ static void object_data_get_vertex_attrib_buffer_bindings(const mdl::ObjSubMeshA
|
||||
vertex_attrib_buffer_binding[MORPH_COLOR_INDEX] = morph_vertex_buffer;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_140436760() {
|
||||
camera* cam = rctx_ptr->camera;
|
||||
mat4* view = &cam->view;
|
||||
|
||||
for (auto& i : rctx_ptr->disp_manager->obj[mdl::OBJ_TYPE_TRANSLUCENT]) {
|
||||
if (i->kind != mdl::OBJ_KIND_NORMAL)
|
||||
continue;
|
||||
|
||||
const obj_mesh* mesh = i->args.sub_mesh.mesh;
|
||||
if (!mesh)
|
||||
continue;
|
||||
|
||||
const obj_sub_mesh* sub_mesh = i->args.sub_mesh.sub_mesh;
|
||||
const obj_axis_aligned_bounding_box* aabb = &sub_mesh->axis_aligned_bounding_box;
|
||||
if (mesh->attrib.m.billboard_y_axis && aabb->size.y > 1.0f && aabb->size.y < 1.2f) {
|
||||
if (!strcmp(mesh->name, "STGD2NS064_EFF_WATESMOKE_A_BMZ_000"))
|
||||
i->view_z += sub_mesh->bounding_sphere.radius;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (i->args.sub_mesh.material->material.attrib.m.src_blend_factor == OBJ_MATERIAL_BLEND_ZERO
|
||||
&& i->args.sub_mesh.material->material.attrib.m.dst_blend_factor == OBJ_MATERIAL_BLEND_ONE
|
||||
&& aabb->size.y > 2.0f && aabb->size.y < 2.5f) {
|
||||
if (strcmp(mesh->name, "STGD2NS064_EFF_DISPLAY_MZ_000") && strcmp(mesh->name, "STGD2NS064_EFF_RAY_B_MZ_000"))
|
||||
continue;
|
||||
}
|
||||
else if (aabb->size.y > 3.0f && aabb->size.x > 3.6f && aabb->size.x < 3.7f) {
|
||||
if (strcmp(mesh->name, "STGD2NS064_EFF_WATERFALL_A_MZ_000"))
|
||||
continue;
|
||||
}
|
||||
else
|
||||
continue;
|
||||
|
||||
mat4 mat;
|
||||
mat4_mul_translate(&i->mat, &aabb->center, &mat);
|
||||
mat4_mul(&mat, view, &mat);
|
||||
mat4_transpose(&mat, &mat);
|
||||
|
||||
vec4 t;
|
||||
*(vec3*)&t = aabb->size;
|
||||
t.w = 1.0f;
|
||||
|
||||
float_t view_z = vec4::dot(t ^ vec4( 0.0f, 0.0f, 0.0f, 0.0f ), mat.row2);
|
||||
if (view_z < vec4::dot(t ^ vec4( 0.0f, 0.0f, -0.0f, 0.0f ), mat.row2))
|
||||
view_z = vec4::dot(t ^ vec4( 0.0f, 0.0f, -0.0f, 0.0f ), mat.row2);
|
||||
if (view_z < vec4::dot(t ^ vec4( 0.0f, -0.0f, 0.0f, 0.0f ), mat.row2))
|
||||
view_z = -t.y;
|
||||
if (view_z < vec4::dot(t ^ vec4( 0.0f, -0.0f, -0.0f, 0.0f ), mat.row2))
|
||||
view_z = vec4::dot(t ^ vec4( 0.0f, -0.0f, -0.0f, 0.0f ), mat.row2);
|
||||
if (view_z < vec4::dot(t ^ vec4( -0.0f, 0.0f, 0.0f, 0.0f ), mat.row2))
|
||||
view_z = -t.x;
|
||||
if (view_z < vec4::dot(t ^ vec4( -0.0f, 0.0f, -0.0f, 0.0f ), mat.row2))
|
||||
view_z = vec4::dot(t ^ vec4( -0.0f, 0.0f, -0.0f, 0.0f ), mat.row2);
|
||||
if (view_z < vec4::dot(t ^ vec4( -0.0f, -0.0f, 0.0f, 0.0f ), mat.row2))
|
||||
view_z = vec4::dot(t ^ vec4( -0.0f, -0.0f, 0.0f, 0.0f ), mat.row2);
|
||||
if (view_z < vec4::dot(t ^ vec4( -0.0f, -0.0f, -0.0f, 0.0f ), mat.row2))
|
||||
view_z = vec4::dot(t ^ vec4( -0.0f, -0.0f, -0.0f, 0.0f ), mat.row2);
|
||||
i->view_z = view_z;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,7 +448,7 @@ namespace mdl {
|
||||
void check_index_buffer(GLuint buffer);
|
||||
void check_vertex_arrays();
|
||||
void check_vertex_buffer(GLuint buffer);
|
||||
void draw(mdl::ObjType type, int32_t depth_mask = 0, bool a4 = true);
|
||||
void draw(mdl::ObjType type, int32_t depth_mask = 0, bool reflect_texture_mask = true);
|
||||
void draw_translucent(mdl::ObjType type, int32_t alpha);
|
||||
/*void draw_show_vector(mdl::ObjType type, int32_t show_vector);*/
|
||||
void entry_list(ObjType type, ObjData* data);
|
||||
@@ -498,7 +498,7 @@ namespace mdl {
|
||||
void get_texture_specular_offset(vec4& value);
|
||||
void get_texture_transform(int32_t& count, texture_transform_struct*& value);
|
||||
float_t get_wet_param();
|
||||
void obj_sort(const mat4* view, ObjType type, int32_t compare_func);
|
||||
void obj_sort(const mat4* view, ObjType type, int32_t compare_func, bool a3 = false);
|
||||
void refresh();
|
||||
void set_chara_color(bool value = false);
|
||||
void set_culling_finc(bool(*func)(const obj_bounding_sphere*, const mat4*) = 0);
|
||||
|
||||
+21
-23
@@ -86,9 +86,9 @@ namespace rndr {
|
||||
RenderManager::RenderManager() : pass_sw(), reflect_blur_num(), reflect_blur_filter(),
|
||||
render(), sync_gpu(), cpu_time(), gpu_time(), draw_pass_3d(), field_11E(), field_11F(),
|
||||
field_120(), show_ref_map(), reflect_type(), clear(), tex_index(), width(), height(),
|
||||
multisample_framebuffer(), multisample_renderbuffer(), multisample(), check_state(),
|
||||
show_vector_flags(), show_vector_length(), show_vector_z_offset(), show_stage_shadow(),
|
||||
effect_texture(), npr_param(), field_31C(), field_31D(), field_31E(), field_31F(), field_320(), npr() {
|
||||
multisample_framebuffer(), multisample_renderbuffer(), multisample(), check_state(), show_vector_flags(),
|
||||
show_vector_length(), show_vector_z_offset(), show_stage_shadow(), effect_texture(), npr_param(),
|
||||
field_31C(), reflect_texture_mask(), reflect_tone_curve(), field_31F(), light_stage_ambient(), npr() {
|
||||
for (bool& i : pass_sw)
|
||||
i = true;
|
||||
|
||||
@@ -165,10 +165,10 @@ namespace rndr {
|
||||
refract = false;
|
||||
npr_param = 0;
|
||||
field_31C = false;
|
||||
field_31D = false;
|
||||
field_31E = false;
|
||||
reflect_texture_mask = false;
|
||||
reflect_tone_curve = false;
|
||||
field_31F = false;
|
||||
field_320 = false;
|
||||
light_stage_ambient = false;
|
||||
|
||||
for (bool& i : draw_pass_3d)
|
||||
i = true;
|
||||
@@ -595,7 +595,7 @@ namespace rndr {
|
||||
gl_state_enable_depth_test();
|
||||
gl_state_set_depth_func(GL_LEQUAL);
|
||||
gl_state_set_depth_mask(GL_TRUE);
|
||||
rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_OPAQUE, 0, field_31D);
|
||||
rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_OPAQUE, 0, reflect_texture_mask);
|
||||
if (reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) {
|
||||
gl_state_enable_blend();
|
||||
gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
@@ -605,7 +605,7 @@ namespace rndr {
|
||||
}
|
||||
|
||||
if (reflect_type == STAGE_DATA_REFLECT_REFLECT_MAP) {
|
||||
uniform_value[U_REFLECT] = field_31E;
|
||||
uniform_value[U_REFLECT] = reflect_tone_curve ? 1 : 0;
|
||||
uniform_value[U_CLIP_PLANE] = clip_plane.data[0];
|
||||
rctx->disp_manager->draw(mdl::OBJ_TYPE_REFLECT_CHARA_OPAQUE);
|
||||
}
|
||||
@@ -811,15 +811,21 @@ namespace rndr {
|
||||
gl_state_bind_sampler(15, rctx->render_samplers[0]);
|
||||
gl_state_bind_sampler(16, rctx->render_samplers[0]);
|
||||
|
||||
uniform_value[U12] = field_320 ? 1 : 0;
|
||||
uniform_value[U_STAGE_AMBIENT] = light_stage_ambient ? 1 : 0;
|
||||
|
||||
if (alpha_z_sort) {
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT, 1);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS, 2);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1, 1);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2, 1);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3, 1);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2_LOCAL, 1);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat,
|
||||
mdl::OBJ_TYPE_TRANSLUCENT, 1, field_31F);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat,
|
||||
mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS, 2);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat,
|
||||
mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1, 1, field_31F);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat,
|
||||
mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2, 1, field_31F);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat,
|
||||
mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_3, 1, field_31F);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat,
|
||||
mdl::OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_2_LOCAL, 1, field_31F);
|
||||
}
|
||||
|
||||
if (opaque_z_sort)
|
||||
@@ -969,14 +975,6 @@ namespace rndr {
|
||||
|
||||
rctx->obj_scene_ubo.WriteMemory(rctx->obj_scene);
|
||||
|
||||
if (alpha_z_sort) {
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT, 1);
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS, 2);
|
||||
}
|
||||
|
||||
if (opaque_z_sort)
|
||||
rctx->disp_manager->obj_sort(&rctx->view_mat, mdl::OBJ_TYPE_OPAQUE, 0);
|
||||
|
||||
//shaders_ft.env_vert_set(20, show_vector_length, show_vector_z_offset, 0.0f, 0.0f);
|
||||
for (int32_t i = 1; i < 4; i++) {
|
||||
if (!(show_vector_flags & (1 << (i - 1))))
|
||||
|
||||
@@ -81,10 +81,10 @@ namespace rndr {
|
||||
texture* effect_texture;
|
||||
int32_t npr_param;
|
||||
bool field_31C;
|
||||
bool field_31D;
|
||||
bool field_31E;
|
||||
bool reflect_texture_mask;
|
||||
bool reflect_tone_curve;
|
||||
bool field_31F;
|
||||
bool field_320;
|
||||
bool light_stage_ambient;
|
||||
bool npr;
|
||||
|
||||
RenderManager();
|
||||
|
||||
@@ -2087,7 +2087,7 @@ static const std::pair<uniform_name, bool> STAGE_uniform[] = {
|
||||
{ U_NORMAL , false },
|
||||
{ U_FOG_HEIGHT , false },
|
||||
{ U_LIGHT_1 , false },
|
||||
{ U12 , false },
|
||||
{ U_STAGE_AMBIENT, false },
|
||||
{ U_ALPHA_TEST , true }, // 11th added
|
||||
};
|
||||
|
||||
|
||||
+14
-14
@@ -576,10 +576,10 @@ static void stage_free(stage* s) {
|
||||
render_manager->set_shadow_true();
|
||||
rctx_ptr->render.set_cam_blur(0);
|
||||
npr_cloth_spec_color.w = 1.0f;
|
||||
render_manager->field_31D = false;
|
||||
render_manager->field_31E = false;
|
||||
render_manager->reflect_texture_mask = false;
|
||||
render_manager->reflect_tone_curve = false;
|
||||
render_manager->field_31F = false;
|
||||
render_manager->field_320 = false;
|
||||
render_manager->light_stage_ambient = false;
|
||||
light_chara_ambient = false;
|
||||
|
||||
if (s->auth_3d_loaded) {
|
||||
@@ -664,10 +664,10 @@ static void stage_set(stage* s, stage* other) {
|
||||
render_manager->set_reflect(false);
|
||||
render_manager->set_pass_sw(rndr::RND_PASSID_REFRACT, false);
|
||||
render_manager->set_refract(true);
|
||||
render_manager->field_31D = false;
|
||||
render_manager->field_31E = false;
|
||||
render_manager->reflect_texture_mask = false;
|
||||
render_manager->reflect_tone_curve = false;
|
||||
render_manager->field_31F = false;
|
||||
render_manager->field_320 = false;
|
||||
render_manager->light_stage_ambient = false;
|
||||
render_manager->set_shadow_true();
|
||||
rctx_ptr->render.set_cam_blur(0);
|
||||
npr_cloth_spec_color.w = 1.0f;
|
||||
@@ -698,16 +698,16 @@ static void stage_set(stage* s, stage* other) {
|
||||
render_manager->set_refract(true);
|
||||
}
|
||||
|
||||
if (other->stage_data->flags & STAGE_DATA_FLAG_1)
|
||||
render_manager->field_31D = true;
|
||||
if (other->stage_data->flags & STAGE_DATA_FLAG_4)
|
||||
render_manager->field_31E = true;
|
||||
if (other->stage_data->flags & STAGE_DATA_FLAG_8)
|
||||
render_manager->field_320 = true;
|
||||
if (other->stage_data->flags & STAGE_DATA_REFLECT_TEXTURE_MASK)
|
||||
render_manager->reflect_texture_mask = true;
|
||||
if (other->stage_data->flags & STAGE_DATA_REFLECT_TONE_CURVE)
|
||||
render_manager->reflect_tone_curve = true;
|
||||
if (other->stage_data->flags & STAGE_DATA_LIGHT_STAGE_AMBIENT)
|
||||
render_manager->light_stage_ambient = true;
|
||||
if (other->stage_data->flags & STAGE_DATA_LIGHT_CHARA_AMBIENT)
|
||||
light_chara_ambient = true;
|
||||
//if (stru_14CC92630.pv_id == 421)
|
||||
//render_manager->field_31F = true;
|
||||
//if (stage_param_data_coli_data.pv_id == 421)
|
||||
// render_manager->field_31F = true;
|
||||
//sub_14064DC10();
|
||||
effect_manager_set_current_stage_index(other->index);
|
||||
}
|
||||
|
||||
@@ -574,10 +574,10 @@ static void stage_modern_free(stage_modern* s) {
|
||||
render_manager->set_shadow_true();
|
||||
rctx_ptr->render.set_cam_blur(0);
|
||||
npr_cloth_spec_color.w = 1.0f;
|
||||
render_manager->field_31D = false;
|
||||
render_manager->field_31E = false;
|
||||
render_manager->reflect_texture_mask = false;
|
||||
render_manager->reflect_tone_curve = false;
|
||||
render_manager->field_31F = false;
|
||||
render_manager->field_320 = false;
|
||||
render_manager->light_stage_ambient = false;
|
||||
light_chara_ambient = false;
|
||||
|
||||
if (s->auth_3d_loaded) {
|
||||
@@ -655,10 +655,10 @@ static void stage_modern_set(stage_modern* s, stage_modern* other) {
|
||||
render_manager->set_reflect(false);
|
||||
render_manager->set_pass_sw(rndr::RND_PASSID_REFRACT, false);
|
||||
render_manager->set_refract(true);
|
||||
render_manager->field_31D = false;
|
||||
render_manager->field_31E = false;
|
||||
render_manager->reflect_texture_mask = false;
|
||||
render_manager->reflect_tone_curve = false;
|
||||
render_manager->field_31F = false;
|
||||
render_manager->field_320 = false;
|
||||
render_manager->light_stage_ambient = false;
|
||||
render_manager->set_shadow_true();
|
||||
rctx_ptr->render.set_cam_blur(0);
|
||||
npr_cloth_spec_color.w = 1.0f;
|
||||
|
||||
@@ -46,7 +46,7 @@ enum uniform_name {
|
||||
U_EXPOSURE,
|
||||
U_SCENE_FADE,
|
||||
U_FADE,
|
||||
U12,
|
||||
U_STAGE_AMBIENT,
|
||||
U_FLARE,
|
||||
U_FOG_HEIGHT,
|
||||
U_FOG,
|
||||
|
||||
@@ -19,10 +19,10 @@ enum stage_data_format {
|
||||
};
|
||||
|
||||
enum stage_data_flags {
|
||||
STAGE_DATA_FLAG_1 = 0x01,
|
||||
STAGE_DATA_LIGHT_CHARA_AMBIENT = 0x02,
|
||||
STAGE_DATA_FLAG_4 = 0x04,
|
||||
STAGE_DATA_FLAG_8 = 0x08,
|
||||
STAGE_DATA_REFLECT_TEXTURE_MASK = 0x01,
|
||||
STAGE_DATA_LIGHT_CHARA_AMBIENT = 0x02,
|
||||
STAGE_DATA_REFLECT_TONE_CURVE = 0x04,
|
||||
STAGE_DATA_LIGHT_STAGE_AMBIENT = 0x08,
|
||||
};
|
||||
|
||||
enum stage_data_reflect_resolution_mode {
|
||||
|
||||
Reference in New Issue
Block a user