Max 5 API Reference
00001 /* 00002 * jit.gl.mesh.c 00003 * 00004 * Copyright 2001-2005 - Cycling '74 00005 * Derek Gerstmann - derek@cycling74.com 00006 * 00007 * Jitter object for combining multiple matrix inputs into a 3d 00008 * geometric mesh representation. 00009 * 00010 */ 00011 00012 #ifndef JIT_GL_MESH_H 00013 #define JIT_GL_MESH_H 00014 00015 #include "jit.common.h" 00016 #include "jit.gl.h" 00017 #include "jit.vecmath.h" 00018 #include "jit.gl.cache.h" 00019 00020 /*************************************************************************/ 00021 00022 #ifdef __cplusplus 00023 extern "C" { 00024 #endif 00025 00026 #if C74_PRAGMA_STRUCT_PACKPUSH 00027 #pragma pack(push, 2) 00028 #elif C74_PRAGMA_STRUCT_PACK 00029 #pragma pack(2) 00030 #endif 00031 00032 /****************************************************************************/ 00033 00034 // enumerated type for GLboolean 00035 #ifndef GL_BOOLEAN 00036 #define GL_BOOLEAN 0x9999 00037 #endif 00038 00039 #define JIT_GL_MESH_VERTEX 0 00040 #define JIT_GL_MESH_TEXCOORD 1 00041 #define JIT_GL_MESH_NORMAL 2 00042 #define JIT_GL_MESH_COLOR 3 00043 #define JIT_GL_MESH_DIFFUSE 3 // alias for color 00044 #define JIT_GL_MESH_SPECULAR 4 00045 #define JIT_GL_MESH_EDGEFLAG 5 00046 #define JIT_GL_MESH_TANGENT 6 00047 #define JIT_GL_MESH_BITANGENT 7 00048 #define JIT_GL_MESH_INDEX 8 00049 #define JIT_GL_MESH_VERTEX_ATTR 9 00050 #define JIT_GL_MESH_MAX_INPUTCOUNT 10 00051 00052 00053 // -------------------------------------------------------------------------------- 00054 00055 typedef struct _jit_gl_mesh 00056 { 00057 t_object ob; // jitter object 00058 void *ob3d; // jitter ob3d 00059 t_symbol *name; // name of geometry 00060 t_jit_gl_cache **cache; // cached data 00061 t_jit_object **input; // cached input matrices 00062 t_jit_object *output; // cached output matrix 00063 t_symbol *map; // mapping for output matrix 00064 long input_type; // input type (set by max obj) 00065 t_symbol *cache_mode; // name of type of cached data (VBO/VAR/DL) 00066 t_symbol *draw_mode; // draw mode (tristrip/etc) 00067 t_symbol *color_mode; // color mode (position, texcoord, normal, etc) 00068 double epsilon; // epsilon for welding 00069 float smooth_normals; // minimum normal crease cos 00070 float smooth_tangents; // minimum tangent crease cos 00071 float smooth_bitangents; // minimum bitangent crease cos 00072 float weight_normals; // weight resulting normals by area 00073 long auto_index; // generate indices 00074 long auto_normals; // generate normals 00075 long auto_colors; // generate colors 00076 long auto_tangents; // generate tangents 00077 long auto_bitangents; // generate bitangents (aka bitangents) 00078 long auto_split; // automatically split groups 00079 long fix_cylindrical; // fix cylindrical texcoords 00080 long mode; // type of cached data (VBO/VAR/DL) 00081 long enumtype; // enumerated geometry type (GL_TRIANGLES/etc) 00082 long optimize; // optimize and generate missing cached data 00083 long grid; // grid based geometry 00084 long update; // update flag 00085 long id; // geometry id (used for display list) 00086 00087 } t_jit_gl_mesh; 00088 00089 // -------------------------------------------------------------------------------- 00090 00091 extern t_symbol *ps_jit_gl_mesh_index; 00092 extern t_symbol *ps_jit_gl_mesh_vertex; 00093 extern t_symbol *ps_jit_gl_mesh_position; 00094 extern t_symbol *ps_jit_gl_mesh_normal; 00095 extern t_symbol *ps_jit_gl_mesh_texcoord; 00096 extern t_symbol *ps_jit_gl_mesh_color; 00097 extern t_symbol *ps_jit_gl_mesh_diffuse; 00098 extern t_symbol *ps_jit_gl_mesh_specular; 00099 extern t_symbol *ps_jit_gl_mesh_edgeflag; 00100 extern t_symbol *ps_jit_gl_mesh_tangent; 00101 extern t_symbol *ps_jit_gl_mesh_bitangent; 00102 extern t_symbol *ps_jit_gl_mesh_none; 00103 00104 // -------------------------------------------------------------------------------- 00105 00106 t_jit_err jit_gl_mesh_init(void); 00107 00108 t_jit_gl_mesh *jit_gl_mesh_new(t_symbol * dest_name); 00109 void jit_gl_mesh_free(t_jit_gl_mesh *x); 00110 t_jit_err jit_gl_mesh_recalc(t_jit_gl_mesh *x); 00111 t_jit_err jit_gl_mesh_destroy(t_jit_gl_mesh *x); 00112 00113 t_jit_err jit_gl_mesh_setattr_input_type(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00114 t_jit_err jit_gl_mesh_setattr_cache_mode(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00115 t_jit_err jit_gl_mesh_setattr_draw_mode(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00116 t_jit_err jit_gl_mesh_setattr_optimize(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00117 t_jit_err jit_gl_mesh_setattr_fix_cylindrical(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00118 t_jit_err jit_gl_mesh_setattr_weight_normals(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00119 t_jit_err jit_gl_mesh_setattr_smooth_normals(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00120 t_jit_err jit_gl_mesh_setattr_smooth_tangents(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00121 t_jit_err jit_gl_mesh_setattr_smooth_bitangents(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00122 t_jit_err jit_gl_mesh_setattr_auto_index(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00123 t_jit_err jit_gl_mesh_setattr_auto_colors(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00124 t_jit_err jit_gl_mesh_setattr_auto_normals(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00125 t_jit_err jit_gl_mesh_setattr_auto_tangents(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00126 t_jit_err jit_gl_mesh_setattr_auto_bitangents(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00127 t_jit_err jit_gl_mesh_setattr_auto_split(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00128 t_jit_err jit_gl_mesh_setattr_color_mode(t_jit_gl_mesh *x, void *attr, long argc, t_atom *argv); 00129 00130 t_jit_err jit_gl_mesh_draw(t_jit_gl_mesh *x); 00131 t_jit_err jit_gl_mesh_init_cache(t_jit_gl_mesh *x); 00132 t_jit_err jit_gl_mesh_draw_cache(t_jit_gl_mesh *x); 00133 t_jit_err jit_gl_mesh_dest_changed(t_jit_gl_mesh *x); 00134 t_jit_err jit_gl_mesh_dest_closing(t_jit_gl_mesh *x); 00135 t_jit_err jit_gl_mesh_rebuild(t_jit_gl_mesh *x); 00136 t_jit_err jit_gl_mesh_optimize(t_jit_gl_mesh *x); 00137 t_jit_err jit_gl_mesh_determine_mode(t_jit_gl_mesh *x); 00138 00139 t_jit_err jit_gl_mesh_from_matrix(t_jit_gl_mesh *x, t_jit_object *matrix); 00140 t_jit_err jit_gl_mesh_jit_matrix(t_jit_gl_mesh *x, t_symbol *s, int argc, t_atom *argv); 00141 00142 t_jit_err jit_gl_mesh_reset(t_jit_gl_mesh *x, t_symbol *s, int argc, t_atom *argv); 00143 t_jit_err jit_gl_mesh_bind(t_jit_gl_mesh *x, t_symbol *s, int argc, t_atom *argv); 00144 t_jit_err jit_gl_mesh_unbind(t_jit_gl_mesh *x, t_symbol *s, int argc, t_atom *argv); 00145 t_jit_gl_cache *jit_gl_mesh_get_cache_by_name(t_jit_gl_mesh *x, t_symbol *name); 00146 00147 t_jit_gl_cache* jit_gl_mesh_get_cache_for_input(t_jit_gl_mesh *x, long input); 00148 t_jit_err jit_gl_mesh_verify_extensions(t_jit_gl_mesh *x, const char **extensions); 00149 00150 t_jit_err jit_gl_mesh_init_cache_from_matrix_info( 00151 t_jit_gl_mesh *x, t_jit_gl_cache *cache, t_jit_matrix_info *info); 00152 t_jit_err jit_gl_mesh_fill_cache( 00153 t_jit_gl_mesh *x, t_jit_gl_cache *cache, t_jit_matrix_info *info, char *bp, 00154 long startplane, long endplane, long allocate); 00155 00156 long jit_gl_mesh_elements_from_enumtype(long enumtype, long count); 00157 long jit_gl_mesh_geomsize_from_enumtype(long enumtype); 00158 GLenum jit_gl_mesh_enumtype_from_sym(t_symbol *s); 00159 long jit_gl_mesh_mode_from_sym(t_symbol *s); 00160 00161 // -------------------------------------------------------------------------------- 00162 00163 #ifdef __cplusplus 00164 } /* extern "C" */ 00165 #endif 00166 00167 #endif // JIT_GL_MESH_H
Copyright © 2008, Cycling '74