Synced changes for X Pack specific stuff between repos

This commit is contained in:
korenkonder
2025-01-05 20:42:53 +03:00
parent a6740bba28
commit e155690404
25 changed files with 227 additions and 407 deletions
+11 -11
View File
@@ -264,21 +264,21 @@ namespace Glitter {
"User",
};
void axis_angle_from_vectors(vec3* axis, float_t* angle, const vec3* vec1, const vec3* vec2) {
*axis = vec3::cross(*vec1, *vec2);
*angle = vec3::length(*axis);
void axis_angle_from_vectors(vec3& axis, float_t& angle, const vec3& vec1, const vec3& vec2) {
axis = vec3::cross(vec1, vec2);
angle = vec3::length(axis);
if (*angle >= 0.000001f)
*angle = asinf(clamp_def(*angle, -1.0f, 1.0f));
if (angle >= 0.000001f)
angle = asinf(clamp_def(angle, -1.0f, 1.0f));
else {
*angle = 0.0f;
*axis = vec3::cross(vec3(0.0f, 1.0f, 0.0f), *vec1);
if (vec3::length(*axis) < 0.000001f)
*axis = vec3::cross(vec3(0.0f, 0.0f, 1.0f), *vec1);
angle = 0.0f;
axis = vec3::cross(vec3(0.0f, 1.0f, 0.0f), vec1);
if (vec3::length(axis) < 0.000001f)
axis = vec3::cross(vec3(0.0f, 0.0f, 1.0f), vec1);
}
if (vec3::dot(*vec1, *vec2) < 0.0f)
*angle = (float_t)M_PI - *angle;
if (vec3::dot(vec1, vec2) < 0.0f)
angle = (float_t)M_PI - angle;
}
#if !SHARED_GLITTER_BUFFER
+1 -1
View File
@@ -1728,7 +1728,7 @@ namespace Glitter {
extern Random random;
extern Counter counter;
extern void axis_angle_from_vectors(vec3* axis, float_t* angle, const vec3* vec0, const vec3* vec1);
extern void axis_angle_from_vectors(vec3& axis, float_t& angle, const vec3& vec0, const vec3& vec1);
#if !SHARED_GLITTER_BUFFER
extern void CreateBuffer(size_t max_count, bool is_quad,
+6 -6
View File
@@ -315,7 +315,7 @@ namespace Glitter {
vec3 axis;
float_t angle;
axis_angle_from_vectors(&axis, &angle, &vec1, &vec2);
axis_angle_from_vectors(axis, angle, vec1, vec2);
mat4_mul_rotation(&mat, &axis, angle, &mat);
}
else
@@ -339,7 +339,7 @@ namespace Glitter {
vec3 axis;
float_t angle;
axis_angle_from_vectors(&axis, &angle, &vec1, &vec2);
axis_angle_from_vectors(axis, angle, vec1, vec2);
mat4_mul_rotation(&mat, &axis, angle, &mat);
}
return mat;
@@ -670,7 +670,7 @@ namespace Glitter {
vec3 axis;
float_t angle;
axis_angle_from_vectors(&axis, &angle, &vec1, &vec2);
axis_angle_from_vectors(axis, angle, vec1, vec2);
mat4 mat = mat4_identity;
mat4_mul_rotation(&mat, &axis, angle, &mat);
@@ -690,7 +690,7 @@ namespace Glitter {
vec3 axis;
float_t angle;
axis_angle_from_vectors(&axis, &angle, &vec1, &vec2);
axis_angle_from_vectors(axis, angle, vec1, vec2);
mat4 mat = mat4_identity;
mat4_mul_rotation(&mat, &axis, angle, &mat);
@@ -712,7 +712,7 @@ namespace Glitter {
vec3 axis;
float_t angle;
axis_angle_from_vectors(&axis, &angle, &vec1, &vec2);
axis_angle_from_vectors(axis, angle, vec1, vec2);
mat4 mat = mat4_identity;
mat4_mul_rotation(&mat, &axis, angle, &mat);
@@ -732,7 +732,7 @@ namespace Glitter {
vec3 axis;
float_t angle;
axis_angle_from_vectors(&axis, &angle, &vec1, &vec2);
axis_angle_from_vectors(axis, angle, vec1, vec2);
mat4 mat = mat4_identity;
mat4_mul_rotation(&mat, &axis, angle, &mat);
+1 -1
View File
@@ -2300,7 +2300,7 @@ namespace Glitter {
elem->mat_draw = mat;
if (disp_manager.entry_obj_by_object_info(
&mat, object_info, &elem->color, 0, local))
mat, object_info, &elem->color, 0, local))
disp++;
disp_manager.set_texture_transform(0, 0);
+8 -8
View File
@@ -4771,7 +4771,7 @@ static void auth_3d_m_object_hrc_disp(auth_3d_m_object_hrc* moh, auth_3d* auth,
if (i.mats.size())
disp_manager.entry_obj_by_object_info_object_skin(
i.object_info, 0, 0, auth->alpha, i.mats.data(), 0, 0, &i.model_transform.mat);
i.object_info, 0, 0, auth->alpha, i.mats.data(), 0, 0, i.model_transform.mat);
}
disp_manager.set_obj_flags();
@@ -6428,7 +6428,7 @@ static void auth_3d_object_disp(auth_3d_object* o, auth_3d* auth, render_context
int32_t uid_name_length = (int32_t)o->uid_name.size();
if (uid_name_length <= 3)
disp_manager.entry_obj_by_object_info(&mat, o->object_info);
disp_manager.entry_obj_by_object_info(mat, o->object_info);
else if (o->morph.curve) {
float_t morph = o->morph.value;
int32_t morph_int = (int32_t)morph;
@@ -6443,9 +6443,9 @@ static void auth_3d_object_disp(auth_3d_object* o, auth_3d* auth, render_context
sprintf_s(buf, sizeof(buf), "%.*s%03d", uid_name_length - 3, uid_name, morph_int);
object_info obj_info = obj_db->get_object_info(buf);
if (auth->alpha < 0.999f)
disp_manager.entry_obj_by_object_info(&mat, obj_info, auth->alpha);
disp_manager.entry_obj_by_object_info(mat, obj_info, auth->alpha);
else
disp_manager.entry_obj_by_object_info(&mat, obj_info);
disp_manager.entry_obj_by_object_info(mat, obj_info);
disp_manager.set_morph({}, 0.0f);
}
else {
@@ -6456,17 +6456,17 @@ static void auth_3d_object_disp(auth_3d_object* o, auth_3d* auth, render_context
object_info obj_info = obj_db->get_object_info(buf);
if (obj_info.is_null())
obj_info = o->object_info;
disp_manager.entry_obj_by_object_info(&mat, obj_info);
disp_manager.entry_obj_by_object_info(mat, obj_info);
}
}
else if (o->pattern.curve) {
sprintf_s(buf, sizeof(buf), "%.*s%03d",
uid_name_length - 3, uid_name, (int32_t)prj::roundf(o->pattern.value));
object_info obj_info = obj_db->get_object_info(buf);
disp_manager.entry_obj_by_object_info(&mat, obj_info);
disp_manager.entry_obj_by_object_info(mat, obj_info);
}
else
disp_manager.entry_obj_by_object_info(&mat, o->object_info);
disp_manager.entry_obj_by_object_info(mat, o->object_info);
disp_manager.set_texture_transform();
disp_manager.set_texture_pattern();
@@ -6613,7 +6613,7 @@ static void auth_3d_object_hrc_disp(auth_3d_object_hrc* oh, auth_3d* auth, rende
if (oh->mats.size())
disp_manager.entry_obj_by_object_info_object_skin(
oh->object_info, 0, 0, auth->alpha, oh->mats.data(), 0, 0, &mat);
oh->object_info, 0, 0, auth->alpha, oh->mats.data(), 0, 0, mat);
disp_manager.set_obj_flags();
disp_manager.set_shadow_type(SHADOW_CHARA);
+3 -3
View File
@@ -2273,7 +2273,7 @@ void EffectFogRing::dest() {
void EffectFogRing::disp() {
if (enable && display)
rctx_ptr->disp_manager->entry_obj_user(&mat4_identity,
rctx_ptr->disp_manager->entry_obj_user(mat4_identity,
(mdl::UserArgsFunc)draw_fog_particle, this, mdl::OBJ_TYPE_USER);
}
@@ -3114,7 +3114,7 @@ void EffectRipple::disp() {
void EffectRipple::disp_particles(ripple_struct* data) {
if (data->count > 0)
rctx_ptr->disp_manager->entry_obj_user(&mat4_identity,
rctx_ptr->disp_manager->entry_obj_user(mat4_identity,
(mdl::UserArgsFunc)draw_ripple_particles, data, mdl::OBJ_TYPE_USER);
}
@@ -4045,7 +4045,7 @@ void water_particle::disp() {
if (!splash)
return;
rctx_ptr->disp_manager->entry_obj_user(&mat4_identity,
rctx_ptr->disp_manager->entry_obj_user(mat4_identity,
(mdl::UserArgsFunc)draw_water_particle, this, mdl::OBJ_TYPE_TRANSLUCENT);
if (effect_ripple && !effect_ripple->use_float_ripplemap) {
+69 -70
View File
@@ -209,23 +209,22 @@ namespace mdl {
}
void ObjData::init_etc(DispManager* disp_manager, const mat4* mat, mdl::EtcObj* etc) {
void ObjData::init_etc(DispManager* disp_manager, const mat4& mat, const mdl::EtcObj& etc) {
kind = mdl::OBJ_KIND_ETC;
this->mat = *mat;
args.etc = *etc;
this->mat = mat;
args.etc = etc;
disp_manager->add_vertex_array(&args.etc, this->mat);
}
void ObjData::init_sub_mesh(DispManager* disp_manager, const mat4* mat, float_t radius,
const obj_sub_mesh* sub_mesh, const obj_mesh* mesh, const obj_material_data* material,
const std::vector<GLuint>* textures, int32_t mat_count, const mat4* mats,
GLuint vertex_buffer, size_t vertex_buffer_offset, GLuint index_buffer,
const vec4& blend_color, const vec4& emission, GLuint morph_vertex_buffer,
size_t morph_vertex_buffer_offset, int32_t instances_count, const mat4* instances_mat,
void(*func)(const ObjSubMeshArgs*), const ObjSubMeshArgs* func_data) {
void ObjData::init_sub_mesh(DispManager* disp_manager, const mat4& mat, float_t radius, const obj_sub_mesh* sub_mesh,
const obj_mesh* mesh, const obj_material_data* material, const std::vector<GLuint>* textures,
int32_t mat_count, const mat4* mats, GLuint vertex_buffer, size_t vertex_buffer_offset,
GLuint index_buffer, const vec4& blend_color, const vec4& emission, GLuint morph_vertex_buffer,
size_t morph_vertex_buffer_offset,
int32_t instances_count, const mat4* instances_mat, draw_func func, const ObjSubMeshArgs* func_data) {
kind = mdl::OBJ_KIND_NORMAL;
this->mat = *mat;
this->mat = mat;
this->radius = radius;
mdl::ObjSubMeshArgs* args = &this->args.sub_mesh;
@@ -282,15 +281,15 @@ namespace mdl {
disp_manager->add_vertex_array(args);
}
void ObjData::init_translucent(const mat4* mat, ObjTranslucentArgs* translucent) {
void ObjData::init_translucent(const mat4& mat, const ObjTranslucentArgs& translucent) {
kind = mdl::OBJ_KIND_TRANSLUCENT;
this->mat = *mat;
args.translucent = *translucent;
this->mat = mat;
args.translucent = translucent;
}
void ObjData::init_user(const mat4* mat, UserArgsFunc func, void* data) {
void ObjData::init_user(const mat4& mat, UserArgsFunc func, void* data) {
kind = OBJ_KIND_USER;
this->mat = *mat;
this->mat = mat;
args.user.func = func;
args.user.data = data;
}
@@ -1583,7 +1582,7 @@ namespace mdl {
const vec3 up = { 0.0f, 1.0f, 0.0f };
vec3 axis;
float_t angle;
Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir);
Glitter::axis_angle_from_vectors(axis, angle, up, dir);
mat4 m = mat4_identity;
mat4_mul_rotation(&m, &axis, angle, &m);
@@ -1604,7 +1603,7 @@ namespace mdl {
const vec3 up = { 0.0f, 1.0f, 0.0f };
vec3 axis;
float_t angle;
Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir);
Glitter::axis_angle_from_vectors(axis, angle, up, dir);
mat4 m = mat4_identity;
mat4_mul_rotation(&m, &axis, angle, &m);
@@ -1956,7 +1955,7 @@ namespace mdl {
mat4 mat;
mat4_translate(&i, &mat);
entry_obj_etc(&mat, &etc);
entry_obj_etc(mat, etc);
}
if (show_mat_center && type == OBJ_TYPE_TRANSLUCENT)
@@ -1970,7 +1969,7 @@ namespace mdl {
mat4 mat;
mat4_translate(&i, &mat);
entry_obj_etc(&mat, &etc);
entry_obj_etc(mat, etc);
}
}
@@ -2311,7 +2310,7 @@ namespace mdl {
}
static int32_t obj_axis_aligned_bounding_box_check_visibility(
const obj_axis_aligned_bounding_box* aabb, camera* cam, const mat4* mat) {
const obj_axis_aligned_bounding_box* aabb, camera* cam, const mat4& mat) {
vec3 points[8];
points[0] = aabb->center + (aabb->size ^ vec3( 0.0f, 0.0f, 0.0f));
points[1] = aabb->center + (aabb->size ^ vec3(-0.0f, -0.0f, -0.0f));
@@ -2323,7 +2322,7 @@ namespace mdl {
points[7] = aabb->center + (aabb->size ^ vec3(-0.0f, -0.0f, 0.0f));
mat4 view_mat;
mat4_mul(mat, &cam->view, &view_mat);
mat4_mul(&mat, &cam->view, &view_mat);
for (int32_t i = 0; i < 8; i++)
mat4_transform_point(&view_mat, &points[i], &points[i]);
@@ -2354,14 +2353,14 @@ namespace mdl {
}
static int32_t obj_bounding_sphere_check_visibility(const obj_bounding_sphere* sphere,
CullingCheck* culling, camera* cam, const mat4* mat) {
CullingCheck* culling, camera* cam, const mat4& mat) {
if (culling->func)
return culling->func(sphere, &cam->view);
vec3 center;
mat4_transform_point(mat, &sphere->center, &center);
mat4_transform_point(&mat, &sphere->center, &center);
mat4_transform_point(&cam->view, &center, &center);
float_t radius = mat4_get_max_scale(mat) * sphere->radius;
float_t radius = mat4_get_max_scale(&mat) * sphere->radius;
double_t min_depth = (double_t)center.z - (double_t)radius;
double_t max_depth = (double_t)center.z + (double_t)radius;
@@ -2390,12 +2389,12 @@ namespace mdl {
return 2;
}
bool DispManager::entry_obj(const ::obj* obj, obj_mesh_vertex_buffer* obj_vertex_buf,
obj_mesh_index_buffer* obj_index_buf, const mat4* mat, const std::vector<GLuint>* textures,
const vec4* blend_color, const mat4* bone_mat, const ::obj* object_morph,
obj_mesh_vertex_buffer* obj_morph_vertex_buf, int32_t instances_count, const mat4* instances_mat,
void(*func)(const ObjSubMeshArgs*), const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local) {
if (!obj_vertex_buf || !obj_index_buf) {
bool DispManager::entry_obj(const ::obj* obj, const mat4& mat, obj_mesh_vertex_buffer* obj_vert_buf,
obj_mesh_index_buffer* obj_index_buf, const std::vector<GLuint>* textures, const vec4* blend_color,
const mat4* bone_mat, const ::obj* obj_morph, obj_mesh_vertex_buffer* obj_morph_vert_buf,
int32_t instances_count, const mat4* instances_mat,
draw_func func, const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local) {
if (!obj_vert_buf || !obj_index_buf) {
printf_debug("mdl::DispManager::entry_obj: no vertex or index object buffer to draw;\n");
printf_debug(" Object: %s\n", obj->name);
return false;
@@ -2412,14 +2411,14 @@ namespace mdl {
culling.passed.objects++;
for (int32_t i = 0; i < obj->num_mesh; i++) {
obj_mesh* mesh = &obj->mesh_array[i];
obj_mesh* mesh_morph = 0;
if (obj_vertex_buf && obj_morph_vertex_buf) {
if (obj_vertex_buf[i].get_size() != obj_morph_vertex_buf[i].get_size())
const obj_mesh* mesh = &obj->mesh_array[i];
const obj_mesh* mesh_morph = 0;
if (obj_vert_buf && obj_morph_vert_buf) {
if (obj_vert_buf[i].get_size() != obj_morph_vert_buf[i].get_size())
continue;
if (object_morph && i < object_morph->num_mesh)
mesh_morph = &object_morph->mesh_array[i];
if (obj_morph && i < obj_morph->num_mesh)
mesh_morph = &obj_morph->mesh_array[i];
}
if (!local && object_culling && !instances_count && !bone_mat
@@ -2436,8 +2435,8 @@ namespace mdl {
int32_t translucent_priority_count = 0;
for (int32_t j = 0; j < mesh->num_submesh; j++) {
obj_sub_mesh* sub_mesh = &mesh->submesh_array[j];
obj_sub_mesh* sub_mesh_morph = 0;
const obj_sub_mesh* sub_mesh = &mesh->submesh_array[j];
const obj_sub_mesh* sub_mesh_morph = 0;
if (sub_mesh->attrib.m.cloth)
continue;
@@ -2455,13 +2454,13 @@ namespace mdl {
if (!v32) {
if (!mesh_morph || j >= mesh_morph->num_submesh) {
culling.culled.submesh_array++;
culling.culled.sub_meshes++;
continue;
}
sub_mesh_morph = &mesh_morph->submesh_array[j];
if (!sub_mesh_morph) {
culling.culled.submesh_array++;
culling.culled.sub_meshes++;
continue;
}
@@ -2476,13 +2475,13 @@ namespace mdl {
}
if (!v32) {
culling.culled.submesh_array++;
culling.culled.sub_meshes++;
continue;
}
}
}
}
culling.passed.submesh_array++;
culling.passed.sub_meshes++;
int32_t num_bone_index = sub_mesh->num_bone_index;
const uint16_t* bone_index = sub_mesh->bone_index_array;
@@ -2509,9 +2508,9 @@ namespace mdl {
GLuint morph_vertex_buffer = 0;
size_t morph_vertex_buffer_offset = 0;
if (obj_morph_vertex_buf) {
morph_vertex_buffer = obj_morph_vertex_buf[i].get_buffer();
morph_vertex_buffer_offset = obj_morph_vertex_buf[i].get_offset();
if (obj_morph_vert_buf) {
morph_vertex_buffer = obj_morph_vert_buf[i].get_buffer();
morph_vertex_buffer_offset = obj_morph_vert_buf[i].get_offset();
}
GLuint index_buffer = 0;
@@ -2520,12 +2519,12 @@ namespace mdl {
GLuint vertex_buffer = 0;
size_t vertex_buffer_offset = 0;
if (obj_vertex_buf) {
vertex_buffer = obj_vertex_buf[i].get_buffer();
vertex_buffer_offset = obj_vertex_buf[i].get_offset();
if (obj_vert_buf) {
vertex_buffer = obj_vert_buf[i].get_buffer();
vertex_buffer_offset = obj_vert_buf[i].get_offset();
}
if (!vertex_buffer || !index_buffer || obj_morph_vertex_buf && !morph_vertex_buffer) {
if (!vertex_buffer || !index_buffer || obj_morph_vert_buf && !morph_vertex_buffer) {
printf_debug("mdl::DispManager::entry_obj: no vertex or index mesh buffer to draw;\n");
printf_debug(" Object: %s; Mesh: %s; Sub Mesh: %d\n", obj->name, mesh->name, j);
continue;
@@ -2755,7 +2754,7 @@ namespace mdl {
ObjData* data = alloc_obj_data(OBJ_KIND_TRANSLUCENT);
if (data) {
data->init_translucent(mat, &translucent_args);
data->init_translucent(mat, translucent_args);
if (obj_flags & mdl::OBJ_ALPHA_ORDER_1)
entry_list(OBJ_TYPE_TRANSLUCENT_ALPHA_ORDER_1, data);
else if (obj_flags & mdl::OBJ_ALPHA_ORDER_2)
@@ -2771,7 +2770,7 @@ namespace mdl {
return true;
}
void DispManager::entry_obj_by_obj(const mat4* mat,
void DispManager::entry_obj_by_obj(const mat4& mat,
const ::obj* obj, const std::vector<GLuint>* textures, obj_mesh_vertex_buffer* obj_vert_buf,
obj_mesh_index_buffer* obj_index_buf, const mat4* bone_mat, float_t alpha) {
if (!obj)
@@ -2780,20 +2779,20 @@ namespace mdl {
vec4 blend_color = { 1.0f, 1.0f, 1.0f, alpha };
vec4* blend_color_ptr = alpha < 1.0f ? &blend_color : 0;
entry_obj(obj, obj_vert_buf, obj_index_buf, mat, textures, blend_color_ptr,
entry_obj(obj, mat, obj_vert_buf, obj_index_buf, textures, blend_color_ptr,
bone_mat, 0, 0, 0, 0, 0, 0, !!bone_mat);
}
bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info) {
bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info) {
return entry_obj_by_object_info(mat, obj_info, 0, 0, 0, 0, 0, 0, false);
}
bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info, const mat4* bone_mat) {
bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info, const mat4* bone_mat) {
vec4 blend_color = 1.0f;
return entry_obj_by_object_info(mat, obj_info, &blend_color, bone_mat, 0, 0, 0, 0, true);
}
bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info, const vec4* blend_color,
bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info, const vec4* blend_color,
const mat4* bone_mat, int32_t instances_count, const mat4* instances_mat,
void(*func)(const ObjSubMeshArgs*), const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local) {
if (obj_info.id == -1 && obj_info.set_id == -1)
@@ -2804,35 +2803,35 @@ namespace mdl {
return false;
std::vector<GLuint>* textures = objset_info_storage_get_obj_set_gentex(obj_info.set_id);
obj_mesh_vertex_buffer* obj_vertex_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(obj_info);
obj_mesh_vertex_buffer* obj_vert_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(obj_info);
obj_mesh_index_buffer* obj_index_buffer = objset_info_storage_get_obj_mesh_index_buffer(obj_info);
::obj* obj_morph = 0;
obj_mesh_vertex_buffer* obj_morph_vertex_buffer = 0;
obj_mesh_vertex_buffer* obj_morph_vert_buffer = 0;
if (morph.object.set_id != -1) {
obj_morph = objset_info_storage_get_obj(morph.object);
obj_morph_vertex_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(morph.object);
obj_morph_vert_buffer = objset_info_storage_get_obj_mesh_vertex_buffer(morph.object);
}
return entry_obj(obj, obj_vertex_buffer, obj_index_buffer,
mat, textures, blend_color, bone_mat, obj_morph, obj_morph_vertex_buffer,
return entry_obj(obj, mat, obj_vert_buffer, obj_index_buffer,
textures, blend_color, bone_mat, obj_morph, obj_morph_vert_buffer,
instances_count, instances_mat, func, func_data, enable_bone_mat, local);
}
bool DispManager::entry_obj_by_object_info(const mat4* mat,
bool DispManager::entry_obj_by_object_info(const mat4& mat,
object_info obj_info, float_t alpha, const mat4* bone_mat) {
vec4 blend_color = 1.0f;
blend_color.w = alpha;
return entry_obj_by_object_info(mat, obj_info, &blend_color, bone_mat, 0, 0, 0, 0, true);
}
bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info,
bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info,
float_t r, float_t g, float_t b, float_t a, const mat4* bone_mat, bool local) {
vec4 blend_color = { r, g, b, a };
return entry_obj_by_object_info(mat, obj_info, &blend_color, bone_mat, 0, 0, 0, 0, true, local);
}
bool DispManager::entry_obj_by_object_info(const mat4* mat, object_info obj_info,
bool DispManager::entry_obj_by_object_info(const mat4& mat, object_info obj_info,
const vec4* blend_color, const mat4* bone_mat, bool local) {
return entry_obj_by_object_info(mat, obj_info, blend_color, 0, 0, 0, 0, 0, false, local);
}
@@ -2853,14 +2852,14 @@ namespace mdl {
return false;
memmove(instances_mat, instances.data(), sizeof(mat4) * instances.size());
return entry_obj_by_object_info(&mat4_identity, obj_info, a >= 0.0f ? &blend_color : (vec4*)0,
return entry_obj_by_object_info(mat4_identity, obj_info, a >= 0.0f ? &blend_color : (vec4*)0,
0, (int32_t)instances.size(), instances_mat, 0, 0, true);
}
void DispManager::entry_obj_by_object_info_object_skin(object_info obj_info,
const std::vector<texture_pattern_struct>* texture_pattern,
const texture_data_struct* texture_data, float_t alpha,
const mat4* matrices, const mat4* ex_data_matrices, const mat4* mat, const mat4* global_mat) {
const mat4* matrices, const mat4* ex_data_matrices, const mat4* mat, const mat4& global_mat) {
obj_skin* skin = objset_info_storage_get_obj_skin(obj_info);
if (!skin)
return;
@@ -2914,13 +2913,13 @@ namespace mdl {
}
}
void DispManager::entry_obj_etc(const mat4* mat, EtcObj* etc, bool local) {
void DispManager::entry_obj_etc(const mat4& mat, const EtcObj& etc, bool local) {
ObjData* data = alloc_obj_data(mdl::OBJ_KIND_ETC);
if (!data)
return;
data->init_etc(this, mat, etc);
if (etc->color.a == 0xFF) {
if (etc.color.a == 0xFF) {
if (!local && (obj_flags & OBJ_SHADOW))
entry_list((mdl::ObjType)(OBJ_TYPE_SHADOW_CHARA + shadow_type), data);
entry_list(local ? OBJ_TYPE_OPAQUE_LOCAL : OBJ_TYPE_OPAQUE, data);
@@ -2929,7 +2928,7 @@ namespace mdl {
entry_list(local ? OBJ_TYPE_TRANSLUCENT_LOCAL : OBJ_TYPE_TRANSLUCENT, data);
}
void DispManager::entry_obj_user(const mat4* mat, UserArgsFunc func, void* data, ObjType type) {
void DispManager::entry_obj_user(const mat4& mat, UserArgsFunc func, void* data, ObjType type) {
ObjData* _data = alloc_obj_data(OBJ_KIND_USER);
if (_data) {
_data->init_user(mat, func, data);
@@ -3206,7 +3205,7 @@ namespace mdl {
chara_color = value;
}
void DispManager::set_culling_finc(bool(*func)(const obj_bounding_sphere*, const mat4*)) {
void DispManager::set_culling_func(bool(*func)(const obj_bounding_sphere*, const mat4*)) {
culling.func = func;
}
+31 -29
View File
@@ -64,6 +64,10 @@ struct texture_data_struct {
};
namespace mdl {
struct ObjSubMeshArgs;
typedef void(FASTCALL* draw_func)(const ObjSubMeshArgs* args);
enum EtcObjType {
ETC_OBJ_TEAPOT = 0,
ETC_OBJ_GRID,
@@ -194,7 +198,7 @@ namespace mdl {
texture_transform_struct texture_transform_array[TEXTURE_TRANSFORM_COUNT];
int32_t instances_count;
const mat4* instances_mat;
void(*func)(const ObjSubMeshArgs*);
draw_func func;
const ObjSubMeshArgs* func_data;
ObjSubMeshArgs();
@@ -344,16 +348,15 @@ namespace mdl {
ObjData();
~ObjData();
void init_etc(DispManager* disp_manager, const mat4* mat, mdl::EtcObj* etc);
void init_sub_mesh(DispManager* disp_manager, const mat4* mat, float_t radius,
const obj_sub_mesh* sub_mesh, const obj_mesh* mesh, const obj_material_data* material,
const std::vector<GLuint>* textures, int32_t mat_count, const mat4* mats,
GLuint vertex_buffer, size_t vertex_buffer_offset, GLuint index_buffer,
const vec4& blend_color, const vec4& emission, GLuint morph_vertex_buffer,
size_t morph_vertex_buffer_offset, int32_t instances_count, const mat4* instances_mat,
void(*func)(const ObjSubMeshArgs*), const ObjSubMeshArgs* func_data);
void init_translucent(const mat4* mat, ObjTranslucentArgs* translucent);
void init_user(const mat4* mat, UserArgsFunc func, void* data);
void init_etc(DispManager* disp_manager, const mat4& mat, const mdl::EtcObj& etc);
void init_sub_mesh(DispManager* disp_manager, const mat4& mat, float_t radius, const obj_sub_mesh* sub_mesh,
const obj_mesh* mesh, const obj_material_data* material, const std::vector<GLuint>* textures,
int32_t mat_count, const mat4* mats, GLuint vertex_buffer, size_t vertex_buffer_offset,
GLuint index_buffer, const vec4& blend_color, const vec4& emission, GLuint morph_vertex_buffer,
size_t morph_vertex_buffer_offset,
int32_t instances_count, const mat4* instances_mat, draw_func func, const ObjSubMeshArgs* func_data);
void init_translucent(const mat4& mat, const ObjTranslucentArgs& translucent);
void init_user(const mat4& mat, UserArgsFunc func, void* data);
};
typedef std::list<mdl::ObjData*> ObjList;
@@ -362,7 +365,7 @@ namespace mdl {
struct Info {
int32_t objects;
int32_t meshes;
int32_t submesh_array;
int32_t sub_meshes;
};
Info passed;
@@ -454,25 +457,24 @@ namespace mdl {
void draw(mdl::ObjType type, int32_t depth_mask = 0, bool reflect_texture_mask = true, int32_t alpha = -1);
/*void draw_show_vector(mdl::ObjType type, int32_t show_vector);*/
void entry_list(ObjType type, ObjData* data);
bool entry_obj(const ::obj* obj, obj_mesh_vertex_buffer* obj_vertex_buf,
obj_mesh_index_buffer* obj_index_buf, const mat4* mat, const std::vector<GLuint>* textures,
const vec4* blend_color, const mat4* bone_mat, const ::obj* object_morph,
obj_mesh_vertex_buffer* obj_morph_vertex_buf, int32_t instances_count, const mat4* instances_mat,
void(*func)(const mdl::ObjSubMeshArgs*), const ObjSubMeshArgs* func_data,
bool enable_bone_mat, bool local = false);
void entry_obj_by_obj(const mat4* mat,
bool entry_obj(const ::obj* obj, const mat4& mat, obj_mesh_vertex_buffer* obj_vert_buf,
obj_mesh_index_buffer* obj_index_buf, const std::vector<GLuint>* textures, const vec4* blend_color,
const mat4* bone_mat, const ::obj* obj_morph, obj_mesh_vertex_buffer* obj_morph_vert_buf,
int32_t instances_count, const mat4* instances_mat,
draw_func func, const ObjSubMeshArgs* func_data, bool enable_bone_mat, bool local = false);
void entry_obj_by_obj(const mat4& mat,
const ::obj* obj, const std::vector<GLuint>* textures, obj_mesh_vertex_buffer* obj_vert_buf,
obj_mesh_index_buffer* obj_index_buf, const mat4* bone_mat, float_t alpha);
bool entry_obj_by_object_info(const mat4* mat, object_info obj_info);
bool entry_obj_by_object_info(const mat4* mat, object_info obj_info, const mat4* bone_mat);
bool entry_obj_by_object_info(const mat4* mat, object_info obj_info, const vec4* blend_color,
bool entry_obj_by_object_info(const mat4& mat, object_info obj_info);
bool entry_obj_by_object_info(const mat4& mat, object_info obj_info, const mat4* bone_mat);
bool entry_obj_by_object_info(const mat4& mat, object_info obj_info, const vec4* blend_color,
const mat4* bone_mat, int32_t instances_count, const mat4* instances_mat,
void(*func)(const mdl::ObjSubMeshArgs*), const ObjSubMeshArgs* func_data,
bool enable_bone_mat, bool local = false);
bool entry_obj_by_object_info(const mat4* mat, object_info obj_info, float_t alpha, const mat4* bone_mat = 0);
bool entry_obj_by_object_info(const mat4* mat, object_info obj_info,
bool entry_obj_by_object_info(const mat4& mat, object_info obj_info, float_t alpha, const mat4* bone_mat = 0);
bool entry_obj_by_object_info(const mat4& mat, object_info obj_info,
float_t r, float_t g, float_t b, float_t a, const mat4* bone_mat = 0, bool local = false);
bool entry_obj_by_object_info(const mat4* mat, object_info obj_info,
bool entry_obj_by_object_info(const mat4& mat, object_info obj_info,
const vec4* blend_color, const mat4* bone_mat = 0, bool local = false);
bool entry_obj_by_object_info_instanced(object_info obj_info,
const std::vector<mat4>& instances, float_t alpha);
@@ -481,9 +483,9 @@ namespace mdl {
void entry_obj_by_object_info_object_skin(object_info obj_info,
const std::vector<texture_pattern_struct>* texture_pattern,
const texture_data_struct* texture_data, float_t alpha,
const mat4* matrices, const mat4* ex_data_matrices, const mat4* mat, const mat4* global_mat);
void entry_obj_etc(const mat4* mat, EtcObj* etc, bool local = false);
void entry_obj_user(const mat4* mat, UserArgsFunc func, void* data, ObjType type);
const mat4* matrices, const mat4* ex_data_matrices, const mat4* mat, const mat4& global_mat);
void entry_obj_etc(const mat4& mat, const EtcObj& etc, bool local = false);
void entry_obj_user(const mat4& mat, UserArgsFunc func, void* data, ObjType type);
GLuint get_vertex_array(const ObjSubMeshArgs* args);
GLuint get_vertex_array(const EtcObj* etc);
bool get_chara_color();
@@ -503,7 +505,7 @@ namespace mdl {
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);
void set_culling_func(bool(*func)(const obj_bounding_sphere*, const mat4*) = 0);
void set_obj_flags(ObjFlags flags = (ObjFlags)0);
void set_material_list(int32_t count = 0, const material_list_struct* value = 0);
void set_morph(object_info object = {}, float_t weight = 0.0f);
+3 -3
View File
@@ -666,7 +666,7 @@ inline int32_t obj_material_texture_type_get_texture_index(
}
void obj_skin_set_matrix_buffer(const obj_skin* s, const mat4* matrices,
const mat4* ex_data_matrices, mat4* matrix_buffer, const mat4* mat, const mat4* global_mat) {
const mat4* ex_data_matrices, mat4* matrix_buffer, const mat4* mat, const mat4& global_mat) {
if (!s->num_bone)
return;
@@ -679,7 +679,7 @@ void obj_skin_set_matrix_buffer(const obj_skin* s, const mat4* matrices,
else
mat4_mul(mat, &matrices[bone->id], &temp);
mat4_mul(&temp, global_mat, &temp);
mat4_mul(&temp, &global_mat, &temp);
mat4_mul(&bone->inv_bind_pose_mat, &temp, matrix_buffer);
}
else
@@ -690,7 +690,7 @@ void obj_skin_set_matrix_buffer(const obj_skin* s, const mat4* matrices,
else
temp = matrices[bone->id];
mat4_mul(&temp, global_mat, &temp);
mat4_mul(&temp, &global_mat, &temp);
mat4_mul(&bone->inv_bind_pose_mat, &temp, matrix_buffer);
}
}
+1 -1
View File
@@ -111,7 +111,7 @@ extern int32_t obj_material_texture_type_get_texture_index(
obj_material_texture_type type, int32_t base_index);
extern void obj_skin_set_matrix_buffer(const obj_skin* s, const mat4* matrices,
const mat4* ex_data_matrices, mat4* matrix_buffer, const mat4* mat, const mat4* global_mat);
const mat4* ex_data_matrices, mat4* matrix_buffer, const mat4* mat, const mat4& global_mat);
extern void object_material_msgpack_read(const char* path, const char* set_name,
obj_set* obj_set);
-168
View File
@@ -24,8 +24,6 @@
#include "static_var.hpp"
#include "texture.hpp"
#define REFLECT_STENCIL (1)
extern render_context* rctx_ptr;
bool reflect_draw = false;
@@ -50,11 +48,6 @@ static int32_t draw_pass_3d_translucent_count_layers(render_context* rctx,
static void draw_pass_3d_translucent_has_objects(render_context* rctx, bool* arr, mdl::ObjType type);
static void draw_pass_reflect_full(rndr::RenderManager* render_manager);
#if REFLECT_STENCIL
static void draw_pass_reflect_stencil(render_context* rctx, mdl::ObjType type);
static void draw_pass_reflect_make_stencil(render_context* rctx,
RenderTexture& refl_tex, RenderTexture& refl_buf_tex);
#endif
static void blur_filter_apply(render_context* rctx, RenderTexture* dst, RenderTexture* src,
blur_filter_mode filter, const vec2 res_scale, const vec4 scale, const vec4 offset);
@@ -76,11 +69,7 @@ namespace rndr {
static const RenderTextureData render_manager_render_texture_data_array[] = {
{ GL_TEXTURE_2D, 0x200, 0x100, 0, GL_RGBA8 , GL_DEPTH_COMPONENT24 },
#if REFLECT_STENCIL
{ GL_TEXTURE_2D, 0x200, 0x100, 0, GL_RGBA16F, GL_DEPTH24_STENCIL8 },
#else
{ GL_TEXTURE_2D, 0x200, 0x100, 0, GL_RGBA16F, GL_DEPTH_COMPONENT24 },
#endif
{ GL_TEXTURE_2D, 0x400, 0x400, 0, GL_RGBA8 , GL_ZERO },
{ GL_TEXTURE_2D, 0x400, 0x400, 0, GL_RGBA8 , GL_ZERO },
{ GL_TEXTURE_2D, 0x400, 0x400, 0, GL_RGBA8 , GL_ZERO },
@@ -519,14 +508,7 @@ namespace rndr {
//}
glClearColor(sss->param.x, sss->param.y, sss->param.z, 0.0f);
#if REFLECT_STENCIL
glClearStencil(0x00);
gl_state_set_stencil_mask(0xFF);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
gl_state_set_stencil_mask(0x00);
#else
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#endif
draw_pass_set_camera();
for (int32_t i = LIGHT_SET_MAIN; i < LIGHT_SET_MAX; i++)
@@ -713,26 +695,10 @@ namespace rndr {
rctx->fog[i].data_set((fog_id)i);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
#if REFLECT_STENCIL
glClearStencil(0x00);
#endif
if (sv_better_reflect && rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_SSS))
glClear(GL_COLOR_BUFFER_BIT);
#if REFLECT_STENCIL
else {
gl_state_set_stencil_mask(0xFF);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
gl_state_set_stencil_mask(0x00);
}
#else
else
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#endif
#if REFLECT_STENCIL
if (sv_better_reflect)
draw_pass_reflect_make_stencil(rctx, refl_tex, refl_buf_tex);
#endif
rctx->draw_state->shader_index = SHADER_FT_S_REFL;
@@ -822,11 +788,6 @@ namespace rndr {
uniform_value[U_REFLECT] = 0;
rctx->draw_state->shader_index = -1;
#if REFLECT_STENCIL
if (sv_better_reflect)
gl_state_disable_stencil_test();
#endif
for (int32_t i = reflect_blur_num, j = 0; i > 0; i--, j++) {
blur_filter_apply(rctx, &refl_buf_tex, &refl_tex,
reflect_blur_filter, 1.0f, 1.0f, 0.0f);
@@ -2040,25 +2001,10 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) {
rctx->fog[i].data_set((fog_id)i);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
#if REFLECT_STENCIL
glClearStencil(0x00);
#endif
if (rctx->disp_manager->get_obj_count(mdl::OBJ_TYPE_SSS))
glClear(GL_COLOR_BUFFER_BIT);
#if REFLECT_STENCIL
else {
gl_state_set_stencil_mask(0xFF);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
gl_state_set_stencil_mask(0x00);
}
#else
else
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#endif
#if REFLECT_STENCIL
draw_pass_reflect_make_stencil(rctx, refl_tex, refl_buf_tex);
#endif
gl_state_enable_depth_test();
gl_state_set_depth_func(GL_LEQUAL);
@@ -2171,10 +2117,6 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) {
gl_state_set_cull_face_mode(GL_BACK);
gl_state_disable_depth_test();
#if REFLECT_STENCIL
gl_state_disable_stencil_test();
#endif
for (int32_t i = render_manager->reflect_blur_num, j = 0; i > 0; i--, j++) {
blur_filter_apply(rctx, &refl_buf_tex, &refl_tex,
render_manager->reflect_blur_filter, 1.0f, 1.0f, 0.0f);
@@ -2193,116 +2135,6 @@ static void draw_pass_reflect_full(rndr::RenderManager* render_manager) {
gl_state_end_event();
}
#if REFLECT_STENCIL
static void draw_pass_reflect_stencil(render_context* rctx, mdl::ObjType type) {
if (type < 0 || type >= mdl::OBJ_TYPE_MAX || rctx->disp_manager->get_obj_count(type) < 1)
return;
int32_t alpha_test = 0;
float_t min_alpha = 1.0f;
float_t alpha_threshold = 0.0f;
for (int32_t i = 0; i < 5; i++)
gl_state_active_bind_texture_2d(i, rctx->empty_texture_2d->glid);
gl_state_active_bind_texture_cube_map(5, rctx->empty_texture_cube_map->glid);
gl_state_active_texture(0);
gl_state_set_blend_func(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
uniform_value_reset();
gl_state_get();
switch (type) {
case mdl::OBJ_TYPE_TRANSLUCENT:
case mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS:
alpha_test = 1;
min_alpha = 0.0f;
alpha_threshold = 0.0f;
break;
case mdl::OBJ_TYPE_TRANSPARENT:
alpha_test = 1;
min_alpha = 0.1f;
alpha_threshold = 0.5f;
break;
default:
break;
}
rctx->set_batch_alpha_threshold(alpha_threshold);
rctx->set_batch_min_alpha(min_alpha);
uniform_value[U_ALPHA_TEST] = alpha_test;
for (mdl::ObjData*& i : rctx->disp_manager->obj[type]) {
switch (i->kind) {
case mdl::OBJ_KIND_NORMAL: {
switch (i->args.sub_mesh.material->material.shader.index) {
case SHADER_FT_WATER01:
case SHADER_FT_FLOOR:
case SHADER_FT_PUDDLE:
draw_sub_mesh(rctx, &i->args.sub_mesh, &i->mat, mdl::draw_sub_mesh_default);
break;
}
} break;
case mdl::OBJ_KIND_TRANSLUCENT: {
for (int32_t j = 0; j < i->args.translucent.count; j++)
switch (i->args.translucent.sub_mesh[j]->material->material.shader.index) {
case SHADER_FT_WATER01:
case SHADER_FT_FLOOR:
case SHADER_FT_PUDDLE:
draw_sub_mesh(rctx, i->args.translucent.sub_mesh[j], &i->mat, mdl::draw_sub_mesh_default);
break;
}
} break;
}
}
uniform_value_reset();
gl_state_bind_vertex_array(0);
shader::unbind();
gl_state_set_blend_func(GL_ONE, GL_ZERO);
for (int32_t i = 0; i < 5; i++)
gl_state_bind_sampler(i, 0);
}
static void draw_pass_reflect_make_stencil(render_context* rctx,
RenderTexture& refl_tex, RenderTexture& refl_buf_tex) {
gl_state_set_stencil_mask(0xFF);
rctx->draw_state->shader_index = SHADER_FT_SIL;
gl_state_disable_depth_test();
gl_state_set_depth_mask(GL_TRUE);
draw_pass_reflect_stencil(rctx, mdl::OBJ_TYPE_OPAQUE);
draw_pass_reflect_stencil(rctx, mdl::OBJ_TYPE_TRANSLUCENT);
draw_pass_reflect_stencil(rctx, mdl::OBJ_TYPE_TRANSLUCENT_SORT_BY_RADIUS);
draw_pass_reflect_stencil(rctx, mdl::OBJ_TYPE_TRANSPARENT);
fbo_blit(refl_tex.fbos[0], refl_buf_tex.fbos[0],
0, 0, refl_tex.GetWidth(), refl_tex.GetHeight(),
0, 0, refl_buf_tex.GetWidth(), refl_buf_tex.GetHeight(),
GL_COLOR_BUFFER_BIT, GL_LINEAR);
refl_tex.Bind();
glClear(GL_COLOR_BUFFER_BIT);
gl_state_enable_stencil_test();
gl_state_set_stencil_op(GL_KEEP, GL_KEEP, GL_REPLACE);
gl_state_set_stencil_func(GL_ALWAYS, 0x01, 0x01);
gl_state_bind_texture_2d(refl_buf_tex.GetColorTex());
gl_state_bind_sampler(0, rctx->render_samplers[0]);
gl_state_set_color_mask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
shaders_ft.set(SHADER_FT_REFLECT_STENCIL);
rctx->render.draw_quad(refl_buf_tex.GetWidth(), refl_buf_tex.GetHeight(), 1.0f, 1.0f,
0.0f, 0.0f, 6.0f, 1.0f, 1.0f, 1.0f, 1.0f);
gl_state_set_color_mask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
gl_state_set_stencil_op(GL_KEEP, GL_KEEP, GL_KEEP);
gl_state_set_stencil_func(GL_EQUAL, 0x01, 0x01);
gl_state_set_stencil_mask(0x00);
}
#endif
static void blur_filter_apply(render_context* rctx, RenderTexture* dst, RenderTexture* src,
blur_filter_mode filter, const vec2 res_scale, const vec4 scale, const vec4 offset) {
if (!dst || !src)
+6 -6
View File
@@ -200,7 +200,7 @@ void ExNullBlock::CtrlOsagePlayData() {
CtrlMain();
}
void ExNullBlock::Disp(const mat4* mat, render_context* rctx) {
void ExNullBlock::Disp(const mat4& mat, render_context* rctx) {
}
@@ -1527,7 +1527,7 @@ void RobCloth::CtrlStep(const float_t step) {
CollideNodes(step, true);
}
void RobCloth::Disp(const mat4* mat, render_context* rctx) {
void RobCloth::Disp(const mat4& mat, render_context* rctx) {
obj* obj = objset_info_storage_get_obj(itm_eq_obj->obj_info);
if (!obj)
return;
@@ -2133,7 +2133,7 @@ void ExClothBlock::CtrlOsagePlayData() {
rob.CtrlOsagePlayData(item_equip_object->item_equip->opd_blend_data);
}
void ExClothBlock::Disp(const mat4* mat, render_context* rctx) {
void ExClothBlock::Disp(const mat4& mat, render_context* rctx) {
rob.UpdateDisp();
rob.Disp(mat, rctx);
}
@@ -3155,7 +3155,7 @@ void ExOsageBlock::CtrlOsagePlayData() {
parent_bone_node->exp_data.parent_scale, item_equip_object->item_equip->opd_blend_data);
}
void ExOsageBlock::Disp(const mat4* mat, render_context* rctx) {
void ExOsageBlock::Disp(const mat4& mat, render_context* rctx) {
}
@@ -3334,7 +3334,7 @@ void ExConstraintBlock::CtrlOsagePlayData() {
CtrlMain();
}
void ExConstraintBlock::Disp(const mat4* mat, render_context* rctx) {
void ExConstraintBlock::Disp(const mat4& mat, render_context* rctx) {
}
@@ -3584,7 +3584,7 @@ void ExExpressionBlock::CtrlOsagePlayData() {
CtrlMain();
}
void ExExpressionBlock::Disp(const mat4* mat, render_context* rctx) {
void ExExpressionBlock::Disp(const mat4& mat, render_context* rctx) {
}
+5 -5
View File
@@ -13348,7 +13348,7 @@ void rob_chara_item_equip_object::clear_ex_data() {
node_blocks.clear();
}
void rob_chara_item_equip_object::disp(const mat4* mat, render_context* rctx) {
void rob_chara_item_equip_object::disp(const mat4& mat, render_context* rctx) {
if (obj_info.is_null())
return;
@@ -13990,7 +13990,7 @@ static void sub_140512C20(rob_chara_item_equip* rob_itm_equip, render_context* r
int32_t tex_pat_count = (int32_t)rob_itm_equip->texture_pattern.size();
if (tex_pat_count)
rctx->disp_manager->set_texture_pattern(tex_pat_count, rob_itm_equip->texture_pattern.data());
rctx->disp_manager->entry_obj_by_object_info(&mat, rob_itm_equip->field_D0);
rctx->disp_manager->entry_obj_by_object_info(mat, rob_itm_equip->field_D0);
if (tex_pat_count)
rctx->disp_manager->set_texture_pattern();
}
@@ -14040,7 +14040,7 @@ void rob_chara_item_equip::disp(int32_t chara_id, render_context* rctx) {
if (item_equip_range)
for (int32_t i = first_item_equip_object; i < max_item_equip_object; i++)
item_equip_object[i].disp(&mat, rctx);
item_equip_object[i].disp(mat, rctx);
else {
for (int32_t i = ITEM_ATAMA; i < ITEM_MAX; i++) {
mdl::ObjFlags chara_flags = (mdl::ObjFlags)0;
@@ -14059,7 +14059,7 @@ void rob_chara_item_equip::disp(int32_t chara_id, render_context* rctx) {
enum_and(flags, ~mdl::OBJ_SHADOW);
disp_manager.set_obj_flags((mdl::ObjFlags)(chara_flags | flags | mdl::OBJ_SSS));
item_equip_object[i].disp(&mat, rctx);
item_equip_object[i].disp(mat, rctx);
}
}
disp_manager.set_texture_color_coefficients(temp_texture_color_coeff);
@@ -18075,7 +18075,7 @@ void rob_chara_age_age_object::disp(render_context* rctx, size_t chara_index,
rctx->disp_manager->set_obj_flags(flags);
rctx->disp_manager->set_chara_color(chara_color);
rctx->disp_manager->set_shadow_type(chara_index ? SHADOW_STAGE : SHADOW_CHARA);
rctx->disp_manager->entry_obj_by_obj(&mat4_identity, &obj,
rctx->disp_manager->entry_obj_by_obj(mat4_identity, &obj,
&get_obj_set_texture(), &obj_vert_buf, &obj_index_buf, 0, 1.0f);
}
+8 -8
View File
@@ -1479,7 +1479,7 @@ public:
virtual void CtrlStep(int32_t stage, bool disable_external_force) = 0;
virtual void CtrlMain() = 0;
virtual void CtrlOsagePlayData() = 0;
virtual void Disp(const mat4* mat, render_context* rctx) = 0;
virtual void Disp(const mat4& mat, render_context* rctx) = 0;
virtual void Reset();
virtual void Field_40() = 0;
virtual void CtrlInitBegin() = 0;
@@ -1502,7 +1502,7 @@ public:
virtual void CtrlStep(int32_t stage, bool disable_external_force) override;
virtual void CtrlMain() override;
virtual void CtrlOsagePlayData() override;
virtual void Disp(const mat4* mat, render_context* rctx) override;
virtual void Disp(const mat4& mat, render_context* rctx) override;
virtual void Field_40() override;
virtual void CtrlInitBegin() override;
virtual void CtrlInitMain() override;
@@ -1963,7 +1963,7 @@ struct RobCloth : public CLOTH {
void CtrlMain(const float_t step, bool ignore_friction);
void CtrlOsagePlayData(std::vector<opd_blend_data>& opd_blend_data);
void CtrlStep(const float_t step);
void Disp(const mat4* mat, render_context* rctx);
void Disp(const mat4& mat, render_context* rctx);
void GetRootData();
void InitData(size_t root_count, size_t nodes_count, obj_skin_block_cloth_root* root,
obj_skin_block_cloth_node* nodes, mat4* mats, int32_t loop,
@@ -2003,7 +2003,7 @@ public:
virtual void CtrlStep(int32_t stage, bool disable_external_force) override;
virtual void CtrlMain() override;
virtual void CtrlOsagePlayData() override;
virtual void Disp(const mat4* mat, render_context* rctx) override;
virtual void Disp(const mat4& mat, render_context* rctx) override;
virtual void Reset() override;
virtual void Field_40() override;
virtual void CtrlInitBegin() override;
@@ -2133,7 +2133,7 @@ public:
virtual void CtrlStep(int32_t stage, bool disable_external_force) override;
virtual void CtrlMain() override;
virtual void CtrlOsagePlayData() override;
virtual void Disp(const mat4* mat, render_context* rctx) override;
virtual void Disp(const mat4& mat, render_context* rctx) override;
virtual void Reset() override;
virtual void Field_40() override;
virtual void CtrlInitBegin() override;
@@ -2173,7 +2173,7 @@ public:
virtual void CtrlStep(int32_t stage, bool disable_external_force) override;
virtual void CtrlMain() override;
virtual void CtrlOsagePlayData() override;
virtual void Disp(const mat4* mat, render_context* rctx) override;
virtual void Disp(const mat4& mat, render_context* rctx) override;
virtual void Field_40() override;
virtual void CtrlInitBegin() override;
virtual void CtrlInitMain() override;
@@ -2248,7 +2248,7 @@ public:
virtual void CtrlStep(int32_t stage, bool disable_external_force) override;
virtual void CtrlMain() override;
virtual void CtrlOsagePlayData() override;
virtual void Disp(const mat4* mat, render_context* rctx) override;
virtual void Disp(const mat4& mat, render_context* rctx) override;
virtual void Field_40() override;
virtual void CtrlInitBegin() override;
virtual void CtrlInitMain() override;
@@ -2301,7 +2301,7 @@ struct rob_chara_item_equip_object {
void add_motion_reset_data(uint32_t motion_id, float_t frame, int32_t iterations);
void check_no_opd(std::vector<opd_blend_data>& opd_blend_data);
void clear_ex_data();
void disp(const mat4* mat, render_context* rctx);
void disp(const mat4& mat, render_context* rctx);
int32_t get_bone_index(const char* name, const bone_database* bone_data);
bone_node* get_bone_node(int32_t bone_index);
bone_node* get_bone_node(const char* name, const bone_database* bone_data);
-29
View File
@@ -92,7 +92,6 @@ enum shader_ft_sub_enum {
SHADER_FT_SUB_DOF_MAIN_FILTER,
SHADER_FT_SUB_DOF_UPSAMPLE,
SHADER_FT_SUB_TRANSPARENCY,
SHADER_FT_SUB_REFLECT_STENCIL,
SHADER_FT_SUB_SHADER_END,
};
@@ -704,14 +703,6 @@ static const int32_t transparency_fpt_unival_max[] = {
-1,
};
static const int32_t reflect_stencil_vpt_unival_max[] = {
-1,
};
static const int32_t reflect_stencil_fpt_unival_max[] = {
-1,
};
#pragma region Shader Description
#define SHADER_DESCRIPTION_EFFECT_TEXTURE_SAMPLER \
{ SHADER_DESCRIPTION_SAMPLER, 14, 0, U_INVALID, }
@@ -2015,17 +2006,6 @@ static const shader_description transparency_fpt_desc[] = {
{ SHADER_DESCRIPTION_FRAGMENT_OUTPUT, 0, 4, U_INVALID, },
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
};
static const shader_description reflect_stencil_vpt_desc[] = {
SHADER_DESCRIPTION_COMMON_QUAD,
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
};
static const shader_description reflect_stencil_fpt_desc[] = {
{ SHADER_DESCRIPTION_SAMPLER, 0, 0, U_INVALID, },
{ SHADER_DESCRIPTION_FRAGMENT_OUTPUT, 0, 4, U_INVALID, },
{ SHADER_DESCRIPTION_END, -1, -1, U_INVALID, },
};
#undef SHADER_DESCRIPTION_COMMON_QUAD
#undef SHADER_DESCRIPTION_COMMON_SKINNING
#undef SHADER_DESCRIPTION_COMMON_SCENE
@@ -2274,10 +2254,6 @@ static const shader_sub_table TRANSPARENCY_table[] = {
shader_sub_table_struct(TRANSPARENCY, transparency, transparency),
};
static const shader_sub_table REFLECT_STENCIL_table[] = {
shader_sub_table_struct(REFLECT_STENCIL, reflect_stencil, reflect_stencil),
};
#undef shader_sub_table_struct
static const uniform_name BLINN_uniform[] = {
@@ -2498,10 +2474,6 @@ static const uniform_name TRANSPARENCY_uniform[] = {
U_INVALID,
};
static const uniform_name REFLECT_STENCIL_uniform[] = {
U_INVALID,
};
struct glass_eye_struct {
const vec4 tex_model_param;
const vec4 eb_tex_model_param;
@@ -2592,7 +2564,6 @@ const shader_table shader_ft_table[] = {
shader_table_struct(SPRITE),
shader_table_struct(DOF),
shader_table_struct(TRANSPARENCY),
shader_table_struct(REFLECT_STENCIL),
};
#undef shader_table_struct
-1
View File
@@ -58,7 +58,6 @@ enum shader_ft_enum {
SHADER_FT_SPRITE,
SHADER_FT_DOF,
SHADER_FT_TRANSPARENCY,
SHADER_FT_REFLECT_STENCIL,
SHADER_FT_END,
SHADER_FT_MAX,
};
+10 -10
View File
@@ -40,7 +40,7 @@ static bool object_bounding_sphere_check_visibility_shadow_stage(
static bool stage_ctrl(stage* s);
static void stage_disp(stage* s);
static void stage_disp_shadow(stage* s);
static void stage_disp_shadow_object(object_info object, mat4* mat);
static void stage_disp_shadow_object(object_info object, const mat4& mat);
static void stage_free(stage* s);
static void stage_load(stage* s);
static void stage_reset(stage* s);
@@ -489,27 +489,27 @@ static void stage_disp(stage* s) {
mat4_rotate_y(s->rot_y, &mat);
if (s->stage_data->object_ground.not_null() && s->ground)
disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_ground);
disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_ground);
if (s->stage_data->object_ring.not_null() && s->ring)
disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_ring);
disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_ring);
if (s->stage_data->object_reflect.not_null()) {
disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_REFLECT));
disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_reflect);
disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_reflect);
disp_manager.set_obj_flags();
}
if (s->stage_data->object_refract.not_null()) {
disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_REFRACT));
disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_refract);
disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_refract);
disp_manager.set_obj_flags();
}
if (s->stage_data->object_sky.not_null() && s->sky) {
mat4 t = s->mat;
mat4_mul(&t, &mat, &t);
disp_manager.entry_obj_by_object_info(&t, s->stage_data->object_sky);
disp_manager.entry_obj_by_object_info(t, s->stage_data->object_sky);
}
if (s->stage_data->lens_flare_texture != -1 && s->lens_flare) {
@@ -535,15 +535,15 @@ static void stage_disp_shadow(stage* s) {
mat4 mat;
mat4_rotate_y(s->rot_y, &mat);
if (s->stage_data->object_shadow.not_null())
stage_disp_shadow_object(s->stage_data->object_shadow, &mat);
stage_disp_shadow_object(s->stage_data->object_shadow, mat);
}
static void stage_disp_shadow_object(object_info object, mat4* mat) {
static void stage_disp_shadow_object(object_info object, const mat4& mat) {
mdl::DispManager& disp_manager = *rctx_ptr->disp_manager;
for (int32_t i = SHADOW_CHARA; i < SHADOW_MAX; i++) {
disp_manager.set_shadow_type((shadow_type_enum)i);
disp_manager.set_culling_finc(i == SHADOW_CHARA
disp_manager.set_culling_func(i == SHADOW_CHARA
? object_bounding_sphere_check_visibility_shadow_chara
: object_bounding_sphere_check_visibility_shadow_stage);
disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_SHADOW_OBJECT));
@@ -551,7 +551,7 @@ static void stage_disp_shadow_object(object_info object, mat4* mat) {
}
disp_manager.set_obj_flags();
disp_manager.set_culling_finc();
disp_manager.set_culling_func();
disp_manager.set_shadow_type();
}
+9 -9
View File
@@ -42,7 +42,7 @@ static bool object_bounding_sphere_check_visibility_shadow_stage(
static bool stage_modern_ctrl(stage_modern* s, void* data, object_database* obj_db, texture_database* tex_db);
static void stage_modern_disp(stage_modern* s);
static void stage_modern_disp_shadow(stage_modern* s);
static void stage_modern_disp_shadow_object(object_info object, mat4* mat);
static void stage_modern_disp_shadow_object(object_info object, const mat4& mat);
static void stage_modern_free(stage_modern* s);
static void stage_modern_load(stage_modern* s, void* data, object_database* obj_db, texture_database* tex_db);
static void stage_modern_reset(stage_modern* s);
@@ -504,24 +504,24 @@ static void stage_modern_disp(stage_modern* s) {
mat4_rotate_y(s->rot_y, &mat);
if (s->stage_data->object_ground.not_null_modern() && s->ground)
disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_ground);
disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_ground);
if (s->stage_data->object_reflect.not_null_modern()) {
disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_REFRACT));
disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_reflect);
disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_reflect);
disp_manager.set_obj_flags();
}
if (s->stage_data->object_refract.not_null_modern()) {
disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_REFRACT));
disp_manager.entry_obj_by_object_info(&mat, s->stage_data->object_refract);
disp_manager.entry_obj_by_object_info(mat, s->stage_data->object_refract);
disp_manager.set_obj_flags();
}
if (s->stage_data->object_sky.not_null_modern() && s->sky) {
mat4 t = s->mat;
mat4_mul(&t, &mat, &t);
disp_manager.entry_obj_by_object_info(&t, s->stage_data->object_sky);
disp_manager.entry_obj_by_object_info(t, s->stage_data->object_sky);
}
}
@@ -532,15 +532,15 @@ static void stage_modern_disp_shadow(stage_modern* s) {
mat4 mat;
mat4_rotate_y(s->rot_y, &mat);
if (s->stage_data->object_shadow.not_null_modern())
stage_modern_disp_shadow_object(s->stage_data->object_shadow, &mat);
stage_modern_disp_shadow_object(s->stage_data->object_shadow, mat);
}
static void stage_modern_disp_shadow_object(object_info object, mat4* mat) {
static void stage_modern_disp_shadow_object(object_info object, const mat4& mat) {
mdl::DispManager& disp_manager = *rctx_ptr->disp_manager;
for (int32_t i = SHADOW_CHARA; i < SHADOW_MAX; i++) {
disp_manager.set_shadow_type((shadow_type_enum)i);
disp_manager.set_culling_finc(i == SHADOW_CHARA
disp_manager.set_culling_func(i == SHADOW_CHARA
? object_bounding_sphere_check_visibility_shadow_chara
: object_bounding_sphere_check_visibility_shadow_stage);
disp_manager.set_obj_flags((mdl::ObjFlags)(mdl::OBJ_NO_TRANSLUCENCY | mdl::OBJ_SHADOW_OBJECT));
@@ -548,7 +548,7 @@ static void stage_modern_disp_shadow_object(object_info object, mat4* mat) {
}
disp_manager.set_obj_flags();
disp_manager.set_culling_finc();
disp_manager.set_culling_func();
disp_manager.set_shadow_type();
}
+9 -9
View File
@@ -1094,7 +1094,7 @@ void GlitterEditor::disp() {
etc.data.grid.h = 50;
etc.data.grid.ws = 50;
etc.data.grid.hs = 50;
rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc);
}
}
@@ -1947,7 +1947,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_f2(
etc.constant = true;
etc.data.cube.size = vec3::max(emit_inst->data.box.size * scale, 0.1f);
etc.data.cube.wire = false;
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local);
} break;
case Glitter::EMITTER_CYLINDER: {
mdl::EtcObj etc(mdl::ETC_OBJ_CYLINDER);
@@ -1958,7 +1958,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_f2(
etc.data.cylinder.slices = 16;
etc.data.cylinder.stacks = 1;
etc.data.cylinder.wire = false;
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local);
} break;
case Glitter::EMITTER_SPHERE: {
mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE);
@@ -1968,7 +1968,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_f2(
etc.data.sphere.slices = 16;
etc.data.sphere.stacks = 16;
etc.data.sphere.wire = false;
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local);
} break;
case Glitter::EMITTER_POLYGON: {
mdl::EtcObj etc(mdl::ETC_OBJ_LINE);
@@ -1976,7 +1976,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_f2(
etc.constant = true;
etc.data.line.pos[0] = vec3(-emit_inst->data.polygon.size * scale.x * 0.5f, 0.0f, 0.0f);
etc.data.line.pos[1] = vec3(emit_inst->data.polygon.size * scale.x * 0.5f, 0.0f, 0.0f);
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local);
} break;
}
}
@@ -2013,7 +2013,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_x(
etc.constant = true;
etc.data.cube.size = vec3::max(emit_inst->data.box.size * scale, 0.1f);
etc.data.cube.wire = false;
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local);
} break;
case Glitter::EMITTER_CYLINDER: {
mdl::EtcObj etc(mdl::ETC_OBJ_CYLINDER);
@@ -2024,7 +2024,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_x(
etc.data.cylinder.slices = 16;
etc.data.cylinder.stacks = 1;
etc.data.cylinder.wire = false;
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local);
} break;
case Glitter::EMITTER_SPHERE: {
mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE);
@@ -2034,7 +2034,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_x(
etc.data.sphere.slices = 16;
etc.data.sphere.stacks = 16;
etc.data.sphere.wire = false;
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local);
} break;
case Glitter::EMITTER_POLYGON: {
mdl::EtcObj etc(mdl::ETC_OBJ_CYLINDER);
@@ -2045,7 +2045,7 @@ static void glitter_editor_draw_emitter_type_emitter_inst_x(
etc.data.cylinder.slices = 16;
etc.data.cylinder.stacks = 0;
etc.data.cylinder.wire = false;
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc, local);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc, local);
} break;
}
}
+1 -1
View File
@@ -500,7 +500,7 @@ void Auth3dTestTask::disp() {
etc.color = 0xFFFFFFFF;
etc.data.plane.w = 20;
etc.data.plane.h = 20;
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc);
}
}
+1 -1
View File
@@ -170,7 +170,7 @@ void TaskDataTestGlitterParticle::disp() {
etc.data.grid.h = 50;
etc.data.grid.ws = 50;
etc.data.grid.hs = 50;
rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc);
}
int32_t life_time = 0;
+2 -2
View File
@@ -206,7 +206,7 @@ void TaskDataTestObj::disp() {
etc.data.grid.h = 40;
etc.data.grid.ws = 40;
etc.data.grid.hs = 40;
rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc);
}
TaskDataTestObj::Data* TaskDataTestObj::get_data() {
@@ -314,7 +314,7 @@ void DataTestObjectManager::disp() {
shadow_ptr_get()->field_1D0[SHADOW_CHARA].push_back(pos);
rctx_ptr->disp_manager->set_shadow_type(SHADOW_CHARA);
rctx_ptr->disp_manager->entry_obj_by_object_info(&mat, { obj_id, obj_set_id });
rctx_ptr->disp_manager->entry_obj_by_object_info(mat, { obj_id, obj_set_id });
rctx_ptr->disp_manager->set_obj_flags((mdl::ObjFlags)0);
}
+9 -9
View File
@@ -978,7 +978,7 @@ void RobOsageTest::disp_coli() {
etc.data.capsule.wire = false;
etc.data.capsule.pos[0] = j[-1].pos;
etc.data.capsule.pos[1] = j[ 0].pos;
rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc);
}
}
else if (cls && cls->rob.nodes.size() >= cls->rob.root_count) {
@@ -1000,7 +1000,7 @@ void RobOsageTest::disp_coli() {
mat4 mat;
mat4_translate(&pos, &mat);
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc);
}
}
}
@@ -1044,7 +1044,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision
mat4 mat;
mat4_translate(&pos, &mat);
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc);
} break;
case SkinParam::CollisionTypeCapsule: {
mdl::EtcObj etc(mdl::ETC_OBJ_CAPSULE);
@@ -1058,7 +1058,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision
mat4_transform_point(&transform[i.node_idx[0]], &i.pos[0], &etc.data.capsule.pos[0]);
mat4_transform_point(&transform[i.node_idx[1]], &i.pos[1], &etc.data.capsule.pos[1]);
rctx_ptr->disp_manager->entry_obj_etc(&mat4_identity, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat4_identity, etc);
} break;
case SkinParam::CollisionTypePlane: {
mdl::EtcObj etc(mdl::ETC_OBJ_PLANE);
@@ -1075,7 +1075,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision
const vec3 up = { 0.0f, 1.0f, 0.0f };
vec3 axis;
float_t angle;
Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir);
Glitter::axis_angle_from_vectors(axis, angle, up, dir);
mat4 mat_rot = mat4_identity;
mat4_mul_rotation(&mat_rot, &axis, angle, &mat_rot);
@@ -1084,7 +1084,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision
mat4_translate(&pos, &mat);
mat4_mul(&mat_rot, &mat, &mat);
mat4_scale_rot(&mat, i.radius, &mat);
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc);
} break;
case SkinParam::CollisionTypeEllipse: {
mdl::EtcObj etc(mdl::ETC_OBJ_SPHERE);
@@ -1108,7 +1108,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision
const vec3 up = { 0.0f, 1.0f, 0.0f };
vec3 axis;
float_t angle;
Glitter::axis_angle_from_vectors(&axis, &angle, &up, &dir);
Glitter::axis_angle_from_vectors(axis, angle, up, dir);
mat4 m = mat4_identity;
mat4_mul_rotation(&m, &axis, angle, &m);
@@ -1118,7 +1118,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision
const float_t scale_y = sqrtf(i.radius * i.radius + length * length);
mat4_scale_rot(&mat, i.radius, scale_y, i.radius, &mat);
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc);
} break;
case SkinParam::CollisionTypeAABB: {
mdl::EtcObj etc(mdl::ETC_OBJ_CUBE);
@@ -1133,7 +1133,7 @@ void RobOsageTest::disp_coli_cls_list(ExNodeBlock* ex_node, SkinParam::Collision
mat4 mat;
mat4_translate(&pos, &mat);
rctx_ptr->disp_manager->entry_obj_etc(&mat, &etc);
rctx_ptr->disp_manager->entry_obj_etc(mat, etc);
} break;
}
}
+32 -16
View File
@@ -9091,18 +9091,25 @@ XPVGameBaker::AFTData::~AFTData() {
}
void XPVGameBaker::AFTData::Read() {
aet_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\2d\\mdata_aet_db", false);
auth_3d_db_base.read("diva\\AFT\\rom\\auth_3d\\auth_3d_db");
auth_3d_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\auth_3d\\mdata_auth_3d_db");
obj_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\objset\\mdata_obj_db", false);
spr_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\2d\\mdata_spr_db", false);
stage_data.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\mdata_stage_data", false);
data_struct* aft_data = &data_list[DATA_AFT];
aet_db.modern = false;
aft_data->load_file(&aet_db, "rom/2d/", "mdata_aet_db.bin", aet_database_file::load_file);
aft_data->load_file(&auth_3d_db_base, "rom/auth_3d/", "auth_3d_db.bin", auth_3d_database_file::load_file);
aft_data->load_file(&auth_3d_db, "rom/auth_3d/", "mdata_auth_3d_db.bin", auth_3d_database_file::load_file);
obj_db.modern = false;
aft_data->load_file(&obj_db, "rom/objset/", "mdata_obj_db.bin", object_database_file::load_file);
spr_db.modern = false;
aft_data->load_file(&spr_db, "rom/2d/", "mdata_spr_db.bin", sprite_database_file::load_file);
aft_data->load_file(&stage_data, "rom/", "mdata_stage_data.bin", stage_database_file::load_file);
{
texture_database_file tex_db_base;
tex_db_base.read("diva\\AFT\\rom\\objset\\tex_db", false);
tex_db_base.modern = false;
aft_data->load_file(&tex_db_base, "rom/objset/", "tex_db.bin", texture_database_file::load_file);
this->tex_db_base.add(&tex_db_base);
}
tex_db.read("diva\\AFT_mod\\mdata\\MPFV\\rom\\objset\\mdata_tex_db", false);
tex_db.modern = false;
aft_data->load_file(&tex_db, "rom/objset/", "mdata_tex_db.bin", texture_database_file::load_file);
}
void XPVGameBaker::AFTData::Write(const char* out_dir,
@@ -9144,7 +9151,8 @@ void XPVGameBaker::AFTData::Write(const char* out_dir,
}
XPVGameBaker::MMPData::MMPData() {
mmp_base_path.assign("R:\\SteamLibrary\\steamapps\\common\\"
"Hatsune Miku Project DIVA Mega Mix Plus\\");
}
XPVGameBaker::MMPData::~MMPData() {
@@ -9152,8 +9160,8 @@ XPVGameBaker::MMPData::~MMPData() {
}
void XPVGameBaker::MMPData::Read() {
const std::string mmp_base_path("R:\\SteamLibrary\\steamapps\\common\\"
"Hatsune Miku Project DIVA Mega Mix Plus\\");
if (mmp_base_path.back() != '\\')
mmp_base_path.push_back('\\');
const std::pair<const char*, const char*> mmp_paths[] = {
{ "diva_main\\rom_steam\\", "" },
@@ -10032,8 +10040,6 @@ bool XPVGameBaker::init() {
x_pack_mmp_bake_log_file_ptr = new file_stream;
x_pack_mmp_bake_log_file_ptr->open("x_pack_mmp_bake_log.txt", "wb");
aft.Read();
mmp.Read();
return true;
}
@@ -10086,9 +10092,9 @@ void XPVGameBaker::window() {
extern int32_t height;
extern int32_t width;
float_t w = 240.0f;
float_t w = 360.0f;
float_t h = (float_t)height;
h = min_def(h, 196.0f);
h = min_def(h, 228.0f);
ImGui::SetNextWindowPos({ (float_t)width - w, 0.0f }, ImGuiCond_Always);
ImGui::SetNextWindowSize({ w, h }, ImGuiCond_Always);
@@ -10120,12 +10126,22 @@ void XPVGameBaker::window() {
ImGui::CheckboxFlags("CRC", &obj_set_encode_flags, OBJ_SET_REFLECT_ENCODE_CRC);
ImGui::EndGroup();
ImGui::Separator();
ImGui::SetColumnSpace(1.0f / 5.0f);
char buf[0x400];
strncpy_s(buf, sizeof(buf), mmp.mmp_base_path.c_str(), mmp.mmp_base_path.size());
if (ImGui::ColumnInputText("MMp Path:", buf, sizeof(buf), 0, 0, 0))
mmp.mmp_base_path.assign(buf);
ImGui::SetDefaultColumnSpace();
ImGui::Separator();
if (ImGui::Button("Start")) {
wait = false;
index = 0;
start = true;
aft.Read();
mmp.Read();
}
ImGui::End();
@@ -12660,7 +12676,7 @@ static void x_pv_game_write_auth_3d_reflect(stream& s, auth_3d_database_file* au
auth_3d_struct& auth_3d_reflect = auth_3d.data()[&i - ptr->data()];
for (auth_3d_database_uid_file& j : auth_3d_db->uid) {
if (j.value.size() > 2 && hash_string_xxh3_64bits(j.value.substr(2)) != name_hash)
if (j.value.size() <= 2 || hash_string_xxh3_64bits(j.value.substr(2)) != name_hash)
continue;
auth_3d_reflect.uid = j.org_uid;
+1
View File
@@ -934,6 +934,7 @@ public:
texture_database tex_db_base;
texture_database_file tex_db;
prj::vector_pair<uint32_t, uint32_t> tex_ids;
std::string mmp_base_path;;
MMPData();
~MMPData();