mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-04 20:58:03 +03:00
Fix objects breakdown
This commit is contained in:
+47
-69
@@ -271,13 +271,11 @@ namespace mdl {
|
||||
disp_manager->add_vertex_array(&args.etc, this->mat);
|
||||
}
|
||||
|
||||
void ObjData::init_sub_mesh(DispManager* disp_manager, const mat4* mat,
|
||||
float_t radius, obj_sub_mesh* sub_mesh, obj_mesh* mesh, obj_material_data* material,
|
||||
std::vector<texture*>* textures, int32_t mat_count, mat4* mats, GLuint vertex_buffer,
|
||||
GLuint index_buffer, vec4* blend_color, vec4* emission, GLuint morph_vertex_buffer,
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
size_t vertex_buffer_offset, size_t morph_vertex_buffer_offset,
|
||||
#endif
|
||||
void ObjData::init_sub_mesh(DispManager* disp_manager, const mat4* mat, float_t radius,
|
||||
obj_sub_mesh* sub_mesh, obj_mesh* mesh, obj_material_data* material, std::vector<texture*>* textures,
|
||||
int32_t mat_count, mat4* mats, /*GLuint vertex_buffer, GLuint index_buffer,*/
|
||||
obj_mesh_vertex_buffer* vertex_buffer, obj_mesh_index_buffer* index_buffer, vec4* blend_color,
|
||||
vec4* emission, /*GLuint morph_vertex_buffer,*/ obj_mesh_vertex_buffer* morph_vertex_buffer,
|
||||
int32_t instances_count, mat4* instances_mat, void(*func)(const ObjSubMeshArgs*)) {
|
||||
kind = mdl::OBJ_KIND_NORMAL;
|
||||
this->mat = *mat;
|
||||
@@ -294,10 +292,6 @@ namespace mdl {
|
||||
args->vertex_buffer = vertex_buffer;
|
||||
args->index_buffer = index_buffer;
|
||||
args->morph_vertex_buffer = morph_vertex_buffer;
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
args->vertex_buffer_offset = vertex_buffer_offset;
|
||||
args->morph_vertex_buffer_offset = morph_vertex_buffer_offset;
|
||||
#endif
|
||||
|
||||
args->texture_pattern_count = disp_manager->texture_pattern_count;
|
||||
for (int32_t i = 0; i < disp_manager->texture_pattern_count && i < TEXTURE_PATTERN_COUNT; i++)
|
||||
@@ -495,13 +489,12 @@ namespace mdl {
|
||||
const obj_sub_mesh* sub_mesh = args->sub_mesh;
|
||||
const obj_material_data* material = args->material;
|
||||
|
||||
GLuint vertex_buffer = args->vertex_buffer;
|
||||
GLuint morph_vertex_buffer = args->morph_vertex_buffer;
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
size_t vertex_buffer_offset = args->vertex_buffer_offset;
|
||||
size_t morph_vertex_buffer_offset = args->morph_vertex_buffer_offset;
|
||||
#endif
|
||||
GLuint index_buffer = args->index_buffer;
|
||||
//GLuint vertex_buffer = args->vertex_buffer;
|
||||
obj_mesh_vertex_buffer* vertex_buffer = args->vertex_buffer;
|
||||
//GLuint morph_vertex_buffer = args->morph_vertex_buffer;
|
||||
obj_mesh_vertex_buffer* morph_vertex_buffer = args->morph_vertex_buffer;
|
||||
//GLuint index_buffer = args->index_buffer;
|
||||
obj_mesh_index_buffer* index_buffer = args->index_buffer;
|
||||
|
||||
int32_t texcoord_array[2] = { -1, -1 };
|
||||
int32_t color_tex_index = 0;
|
||||
@@ -532,10 +525,6 @@ namespace mdl {
|
||||
for (DispManager::vertex_array& i : vertex_array_cache)
|
||||
if (i.alive_time >= 0 && i.vertex_buffer == vertex_buffer
|
||||
&& i.morph_vertex_buffer == morph_vertex_buffer
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
&& i.vertex_buffer_offset == vertex_buffer_offset
|
||||
&& i.morph_vertex_buffer_offset == morph_vertex_buffer_offset
|
||||
#endif
|
||||
&& i.index_buffer == index_buffer && i.vertex_format == vertex_format
|
||||
&& i.size_vertex == size_vertex && i.compressed == compressed
|
||||
&& !memcmp(i.vertex_attrib_buffer_binding,
|
||||
@@ -586,10 +575,6 @@ namespace mdl {
|
||||
|
||||
vertex_array->vertex_buffer = vertex_buffer;
|
||||
vertex_array->morph_vertex_buffer = morph_vertex_buffer;
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
vertex_array->vertex_buffer_offset = vertex_buffer_offset;
|
||||
vertex_array->morph_vertex_buffer_offset = morph_vertex_buffer_offset;
|
||||
#endif
|
||||
vertex_array->index_buffer = index_buffer;
|
||||
vertex_array->alive_time = 60;
|
||||
vertex_array->vertex_format = vertex_format;
|
||||
@@ -600,12 +585,15 @@ namespace mdl {
|
||||
vertex_attrib_buffer_binding, sizeof(vertex_attrib_buffer_binding));
|
||||
|
||||
gl_state_bind_vertex_array(vertex_array->vertex_array);
|
||||
gl_state_bind_array_buffer(vertex_buffer);
|
||||
//gl_state_bind_array_buffer(vertex_buffer);
|
||||
gl_state_bind_array_buffer(vertex_buffer->get_buffer());
|
||||
if (index_buffer)
|
||||
gl_state_bind_element_array_buffer(index_buffer, true);
|
||||
//gl_state_bind_element_array_buffer(index_buffer, true);
|
||||
gl_state_bind_element_array_buffer(index_buffer->buffer, true);
|
||||
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
size_t offset = vertex_buffer_offset;
|
||||
//size_t offset = vertex_buffer_offset;
|
||||
size_t offset = vertex_buffer->get_offset();
|
||||
#else
|
||||
size_t offset = 0;
|
||||
#endif
|
||||
@@ -796,12 +784,14 @@ namespace mdl {
|
||||
}
|
||||
|
||||
if (morph_vertex_buffer) {
|
||||
gl_state_bind_array_buffer(morph_vertex_buffer);
|
||||
//gl_state_bind_array_buffer(morph_vertex_buffer);
|
||||
gl_state_bind_array_buffer(morph_vertex_buffer->get_buffer());
|
||||
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
offset = morph_vertex_buffer_offset;
|
||||
//size_t offset = morph_vertex_buffer_offset;
|
||||
size_t offset = morph_vertex_buffer->get_offset();
|
||||
#else
|
||||
offset = 0;
|
||||
size_t offset = 0;
|
||||
#endif
|
||||
if (vertex_format & OBJ_VERTEX_POSITION) {
|
||||
if (!vertex_array->vertex_attrib_array[MORPH_POSITION_INDEX]) {
|
||||
@@ -2309,27 +2299,21 @@ namespace mdl {
|
||||
if (!data)
|
||||
continue;
|
||||
|
||||
GLuint morph_vertex_buffer = 0;
|
||||
if (obj_morph_vertex_buf)
|
||||
morph_vertex_buffer = obj_morph_vertex_buf[i].get_buffer();
|
||||
//GLuint morph_vertex_buffer = 0;
|
||||
//if (obj_morph_vertex_buf)
|
||||
// morph_vertex_buffer = obj_morph_vertex_buf[i].get_buffer();
|
||||
obj_mesh_vertex_buffer* morph_vertex_buffer
|
||||
= obj_morph_vertex_buf ? &obj_morph_vertex_buf[i] : 0;
|
||||
|
||||
GLuint index_buffer = 0;
|
||||
if (obj_index_buf)
|
||||
index_buffer = obj_index_buf[i].buffer;
|
||||
//GLuint index_buffer = 0;
|
||||
//if (obj_index_buf)
|
||||
// index_buffer = obj_index_buf[i].buffer;
|
||||
obj_mesh_index_buffer* index_buffer = &obj_index_buf[i];
|
||||
|
||||
GLuint vertex_buffer = 0;
|
||||
if (obj_vertex_buf)
|
||||
vertex_buffer = obj_vertex_buf[i].get_buffer();
|
||||
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
size_t morph_vertex_buffer_offset = 0;
|
||||
if (obj_morph_vertex_buf)
|
||||
morph_vertex_buffer_offset = obj_morph_vertex_buf[i].get_offset();
|
||||
|
||||
size_t vertex_buffer_offset = 0;
|
||||
if (obj_vertex_buf)
|
||||
vertex_buffer_offset = obj_vertex_buf[i].get_offset();
|
||||
#endif
|
||||
//GLuint vertex_buffer = 0;
|
||||
//if (obj_vertex_buf)
|
||||
// vertex_buffer = obj_vertex_buf[i].get_buffer();
|
||||
obj_mesh_vertex_buffer* vertex_buffer = &obj_vertex_buf[i];
|
||||
|
||||
if (!vertex_buffer || !index_buffer || obj_morph_vertex_buf && !morph_vertex_buffer) {
|
||||
printf_debug("mdl::DispManager::entry_obj: no vertex or index mesh buffer to draw;\n");
|
||||
@@ -2410,12 +2394,7 @@ namespace mdl {
|
||||
|
||||
data->init_sub_mesh(this, mat, object->bounding_sphere.radius, sub_mesh,
|
||||
mesh, material, textures, num_bone_index, mats, vertex_buffer, index_buffer,
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
&_blend_color, &_emission, morph_vertex_buffer,
|
||||
vertex_buffer_offset, morph_vertex_buffer_offset, instances_count, instances_mat, func);
|
||||
#else
|
||||
&_blend_color, &_emission, morph_vertex_buffer, instances_count, instances_mat, func);
|
||||
#endif
|
||||
|
||||
if (obj_flags & mdl::OBJ_SHADOW_OBJECT) {
|
||||
entry_list((ObjType)(OBJ_TYPE_SHADOW_OBJECT_CHARA
|
||||
@@ -2724,13 +2703,12 @@ namespace mdl {
|
||||
const obj_sub_mesh* sub_mesh = args->sub_mesh;
|
||||
const obj_material_data* material = args->material;
|
||||
|
||||
GLuint vertex_buffer = args->vertex_buffer;
|
||||
GLuint morph_vertex_buffer = args->morph_vertex_buffer;
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
size_t vertex_buffer_offset = args->vertex_buffer_offset;
|
||||
size_t morph_vertex_buffer_offset = args->morph_vertex_buffer_offset;
|
||||
#endif
|
||||
GLuint index_buffer = args->index_buffer;
|
||||
//GLuint vertex_buffer = args->vertex_buffer;
|
||||
obj_mesh_vertex_buffer* vertex_buffer = args->vertex_buffer;
|
||||
//GLuint morph_vertex_buffer = args->morph_vertex_buffer;
|
||||
obj_mesh_vertex_buffer* morph_vertex_buffer = args->morph_vertex_buffer;
|
||||
//GLuint index_buffer = args->index_buffer;
|
||||
obj_mesh_index_buffer* index_buffer = args->index_buffer;
|
||||
|
||||
int32_t texcoord_array[2] = { -1, -1 };
|
||||
int32_t color_tex_index = 0;
|
||||
@@ -2760,10 +2738,6 @@ namespace mdl {
|
||||
for (DispManager::vertex_array& i : vertex_array_cache)
|
||||
if (i.alive_time > 0 && i.vertex_buffer == vertex_buffer
|
||||
&& i.morph_vertex_buffer == morph_vertex_buffer
|
||||
#if SHARED_OBJECT_BUFFER
|
||||
&& i.vertex_buffer_offset == vertex_buffer_offset
|
||||
&& i.morph_vertex_buffer_offset == morph_vertex_buffer_offset
|
||||
#endif
|
||||
&& i.index_buffer == index_buffer && i.vertex_format == vertex_format
|
||||
&& i.size_vertex == size_vertex && i.compressed == compressed
|
||||
&& !memcmp(i.vertex_attrib_buffer_binding,
|
||||
@@ -4123,8 +4097,12 @@ static void object_data_get_vertex_attrib_buffer_bindings(const mdl::ObjSubMeshA
|
||||
const obj_mesh* mesh = args->mesh;
|
||||
const obj_sub_mesh* sub_mesh = args->sub_mesh;
|
||||
|
||||
GLuint vertex_buffer = args->vertex_buffer;
|
||||
GLuint morph_vertex_buffer = args->morph_vertex_buffer;
|
||||
//GLuint vertex_buffer = args->vertex_buffer;
|
||||
GLuint vertex_buffer = args->vertex_buffer
|
||||
? args->vertex_buffer->get_buffer() : 0;
|
||||
//GLuint morph_vertex_buffer = args->morph_vertex_buffer;
|
||||
GLuint morph_vertex_buffer = args->morph_vertex_buffer
|
||||
? args->morph_vertex_buffer->get_buffer() : 0;
|
||||
|
||||
bool compressed = mesh->attrib.m.compressed;
|
||||
GLsizei size_vertex = (GLsizei)mesh->size_vertex;
|
||||
|
||||
Reference in New Issue
Block a user