Moved some stuff a bit. Added const specifier
This commit is contained in:
@@ -1440,8 +1440,7 @@ namespace mdl {
|
||||
draw_sub_mesh(&i->args.sub_mesh, &i->mat, func);
|
||||
} break;
|
||||
case OBJ_KIND_ETC: {
|
||||
draw_object_model_mat_load(i->mat);
|
||||
draw_etc_obj(&i->args.etc);
|
||||
draw_etc_obj(&i->args.etc, &i->mat);
|
||||
} break;
|
||||
case OBJ_KIND_USER: {
|
||||
i->args.user.func(i->args.user.data, &i->mat);
|
||||
|
||||
@@ -22,6 +22,7 @@ static void draw_object_material_set_parameter(
|
||||
const obj_material_data* mat_data);
|
||||
static void draw_object_material_set_reflect(const mdl::ObjSubMeshArgs* args);
|
||||
static void draw_object_material_set_uniform(const obj_material_data* mat_data, bool disable_color_l);
|
||||
static void draw_object_model_mat_load(const mat4& mat);
|
||||
static void draw_object_vertex_attrib_reset_default(const mdl::ObjSubMeshArgs* args);
|
||||
static void draw_object_vertex_attrib_reset_reflect(const mdl::ObjSubMeshArgs* args);
|
||||
static void draw_object_vertex_attrib_set_default(const mdl::ObjSubMeshArgs* args);
|
||||
@@ -66,7 +67,7 @@ namespace mdl {
|
||||
draw_state->stats.draw_triangle_count += count - 2;
|
||||
}
|
||||
|
||||
void draw_etc_obj(mdl::EtcObj* etc) {
|
||||
void draw_etc_obj(const mdl::EtcObj* etc, const mat4* mat) {
|
||||
switch (etc->type) {
|
||||
case mdl::ETC_OBJ_TEAPOT:
|
||||
case mdl::ETC_OBJ_GRID:
|
||||
@@ -88,6 +89,8 @@ namespace mdl {
|
||||
if (!vao)
|
||||
return;
|
||||
|
||||
draw_object_model_mat_load(*mat);
|
||||
|
||||
vec4 g_material_state_diffuse = rctx->obj_batch.g_material_state_diffuse;
|
||||
vec4 g_material_state_ambient = rctx->obj_batch.g_material_state_ambient;
|
||||
vec4 g_material_state_specular = rctx->obj_batch.g_material_state_specular;
|
||||
@@ -159,7 +162,7 @@ namespace mdl {
|
||||
rctx->obj_batch.g_blend_color = 1.0f;
|
||||
}
|
||||
|
||||
void draw_sub_mesh(const ObjSubMeshArgs* args, const mat4* model,
|
||||
void draw_sub_mesh(const ObjSubMeshArgs* args, const mat4* mat,
|
||||
void(*func)(const ObjSubMeshArgs* args)) {
|
||||
GLuint vao = disp_manager->get_vertex_array(args);
|
||||
if (!vao)
|
||||
@@ -189,22 +192,22 @@ namespace mdl {
|
||||
uniform->arr[U_BONE_MAT] = 0;
|
||||
}
|
||||
else {
|
||||
mat4 mat;
|
||||
mat4 _mat;
|
||||
if (args->mesh->attrib.m.billboard)
|
||||
model_mat_face_camera_view(&rctx->view_mat, model, &mat);
|
||||
model_mat_face_camera_view(&rctx->view_mat, mat, &_mat);
|
||||
else if (args->mesh->attrib.m.billboard_y_axis)
|
||||
model_mat_face_camera_position(&rctx->view_mat, model, &mat);
|
||||
model_mat_face_camera_position(&rctx->view_mat, mat, &_mat);
|
||||
else
|
||||
mat = *model;
|
||||
_mat = *mat;
|
||||
|
||||
uniform->arr[U_BONE_MAT] = 0;
|
||||
gl_state_bind_vertex_array(vao);
|
||||
if (func != draw_sub_mesh_default || !args->instances_count) {
|
||||
draw_object_model_mat_load(mat);
|
||||
draw_object_model_mat_load(_mat);
|
||||
func(args);
|
||||
}
|
||||
else
|
||||
draw_sub_mesh_default_instanced(args, &mat);
|
||||
draw_sub_mesh_default_instanced(args, &_mat);
|
||||
uniform->arr[U_BONE_MAT] = 0;
|
||||
}
|
||||
}
|
||||
@@ -490,11 +493,6 @@ namespace mdl {
|
||||
}
|
||||
}
|
||||
|
||||
inline void draw_object_model_mat_load(const mat4& mat) {
|
||||
rctx->obj_batch.set_transforms(mat, rctx->view_mat, rctx->proj_mat);
|
||||
rctx->obj_batch.set_g_joint(mat);
|
||||
}
|
||||
|
||||
inline void model_mat_face_camera_position(const mat4* view, const mat4* src, mat4* dst) {
|
||||
mat4 mat;
|
||||
mat4_invert_fast(view, &mat);
|
||||
@@ -1009,6 +1007,11 @@ static void draw_object_material_set_uniform(const obj_material_data* mat_data,
|
||||
uniform->arr[U45] = 1;
|
||||
}
|
||||
|
||||
static void draw_object_model_mat_load(const mat4& mat) {
|
||||
rctx->obj_batch.set_transforms(mat, rctx->view_mat, rctx->proj_mat);
|
||||
rctx->obj_batch.set_g_joint(mat);
|
||||
}
|
||||
|
||||
static void draw_object_vertex_attrib_reset_default(const mdl::ObjSubMeshArgs* args) {
|
||||
const obj_mesh* mesh = args->mesh;
|
||||
obj_vertex_format vertex_format = mesh->vertex_format;
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
namespace mdl {
|
||||
extern void draw(obj_primitive_type primitive_type, uint32_t count,
|
||||
uint16_t start, uint16_t end, obj_index_format index_format, size_t indices);
|
||||
extern void draw_etc_obj(mdl::EtcObj* etc);
|
||||
extern void draw_sub_mesh(const ObjSubMeshArgs* args, const mat4* model,
|
||||
extern void draw_etc_obj(const mdl::EtcObj* etc, const mat4* mat);
|
||||
extern void draw_sub_mesh(const ObjSubMeshArgs* args, const mat4* mat,
|
||||
void(*func)(const ObjSubMeshArgs* args));
|
||||
//extern void draw_sub_mesh_show_vector(const ObjSubMeshArgs* args, const mat4* model, int32_t show_vector);
|
||||
extern void draw_sub_mesh_default(const ObjSubMeshArgs* args);
|
||||
@@ -27,6 +27,5 @@ namespace mdl {
|
||||
extern void draw_sub_mesh_translucent(const ObjSubMeshArgs* args);
|
||||
};
|
||||
|
||||
extern void draw_object_model_mat_load(const mat4& mat);
|
||||
extern void model_mat_face_camera_position(const mat4* view, const mat4* src, mat4* dst);
|
||||
extern void model_mat_face_camera_view(const mat4* view, const mat4* src, mat4* dst);
|
||||
|
||||
Reference in New Issue
Block a user