29#ifndef __FREEWRL_HEADERS_H__
30#define __FREEWRL_HEADERS_H__
34extern char *BrowserName;
35const char* freewrl_get_browser_program();
44#define SPEC_X3D30 0x02
45#define SPEC_X3D31 0x04
46#define SPEC_X3D32 0x08
47#define SPEC_X3D33 0x10
48#define SPEC_X3D34 0x20
49#define SPEC_X3D40 0X40
50#define SPEC_VRML1 0x01
70#define FIELDOFFSET_LENGTH 6
82#define CHILDREN_COUNT int nc = node->_sortedChildren.n;
83#define RETURN_FROM_CHILD_IF_NOT_FOR_ME \
89 ttrenderstate rs = renderstate(); \
90 if (rs->render_blend == VF_Blend) \
91 if ((node->_renderFlags & VF_Blend) != VF_Blend) { \
94 if (rs->render_proximity == VF_Proximity) \
95 if ((node->_renderFlags & VF_Proximity) != VF_Proximity) { \
98 if (rs->render_light == VF_globalLight) \
99 if ((node->_renderFlags & VF_globalLight) != VF_globalLight) { \
106#define ARR_SIZE(arr) (int)(sizeof(arr)/sizeof((arr)[0]))
108extern char *BrowserName;
109extern char *BrowserFullPath;
115#define VF_Viewpoint 0x0001
116#define VF_Geom 0x0002
117#define VF_localLight 0x0004
118#define VF_Sensitive 0x0008
119#define VF_Blend 0x0010
120#define VF_Proximity 0x0020
121#define VF_Collision 0x0040
122#define VF_globalLight 0x0080
123#define VF_hasVisibleChildren 0x0100
124#define VF_shouldSortChildren 0x0200
125#define VF_Other 0x0400
126#define VF_Picking 0x1000
127#define VF_HideLeft 0x2000
128#define VF_HideRight 0x4000
130#define VF_Cube 0x10000
131#define VF_Background 0x20000
132#define VF_Depth 0x40000
134#define DEFAULT_NEARPLANE 0.07
135#define DEFAULT_FARPLANE 21000.0
136#define DEFAULT_BACKGROUNDPLANE 18000.0
137extern double geoHeightinZAxis;
141#define ROUTING_SFNODE -23
142#define ROUTING_MFNODE -10
143#define ROUTING_SFIMAGE -12
144#define ROUTING_MFSTRING -13
145#define ROUTING_MFFLOAT -14
146#define ROUTING_MFROTATION -15
147#define ROUTING_MFINT32 -16
148#define ROUTING_MFCOLOR -17
149#define ROUTING_MFVEC2F -18
150#define ROUTING_MFVEC3F -19
151#define ROUTING_MFVEC3D -20
152#define ROUTING_MFDOUBLE -21
153#define ROUTING_SFSTRING -22
154#define ROUTING_MFVEC2D -32
155#define ROUTING_MFVEC4F -33
156#define ROUTING_MFVEC4D -34
157#define ROUTING_MFMATRIX3F -35
158#define ROUTING_MFMATRIX3D -36
159#define ROUTING_MFMATRIX4F -30
160#define ROUTING_MFMATRIX4D -31
171#define NODE_CHANGE_INIT_VAL 153
177void* compile_poly_if_required(
void* node,
void* coord,
void* fogCoord,
void* color,
void* normal,
void* texCoord);
178#define COMPILE_IF_REQUIRED { struct X3D_Virt *v; \
179 if (node->_ichange != node->_change) { \
180 v = virtTable[node->_nodeType]; \
182 compileNode (v->compile, (void *)node, NULL, NULL, NULL, NULL, NULL); \
183 } else {printf ("huh - have COMPIFREQD, but v->compile null for %s at %s:%d\n",stringNodeType(node->_nodeType),__FILE__,__LINE__);} \
185 if (node->_ichange == 0) return; \
188#define COMPILE_IF_REQUIRED_RETURN_NULL_ON_ERROR { struct X3D_Virt *v; \
189 if (node->_ichange != node->_change) { \
190 v = virtTable[node->_nodeType]; \
192 compileNode (v->compile, (void *)node, NULL, NULL, NULL, NULL, NULL); \
193 } else {printf ("huh - have COMPIFREQD, but v->compile null for %s at %s:%d\n",stringNodeType(node->_nodeType),__FILE__,__LINE__);} \
195 if (node->_ichange == 0) return NULL; \
198#define COMPILE_TCNODE { \
199 struct X3D_Virt *v; \
200 if (myTCnode->_ichange != myTCnode->_change) { \
201 v = virtTable[myTCnode->_nodeType]; \
203 compileNode (v->compile, (void *)myTCnode, NULL, NULL, NULL, NULL, NULL); \
204 myTCnode->_ichange = myTCnode->_change; \
205 } else {printf ("huh - have COMPIFREQD, but v->compile null for %s at %s:%d\n",stringNodeType(myTCnode->_nodeType),__FILE__,__LINE__);} \
207 if (myTCnode->_ichange == 0) return; \
210void check_compile(
struct X3D_Node* node);
215#define offsetPointer_deref(t, me, offs) ((t)(((char*)(me))+offs))
230#define POSSIBLE_PROTO_EXPANSION(type,inNode,outNode) \
231 outNode = (type)getTypeNode(inNode);
233#define MARK_NODE_COMPILED node->_ichange = node->_change;
234#define NODE_NEEDS_COMPILING (node->_ichange != node->_change)
235#define ROOTNODE_NEEDS_COMPILING (rootNode()->_ichange != rootNode()->_change)
239#define MARK_SFFLOAT_INOUT_EVENT(good,save,offset) \
240 if (!APPROX(good,save)) { \
241 MARK_EVENT(X3D_NODE(node), offset);\
245#define MARK_SFTIME_INOUT_EVENT(good,save,offset) \
246 if (!APPROX(good,save)) { \
247 MARK_EVENT(X3D_NODE(node), offset);\
251#define MARK_SFINT32_INOUT_EVENT(good,save,offset) \
253 MARK_EVENT(X3D_NODE(node), offset);\
257#define MARK_SFBOOL_INOUT_EVENT(good,save,offset) \
259 MARK_EVENT(X3D_NODE(node), offset);\
264#define MARK_SFVEC3F_INOUT_EVENT(good,save,offset) \
265 if ((!APPROX(good.c[0],save.c[0])) || (!APPROX(good.c[1],save.c[1])) || (!APPROX(good.c[2],save.c[2]))) { \
266 MARK_EVENT(X3D_NODE(node), offset);\
267 memcpy (&save.c, &good.c, sizeof (struct SFColor));\
270#define MARK_SFVEC3D_INOUT_EVENT(good,save,offset) \
271 if ((!APPROX(good.c[0],save.c[0])) || (!APPROX(good.c[1],save.c[1])) || (!APPROX(good.c[2],save.c[2]))) { \
272 MARK_EVENT(X3D_NODE(node), offset);\
273 memcpy (&save.c, &good.c, sizeof (struct SFVec3d));\
278#define MARK_SFNODE_INOUT_EVENT(good,save,offset) \
279 if (good != save) { \
280 MARK_EVENT(X3D_NODE(node), offset);\
285#define MARK_MFNODE_INOUT_EVENT_PRE_JULY29_2015(good,save,offset) \
287 if (good.p != save.p) { \
288 MARK_EVENT(X3D_NODE(node), offset);\
293#define MARK_MFNODE_INOUT_EVENT(good,save,offset) \
295 if (good.p != save.p) { \
296 MARK_EVENT(X3D_NODE(node), offset);\
298 FREE_IF_NZ(save.p); \
300 if(good.n && good.p){ \
301 save.p = MALLOCV(good.n * sizeof(void*)); \
302 memcpy(save.p,good.p,good.n * sizeof(void*)); \
340int find_key (
int kin,
float frac,
float *keys);
341void startOfLoopNodeUpdates(
void);
343void zeroVisibilityFlag(
void);
344void setField_fromJavascript (
struct X3D_Node *ptr,
char *field,
char *value,
int isXML);
345unsigned int setField_FromEAI (
char *ptr);
348float *extent6f_clear(
float *extent6);
349#define INITIALIZE_EXTENT extent6f_clear(node->_extent);
360#if defined(DEBUG) || defined(FW_DEBUG)
365#undef SETFIELDVERBOSE
370#undef JSVRMLCLASSESVERBOSE
391#undef STREAM_POLY_VERBOSE
394#undef COLLISIONVERBOSE
397#undef CAPABILITIESVERBOSE
402#define TESS_MAX_COORDS 200000
404#define offset_of(p_type,field) ((unsigned int)(&(((p_type)NULL)->field)-NULL))
406#define UNUSED(v) ((void) v)
407#define ISUSED(v) ((void) v)
409#define PI 3.14159265358979323846
410#define PIF 3.1415926535f
413#define APPROX(a,b) (fabs((a)-(b))<0.00000001)
416#define NORMAL_VECTOR_LENGTH_TOLERANCE 0.00001
418#define IS_ROTATION_VEC_NOT_NORMAL(rot) ( \
419 fabs(1-sqrt(rot.c[0]*rot.c[0]+rot.c[1]*rot.c[1]+rot.c[2]*rot.c[2])) \
420 >NORMAL_VECTOR_LENGTH_TOLERANCE \
424#define XEQ (APPROX(t_r1.x,t_r2.x))
425#define YEQ (APPROX(t_r1.y,t_r2.y))
426#define ZEQ (APPROX(t_r1.z,t_r2.z))
428#define XRAT(a) (((a)-t_r1.x)/(t_r2.x-t_r1.x))
429#define YRAT(a) (((a)-t_r1.y)/(t_r2.y-t_r1.y))
430#define ZRAT(a) (((a)-t_r1.z)/(t_r2.z-t_r1.z))
432#define MRATX(a) (t_r1.x + (a)*(t_r2.x-t_r1.x))
433#define MRATY(a) (t_r1.y + (a)*(t_r2.y-t_r1.y))
434#define MRATZ(a) (t_r1.z + (a)*(t_r2.z-t_r1.z))
437#define POINT_FACES 16
441void render_node(
struct X3D_Node *node);
443void rayhit(
float rat,
float cx,
float cy,
float cz,
float nx,
float ny,
float nz,
444float tx,
float ty,
char *descr) ;
446void fwnorprint (
float *norm);
454unsigned char *readpng_get_image(
double display_exponent,
int *pChannels,
455 unsigned long *pRowbytes);
458void LocalLight_Rend(
void *nod_);
460void saveLightState2(
int *ls);
461void restoreLightState2(
int ls);
463void refreshLightUniforms();
464#define LOCAL_LIGHT_SAVE int lastlight;
496void normalize_ifs_face (
float *point_normal,
505#define RUNNINGONAMD64 (sizeof(void *) == 8)
523double BrowserStartTime();
534extern GLint viewport[];
538extern double defaultExamineDist;
544void *returnInterpolatorPointer (
int nodeType);
548#define X3DBoundedObject 1
549#define X3DBounded2DObject 2
550#define X3DURLObject 3
551#define X3DAppearanceNode 10
552#define X3DAppearanceChildNode 11
553#define X3DMaterialNode 12
554#define X3DTextureNode 13
555#define X3DTexture2DNode 14
556#define X3DTexture3DNode 15
557#define X3DTextureTransformNode 16
558#define X3DTextureTransform2DNode 17
559#define X3DGeometryNode 18
560#define X3DTextNode 19
561#define X3DParametricGeometryNode 20
562#define X3DGeometricPropertyNode 21
563#define X3DColorNode 22
564#define X3DCoordinateNode 23
565#define X3DNormalNode 24
566#define X3DTextureCoordinateNode 25
567#define X3DFontStyleNode 26
568#define X3DProtoInstance 27
569#define X3DChildNode 28
570#define X3DBindableNode 29
571#define X3DBackgroundNode 30
572#define X3DGroupingNode 31
573#define X3DShapeNode 32
574#define X3DInterpolatorNode 33
575#define X3DLightNode 34
576#define X3DScriptNode 35
577#define X3DSensorNode 36
578#define X3DEnvironmentalSensorNode 37
579#define X3DKeyDeviceSensorNode 38
580#define X3DNetworkSensorNode 39
581#define X3DPointingDeviceSensorNode 40
582#define X3DDragSensorNode 41
583#define X3DTouchSensorNode 42
584#define X3DSequencerNode 43
585#define X3DTimeDependentNode 44
586#define X3DTriggerNode 46
587#define X3DInfoNode 47
588#define X3DShaderNode 48
589#define X3DVertexAttributeNode 49
590#define X3DProgrammableShaderObject 50
591#define X3DUrlObject 51
592#define X3DEnvironmentTextureNode 52
594#define X3DProductStructureChildNode 54
595#define X3DComposedGeometryNode 55
596#define X3DNurbsControlCurveNode 56
597#define X3DNurbsSurfaceGeometryNode 57
598#define X3DViewportNode 58
599#define X3DLayerNode 59
600#define X3DLayerSetNode 60
601#define X3DLayoutNode 61
602#define X3DNBodyCollidableNode 62
603#define X3DRigidJointNode 63
604#define X3DChaserNode 64
605#define X3DDamperNode 65
606#define X3DParticleEmitterNode 66
607#define X3DParticlePhysicsModelNode 67
608#define X3DComposableVolumeRenderStyleNode 68
609#define X3DVolumeDataNode 69
610#define X3DTextureProjectorNode 70
611#define X3DMotionNode 73
612#define X3DMotionDataNode 74
613#define X3DGeoSRFTParametersNode 75
614#define X3DGeoSRFParametersNode 76
615#define X3DGeoSRFParametersInfoNode 77
616#define X3DSoundNode 80
617#define X3DSoundProcessingNode 81
618#define X3DSoundSourceNode 82
619#define X3DSoundDestinationNode 83
620#define X3DSoundChannelNode 84
621#define X3DMIDINode 85
622#define X3DMIDISourceNode 86
623#define X3DMIDIDestinationNode 87
624#define X3DMIDIProcessingNode 88
628BOOL isManagedField(
int mode,
int type, BOOL isPublic);
630void AddRemoveChildren (
struct X3D_Node *parent,
struct Multi_Node *tn,
struct X3D_Node * *nodelist,
int len,
int ar,
char * where,
int lin);
631unsigned long upper_power_of_two(
unsigned long v);
632unsigned long lower_power_of_two(
unsigned long v);
633void update_node(
struct X3D_Node *ptr);
635void UPDATE_RENDERFLAG(
struct X3D_Node *ptr,
int flag,
char *fi,
int li);
636#define update_renderFlag(aaa,bbb) UPDATE_RENDERFLAG(aaa,bbb,__FILE__,__LINE__)
638int get_touched_flag(uintptr_t fptr, uintptr_t actualscript);
639void getMultiElementtype(
char *strp,
struct Multi_Vec3f *tn,
int eletype);
640void CRoutes_RemoveSimple(
struct X3D_Node* from,
int fromOfs,
641 struct X3D_Node* to,
int toOfs,
int len);
642 void CRoutes_RemoveSimpleB(
struct X3D_Node* from,
int fromIndex,
int fromBuiltin,
643 struct X3D_Node* to,
int toIndex,
int toBuiltin,
int len);
644void CRoutes_RegisterSimple(
struct X3D_Node* from,
int fromOfs,
645 struct X3D_Node* to,
int toOfs,
int len);
646 void CRoutes_RegisterSimpleB(
647 struct X3D_Node* from,
int fromIndex,
int fromBuiltIn,
648 struct X3D_Node* to,
int toIndex,
int toBuiltIn,
650void CRoutes_Register(
int adrem,
struct X3D_Node *from,
658void CRoutes_free(
void);
659void propagate_events(
void);
660int getRoutesCount(
void);
661void getField_ToJavascript (
int num,
int fromoffset);
662void add_first(
struct X3D_Node * node);
663void add_physics(
struct X3D_Node * node);
664void registerTexture(
struct X3D_Node * node);
665int checkNode(
struct X3D_Node *node,
char *fn,
int line);
669void process_eventsProcessed(
void);
677void frontendUpdateButtons(
void);
683void setConsoleMessage(
char *stat) ;
684void fwl_reload(
void);
686void fwl_do_rawKeyPress(
int key,
int type);
688int convert_typetoInt (
const char *type);
692void render_polyrep(
void *node);
699#define SHADERSCRIPT 4
711void setRootNode(
struct X3D_Node *rn);
717struct Vector *libraries();
718void setLibraries(
struct Vector *);
719void addLibrary(
char *url,
struct X3D_Proto *library,
void* res);
720void3 *librarySearch(
char *absoluteUniUrlNoPound);
722extern int isPerlParsing(
void);
724extern int isTextureParsing(
void);
729extern GLfloat boxtex[], boxnorms[], BackgroundVert[];
730extern GLfloat Backnorms[];
732extern void new_tessellation(
void);
733extern void new_text_tessellation(
void);
734extern void initializePerlThread(
void);
736extern void setPluginPipe(
const char *optarg);
737extern void setPluginFD(
const char *optarg);
738extern void setPluginInstance(
const char *optarg);
740extern int isPerlinitialized(
void);
742extern char *getInputURL(
void);
743extern char *lastReadFile;
747extern void xs_init(
void);
750extern void checkAndAllocMemTables(
int *texture_num,
int increment);
751extern void storeMPGFrameData(
int latest_texture_number,
int h_size,
int v_size,
752 int mt_repeatS,
int mt_repeatT,
char *Image);
753void mpg_main(
char *filename,
int *x,
int *y,
int *depth,
int *frameCount,
char **ptr);
754void removeFilenameFromPath (
char *path);
756int EAI_CreateVrml(
const char *tp,
const char *inputstring,
struct X3D_Node *ectx,
struct X3D_Group *node);
757int EAI_CreateX3d(
const char *tp,
const char *inputstring,
struct X3D_Node *ectx,
struct X3D_Group *where);
758void EAI_Route(
char cmnd,
const char *tf);
760void handle_aqua(
const int mev,
const unsigned int button,
int x,
int y);
762#define overMark 23425
768#if defined(_MSC_VER) || defined(_ANDROID) || defined(ANDROIDNDK)
769#ifndef _MIMIC_X11_SCREEN_BUTTONS
770 #define _MIMIC_X11_SCREEN_BUTTONS
773 #define ButtonPress 4
774 #define ButtonRelease 5
775 #define MotionNotify 6
781extern void setEAIport(
int pnum);
783extern void setNoCollision();
786extern void setBrowserFullPath(
const char *str);
787extern void setInstance(uintptr_t instance);
789extern const char *getLibVersion();
790extern int doBrowserAction ();
793extern char *myPerlInstallDir;
796#define EXTENT_MAX_X _extent[0]
797#define EXTENT_MIN_X _extent[1]
798#define EXTENT_MAX_Y _extent[2]
799#define EXTENT_MIN_Y _extent[3]
800#define EXTENT_MAX_Z _extent[4]
801#define EXTENT_MIN_Z _extent[5]
803void freewrlDie(
const char *format);
809int render_sensitive,render_picking,render_vp,render_light,render_proximity,render_other,
810verbose,render_blend,render_geom,render_collision,render_cube,render_background,render_depth,rwhat;
813ttrenderstate renderstate();
815int SAI_IntRetCommand (
char cmnd,
const char *fn);
816char * SAI_StrRetCommand (
char cmnd,
const char *fn);
817char *EAI_GetTypeName (
unsigned int uretval);
818char* EAI_GetValue(
unsigned int nodenum,
const char *fieldname,
const char *nodename);
820void add_parent(
struct X3D_Node *node_,
struct X3D_Node *parent_,
char *file,
int line);
822void EAI_readNewWorld(
char *inputstring);
830#define rendray_Text render_ray_polyrep
831#define rendray_ElevationGrid render_ray_polyrep
833#define rendray_Extrusion render_ray_polyrep
834#define rendray_IndexedFaceSet render_ray_polyrep
835#define make_IndexedFaceSet make_genericfaceset
836#define make_ElevationGrid make_genericfaceset
837#define rendray_ElevationGrid render_ray_polyrep
840#define rendray_IndexedTriangleSet render_ray_polyrep
841#define rendray_IndexedTriangleFanSet render_ray_polyrep
842#define rendray_IndexedTriangleStripSet render_ray_polyrep
843#define rendray_IndexedQuadSet render_ray_polyrep
844#define rendray_QuadSet render_ray_polyrep
845#define rendray_TriangleSet render_ray_polyrep
846#define rendray_TriangleFanSet render_ray_polyrep
847#define rendray_TriangleStripSet render_ray_polyrep
848#define collide_IndexedFaceSet collide_genericfaceset
849#define collide_IndexedTriangleFanSet collide_genericfaceset
850#define collide_IndexedTriangleSet collide_genericfaceset
851#define collide_IndexedTriangleStripSet collide_genericfaceset
852#define collide_IndexedQuadSet collide_genericfaceset
853#define collide_QuadSet collide_genericfaceset
854#define collide_TriangleFanSet collide_genericfaceset
855#define collide_TriangleSet collide_genericfaceset
856#define collide_TriangleStripSet collide_genericfaceset
857#define make_IndexedTriangleFanSet make_genericfaceset
858#define make_IndexedTriangleSet make_genericfaceset
859#define make_IndexedTriangleStripSet make_genericfaceset
860#define make_IndexedQuadSet make_genericfaceset
861#define make_QuadSet make_genericfaceset
862#define make_TriangleFanSet make_genericfaceset
863#define make_TriangleSet make_genericfaceset
864#define make_TriangleStripSet make_genericfaceset
865#define rendray_GeoElevationGrid render_ray_polyrep
867#define make_GeoElevationGrid make_genericfaceset
871void do_BooleanFilter (
void *node);
872void do_BooleanSequencer (
void *node);
873void do_BooleanToggle (
void *node);
874void do_BooleanTrigger (
void *node);
875void do_IntegerSequencer (
void *node);
876void do_IntegerTrigger (
void *node);
877void do_TimeTrigger (
void *node);
880void do_GeoConvert(
void *node);
882#define ADD_PARENT(a,b) add_parent(a,b,__FILE__,__LINE__)
887#define LIGHTING_ON if (!tg->RenderFuncs.lightingOn) {tg->RenderFuncs.lightingOn=TRUE;}
888#define LIGHTING_OFF if(tg->RenderFuncs.lightingOn) {tg->RenderFuncs.lightingOn=FALSE;}
890#define LIGHTING_INITIALIZE gglobal()->RenderFuncs.lightingOn=TRUE;
892void zeroAllBindables(
void);
894int inputParse(
unsigned type,
char *inp,
int bind,
int returnifbusy,
895 void *ptr,
unsigned ofs,
int *complete,
897void compileNode (
void (*nodefn)(
void *,
void *,
void *,
void *,
void *,
void *),
void *node,
void *a,
void *b,
void *c,
void *d,
void *e);
898void destroyCParserData();
901void getMovieTextureOpenGLFrames(
int *highest,
int *lowest,
int myIndex);
902int ConsoleMessage(
const char *fmt, ...);
903void closeConsoleMessage(
void);
906void outOfMemory(
const char *message);
908void killErrantChildren(
void);
910void kill_routing(
void);
911void kill_bindables(
void);
912void kill_javascript(
void);
913void kill_oldWorld(
int kill_EAI,
int kill_JavaScript,
char *file,
int line);
915void kill_clockEvents(
void);
917void kill_X3DDefs(
void);
920int countCommas (
char *instr);
926void setglClearColor (
float *val);
927void doglClearColor(
void);
928extern int cc_changed;
931int mapFieldTypeToInernaltype (
unsigned int kwIndex);
932void resetSensorEvents();
936void handleMetaDataStringString(
void *ec,
char *val1,
char *val2);
937void handleUnitDataStringString(
void *ec,
char *categoryname,
char *unitname,
double conversionfactor);
938void handleProfile(
int myp);
939void handleComponent(
int com,
int lev);
940void handleExport (
char *node,
char *as);
941void handleImport (
char *nodeName,
char *nodeImport,
char *as);
942void handleVersion (
const char *versionString);
946void registerX3DNode(
struct X3D_Node * node);
948void doNotRegisterThisNodeForDestroy(
struct X3D_Node * nodePtr);
952void replaceWorldNeeded(
char* str);
955int X3DParse(
struct X3D_Node *ectx,
struct X3D_Node *parent,
const char *inputstring);
956void *createNewX3DNode (
int nt);
957void *createNewX3DNode0 (
int nt);
958void *createNewX3DNodeB(
int nt,
int intable,
void *executionContext);
960char *findFIELDNAMESfromNodeOffset0(
struct X3D_Node *node,
int offset);
962void print_routes(FILE* fp);
963void print_DEFed_node_names_and_pointers(FILE* fp);
966void profile_start(
char *);
967void profile_end(
char *);
968void profile_print_all();
972char ciflag_get(
int flags,
int index);
973int ciflag_set(
int flags,
char flag,
int index );
974int indexChildrenName(
struct X3D_Node *node);
976int offsetofChildren(
struct X3D_Node *node);
1000void set_tess_callbacks(
int variant);