mirror of
https://github.com/quelsolaar/MergeSource
synced 2025-02-01 09:58:42 -05:00
142 lines
4.6 KiB
C
142 lines
4.6 KiB
C
typedef struct{
|
|
uint32 material;
|
|
uint32 material_version;
|
|
uint render_end;
|
|
uint quad_end;
|
|
uint tri_end;
|
|
uint vertex_start;
|
|
uint id;
|
|
uint16 layer;
|
|
}PMeshMaterial;
|
|
|
|
typedef struct{
|
|
uint version;
|
|
pgreal *data;
|
|
pgreal weight[3];
|
|
}PMeshLayer;
|
|
|
|
typedef enum{
|
|
PDM_NONE, /* no displacement mapping */
|
|
PDM_NORMALIZED, /* normalized propperly */
|
|
PDM_QUICK, /* only normalized once, fast for animation */
|
|
PDM_DYNAMIC, /* inclues */
|
|
}PDispMode;
|
|
|
|
typedef enum{
|
|
PAN_NONE,
|
|
PAN_PLAY,
|
|
PAN_STOPPED,
|
|
PAN_PLAY_BUT_BROKEN
|
|
}PAnimMode;
|
|
|
|
typedef struct{
|
|
uint geometry_id;
|
|
uint geometry_version;
|
|
uint stage;
|
|
uint sub_stages[4];
|
|
void *temp;
|
|
void *next;
|
|
struct{
|
|
void **tess; /* the selected tesselation */
|
|
uint32 *order_node; /* how the render base polys refers to the geometry node polys */
|
|
uint32 *order_temp_mesh; /* how the PMesh polys refers to the geometry mesh polygs (deleted once used)*/
|
|
uint32 *order_temp_mesh_rev; /* how the geometry mesh polys refers to the PMesh polys (deleted once used)*/
|
|
uint32 *order_temp_poly_start; /* start of each polygons vertices*/
|
|
uint tri_count; /* number of control tris */
|
|
uint quad_count; /* number of control quads */
|
|
pgreal factor;
|
|
uint force;
|
|
pgreal eye[3];
|
|
pgreal (*edge_tess_func)(pgreal *v_0, pgreal *v_1, pgreal *e_0, pgreal *eay);
|
|
}tess;
|
|
struct{
|
|
pgreal *vertex_array; /* the subdivided vertex array */
|
|
pgreal *normal_array; /* the subdivided normal array */
|
|
uint32 vertex_count; /* the number of subdivided vertex array */
|
|
uint32 *reference; /* the final reference array */
|
|
uint32 element_count; /* the length of the reference array */
|
|
PMeshMaterial *mat; /*the materials and their ranges */
|
|
uint mat_count; /* number of ranges */
|
|
boolean open_edges;
|
|
boolean shadows;
|
|
}render;
|
|
struct{
|
|
uint32 *reference;
|
|
pgreal *weight;
|
|
uint32 *ref_count;
|
|
uint length;
|
|
uint length_temp;
|
|
uint length_temp2;
|
|
uint length_temp3;
|
|
}depend;
|
|
struct{
|
|
uint32 *normal_ref;
|
|
pgreal *normals;
|
|
// pgreal *displacement;
|
|
// PDispMode mode;
|
|
pgreal *draw_normals;
|
|
}normal;
|
|
struct{
|
|
void *array;
|
|
uint array_count;
|
|
uint *version;
|
|
uint data_version;
|
|
}param;
|
|
}PMesh;
|
|
|
|
extern pgreal p_sds_edge_tesselation_global_func(pgreal *v_0, pgreal *v_1, pgreal *e_0, pgreal *eay);
|
|
extern pgreal p_sds_edge_tesselation_local_func(pgreal *v_0, pgreal *v_1, pgreal *e_0, pgreal *eay);
|
|
|
|
/* p_sds_obj.c */
|
|
|
|
extern void p_lod_compute_vertex_array(pgreal *vertex, uint output_stride, uint vertex_count, const uint *ref_count, const uint *reference, const pgreal *weight, const pgreal *cvs);
|
|
extern void p_lod_compute_normal_array(pgreal *normals, uint normal_stride, uint vertex_count, const uint *normal_ref, const pgreal *vertex, uint vertex_stride);
|
|
extern void p_lod_compute_displacement_array(pgreal *vertex, uint vertex_count, const pgreal *normals, const pgreal *displacement);
|
|
|
|
/* p_sds_obj_edge.c*/
|
|
|
|
extern void p_lod_create_normal_ref_and_shadow_skirts(PPolyStore *smesh, PMesh *mesh);
|
|
|
|
/* p_sds_obj_displace.c */
|
|
|
|
//extern void p_lod_create_displacement_array(ENode *g_node, ENode *o_node, PMesh *mesh, uint base_level);
|
|
//extern void p_lod_update_displacement_array(ENode *g_node, ENode *o_node, PMesh *mesh, uint base_level);
|
|
|
|
/* p_sds_obj_sort.c */
|
|
|
|
//extern void p_lod_gap_count(ENode *node, PPolyStore *smesh, PMesh *mesh, ENode *o_node);
|
|
|
|
/* p_sds_obj_tess.c */
|
|
|
|
|
|
//extern void p_lod_set_view_pos(double *view_cam);
|
|
//extern pgreal p_lod_compute_lod_level(ENode *o_node, ENode *g_node, uint32 time_s, uint32 time_f);
|
|
//extern boolean p_lod_compute_lod_update(ENode *o_node, ENode *g_node, uint32 time_s, uint32 time_f, pgreal factor);
|
|
|
|
|
|
extern void p_lod_select_tesselation(PMesh *mesh, PPolyStore *smesh, pgreal *cvs);
|
|
|
|
/* p_sds_obj_param.c */
|
|
|
|
//extern void p_lod_create_layer_param(ENode *g_node, PMesh *mesh);
|
|
//extern boolean p_lod_update_layer_param(ENode *g_node, PMesh *mesh);
|
|
|
|
//extern boolean p_lod_update_shadow(ENode *g_node, PMesh *mesh);
|
|
|
|
/* p_sds_obj_edge_normal.c */
|
|
|
|
extern void p_lod_compute_vertex_normals(PPolyStore *smesh, PMesh *mesh);
|
|
|
|
/* p_sds_obj_anim.c */
|
|
|
|
//extern boolean p_lod_anim_bones_update_test(PMesh *mesh, ENode *o_node, ENode *g_node);
|
|
//extern boolean p_lod_anim_scale_update_test(PMesh *mesh, ENode *o_node);
|
|
//extern boolean p_lod_anim_layer_update_test(PMesh *mesh, ENode *o_node, ENode *g_node);
|
|
|
|
//extern void p_lod_anim_vertex_array(pgreal *vertex, uint cv_count, PMesh *mesh, ENode *g_node);
|
|
|
|
|
|
|
|
//extern double p_anim_evaluate_anim(ENode *o_node, double *output, uint seconds, uint fractions, char *name, double default_value);
|
|
//extern void p_anim_vertex_array(pgreal *vertex, uint cv_count, PMesh *mesh, ENode *g_node);
|