FreeWRL / FreeX3D 4.3.0
libFreeWRL.h
1/*
2
3 FreeWRL library API (public)
4
5*/
6
7/****************************************************************************
8 This file is part of the FreeWRL/FreeX3D Distribution.
9
10 Copyright 2009 CRC Canada. (http://www.crc.gc.ca)
11
12 FreeWRL/FreeX3D is free software: you can redistribute it and/or modify
13 it under the terms of the GNU Lesser Public License as published by
14 the Free Software Foundation, either version 3 of the License, or
15 (at your option) any later version.
16
17 FreeWRL/FreeX3D is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with FreeWRL/FreeX3D. If not, see <http://www.gnu.org/licenses/>.
24****************************************************************************/
25
26
27#ifndef __LIBFREEWRL_API_H__
28#define __LIBFREEWRL_API_H__
29
30
31/* for front ends that do not have these X-11-based defines */
32// OLD_IPHONE_AQUA #if defined(AQUA) || defined(_MSC_VER) || defined(_ANDROID)
33
34#if defined(AQUA) || defined(_MSC_VER) || defined(_ANDROID)
35#ifndef _MIMIC_X11_SCREEN_BUTTONS
36#define _MIMIC_X11_SCREEN_BUTTONS
37#define KeyPress 2
38#define KeyRelease 3
39#define ButtonPress 4
40#define ButtonRelease 5
41#define MotionNotify 6
42#define ButtonRecycle 7 //touch devices release + recycle / hide up-drags
43#define MapNotify 19
44#endif
45#else
46#define ButtonRecycle 7 //touch devices release + recycle / hide up-drags
47#endif
48
49
50
51
52#ifdef COMPILING_IPHONE_FRONT_END
53 /* Ok, ok, ok. I know. Another definition. But, Objective-C gives lots of
54 errors if the whole file is included, and also, we only need a couple of
55 definitions to keep the front end as separate from the library as possible... */
56
57 void fwl_initializeRenderSceneUpdateScene(void);
58
59
60#else /* COMPILING_IPHONE_FRONT_END */
61
65const char *libFreeWRL_get_version();
66const char *freewrl_get_version();
67
68/* for front ends to get the versions */
69const char *fwl_libFreeWRL_get_version(); /* library version */
70const char *fwl_freewrl_get_version(); /* UI version */
71
75typedef struct freewrl_params {
76 /* Put here global parameters, parsed in main program
77 and needed to initialize libFreeWRL
78 example: width, height, fullscreen, multithreading, eai...
79 */
80 int width;
81 int height;
82 int xpos;
83 int ypos;
84 int wnum;
85 long * winToEmbedInto;
86 int touchtype;
87 bool fullscreen;
88 bool multithreading;
89 bool enableEAI;
90 bool verbose;
91 //int collision; /* do collision detection? moved to x3d_viewer struct july 7, 2012*/
92 bool frontend_handles_display_thread;
93 //for multiple-context applications such as 2+ fw instances on a web page,
94 //or a window app with 2+ fw windows - swapbuffers needs to know which one
95 void *display;
96 void *context;
97
98 // generic place holder for current surface
99 // on Linux, Window {aka long unsigned int} but Window definition is not used
100 // everywhere this file is, so we store it as a pointer and just cast it.
101
102 void *surface;
103
104} freewrl_params_t;
105
106
107/* FreeWRL parameters */
108/*
109 * These have been subject to abuse when then were all fw_params
110 * At at Fri Apr 29 09:38:26 BST 2011 I expect lots of compiler messages.
111 */
112/* extern freewrl_params_t fv_params; */
113/* extern freewrl_params_t OSX_params; */
114void *fwl_init_instance();
115void fwl_initParams( freewrl_params_t *params) ;
116
117bool fwl_initFreeWRL(freewrl_params_t *params);
118void closeFreeWRL();
119void terminateFreeWRL();
120
121int fwl_parse_geometry_string(const char* geometry, int* out_width, int* out_height,
122 int* out_xpos, int* out_ypos, int* out_wnum);
123
127int ConsoleMessage(const char *fmt, ...); /* This does not belong here!! */
128//#endif
129
130/* void Anchor_ReplaceWorld(char *name); */
131bool Anchor_ReplaceWorld();
132
133#define VIEWER_NONE 0 /* would have conflicted with another NONE definition */
134#define VIEWER_EXAMINE 1
135#define VIEWER_WALK 2
136#define VIEWER_EXFLY 3
137#define VIEWER_FLY 4
138#define VIEWER_SPHERICAL 5
139#define VIEWER_FLY2 6
140#define VIEWER_TILT 7
141#define VIEWER_TPLANE 8
142#define VIEWER_RPLANE 9
143#define VIEWER_TURNTABLE 10
144#define VIEWER_LOOKAT 11
145#define VIEWER_EXPLORE 12
146#define VIEWER_YAWZ 13
147#define VIEWER_XY 14
148#define VIEWER_YAWPITCH 15
149#define VIEWER_ROLL 16
150#define VIEWER_DIST 17
151//Geo variants, TTABLE above OK
152#define VIEWER_PAN 18
153#define VIEWER_ZOOM 19
154
155#define CHORD_YAWZ 0
156#define CHORD_YAWPITCH 1
157#define CHORD_ROLL 2
158#define CHORD_XY 3
159
160void setStereoBufferStyle(int);
161
162
166
167#define INT_ID_UNDEFINED -1
168
169
170#define RUNNINGASPLUGIN (isBrowserPlugin)
171
172extern char *BrowserFullPath;
173
174extern int _fw_pipe, _fw_FD;
175extern int _fw_browser_plugin;
176extern int isBrowserPlugin;
177#include <stdint.h>
178extern uintptr_t _fw_instance;
179//extern char *keypress_string;
180
181#ifdef HAVE_LIBCURL
182extern int with_libcurl;
183#endif
184
185#endif /* COMPILING_IPHONE_FRONT_END */
186
187/* ** NEW DJ ** */
188
189void fwl_set_strictParsing(bool flag);
190void fwl_set_plugin_print(bool flag);
191void fwl_set_occlusion_disable(bool flag);
192void fwl_set_print_opengl_errors(bool flag);
193void fwl_set_trace_threads(bool flag);
194void fwl_set_texture_size(unsigned int texture_size);
195unsigned int fwl_get_texture_size();
196void fwl_set_glClearColor (float red , float green , float blue , float alpha);
197void fwl_thread_dump(void);
198int fwg_get_unread_message_count(void);
199char *fwg_get_last_message();
200void fwl_set_logfile(char *);
201void fwl_set_nameTest(char *);
202void fwl_set_skinning(char);
203
204#if defined(_ANDROID)
205int DROIDDEBUG( const char*pFmtStr, ...);
206void PRINTF_ALL( const char*pFmtStr, ...);
207#endif
208
209
210/* ** REPLACE DJ ** */
211/* Try to replace the compile-time options in ConsoleMessage with run-time options */
212// OLD_IPHONE_AQUA #ifdef AQUA
213// OLD_IPHONE_AQUA #define MC_DEF_AQUA 1
214// OLD_IPHONE_AQUA #else
215// OLD_IPHONE_AQUA #define MC_DEF_AQUA 0
216// OLD_IPHONE_AQUA #endif
217
218// OLD_IPHONE_AQUA #ifdef TARGET_AQUA
219// OLD_IPHONE_AQUA #define MC_TARGET_AQUA 1
220// OLD_IPHONE_AQUA #else
221// OLD_IPHONE_AQUA #define MC_TARGET_AQUA 0
222// OLD_IPHONE_AQUA #endif
223
224#ifdef OLDCODE
225OLDCODE#ifdef HAVE_MOTIF
226OLDCODE #define MC_HAVE_MOTIF 1
227OLDCODE#else
228OLDCODE #define MC_HAVE_MOTIF 0
229OLDCODE#endif
230OLDCODE
231OLDCODE#ifdef TARGET_MOTIF
232OLDCODE #define MC_TARGET_MOTIF 1
233OLDCODE#else
234OLDCODE #define MC_TARGET_MOTIF 0
235OLDCODE#endif
236OLDCODE
237OLDCODE#ifdef _MSC_VER
238OLDCODE #define MC_MSC_HAVE_VER 1
239OLDCODE#else
240OLDCODE #define MC_MSC_HAVE_VER 0
241OLDCODE#endif
242#endif // OLDCODE
243
244
245
246int fwl_StringConsoleMessage(char* message);
247
248void fwl_init_SnapGif(void);
249void fwl_set_SnapFile(const char* file);
250void fwl_set_SnapTmp(const char* file);
251void fwl_set_LineWidth(float lwidth);
252void fwl_set_KeyString(const char *str);
253void fwl_setCurXY(int x, int y);
254void fwl_do_keyPress(char kp, int type);
255void fwl_doQuit(char *, int);
256void fwl_doQuitInstance(void *instance);
257void fwl_updateScreenDim(int wi, int he);
258void fwl_doQuitAndWait();
259void fwl_set_viewer_type(const int type);
260
261int fwl_get_modeRecord();
262void fwl_set_modeRecord();
263void fwl_set_modePlayback();
264void set_MIDITransport(int method);
265
266#define CHANNEL_EAI 0
267//OLDCODE #define CHANNEL_MIDI 1
268
269#define RxTx_STOP 0 /* Shutdown */
270#define RxTx_START 1 /* Start */
271#define RxTx_REFRESH 2 /* Read any pending input into PRIVATE buffer */
272#define RxTx_EMPTY 4 /* Empty the private buffer */
273#define RxTx_MOREVERBOSE 8
274#define RxTx_SILENT 16
275#define RxTx_SINK 32 /* Just throw away any future input */
276#define RxTx_PENDING 64
277#define RxTx_STOP_IF_DISCONNECT 128
278#define RxTx_STATE 32768
279#define RxTx_GET_VERBOSITY 65536
280
281/* The first few functions do I/O */
282int fwlio_RxTx_control(int channel, int action);
283char * fwlio_RxTx_getbuffer(int channel) ;
284void fwlio_RxTx_sendbuffer(char *fromFile, int fromLine, int channel, char *str);
285char * fwlio_RxTx_waitfor(int channel, char *str);
286
287void fwl_init_EaiVerbose();
288char * fwl_EAI_handleBuffer(char *tempEAIdata);
289int fwl_EAI_allDone();
290char * fwl_EAI_handleRest();
291//OLDCODE char * fwl_MIDI_handleBuffer(char *tempEAIdata);
292
293void fwl_set_ScreenDist(const char *optArg);
294void fwl_init_StereoDefaults(void); //don't need to call now March 2012
295void fwl_set_EyeDist(const char *optArg);
296void fwl_init_Shutter(void);
297void fwl_init_SideBySide(void);
298
299void fwl_init_UpDown(void);
300void fwl_init_cardboard(void);
301void fwl_init_quadrant(void);
302void fwl_setOrientation2(int degrees);
303void fwl_set_AnaglyphParameter(const char *optArg);
304void fwl_set_StereoParameter(const char *optArg);
305int fwl_getDrawBoundingBoxes();
306void fwl_setDrawBoundingBoxes(int drawbb);
307void fwl_setJsEngine(char *optarg);
308// JAS obsolete void fwl_askForRefreshOK();
309
310/* DISPLAY THREAD */
311void fwl_initializeDisplayThread();
312bool checkNetworkFile(const char *fn);
313#define fwl_checkNetworkFile(a) checkNetworkFile(a)
314
315/* PARSER THREAD */
316void fwl_initialize_parser();
317void fwl_initializeInputParseThread();
318int fwl_isinputThreadParsing();
319int fwl_isInputThreadInitialized();
320
321/* TEXTURE THREAD */
322void fwl_initializeTextureThread();
323int fwl_isTextureinitialized();
324
325/* PARSER THREAD */
326int fwl_isTextureParsing();
327
328void fwl_Next_ViewPoint(void);
329void fwl_Prev_ViewPoint(void);
330void fwl_First_ViewPoint(void);
331void fwl_Last_ViewPoint(void);
332void fwl_gotoViewpoint (char *findThisOne);
333
334void fwl_startFreeWRL(const char *url);
335/* distinguish instances from window event handler using the window handle */
336int fwl_setCurrentHandle(void *handle, char*, int);
337void fwl_clearCurrentHandle();
338void *fwl_getCurrentHandle(char *, int);
339
340void fwl_resource_push_single_request(const char *request);
341void fwl_OSX_initializeParameters(const char* initialURL);
342void fwl_resource_push_single_request_IE_main_scene(const char *request);
343
344void fwg_frontEndReturningData(char* fileData,int length,int width,int height,bool hasAlpha);
345
346/* from main/ConsoleMessage.c */
347void fwg_setConsoleParam_maxLines(int);
348void fwg_setConsoleParam_maxLineLength(int);
349void fwg_setConsoleParam_replaceTabs(int);
350
351void fwg_setFrontEndOnX3DFileLoadedListener(void (*frontEndOnX3DFileLoadedListener)(char *));
352
353
354void fwg_frontEndReturningLocalFile(char *localfile, int iret);
355void fwl_RenderSceneUpdateScene(void);
356void fwl_gotoCurrentViewPoint();
357void fwl_setScreenDim(int wi, int he);
358void fwl_setScreenDim0(int wi, int he);
359void fwl_setDensityFactor(float density_factor);
360float fwl_getDensityFactor();
361int fwl_hwnd_to_windex(void *hWnd);
362void fwl_setScreenDim1(int wi, int he, int windex);
363bool fwl_initialize_GL(void);
364//void fwl_setLastMouseEvent(int etype);
365int fwl_handle_aqua(const int mev, const unsigned int button, int x, int y);
366//APPLE int fwl_handle_aqua1(const int mev, const unsigned int button, int x, int y, int windex);
367int fwl_handle_mouse(int mev, int button, int x, int y, int windex);
368int fwl_handle_touch(int mev, unsigned int ID, int x, int y, int windex);
369void fwl_handle_gyro(float rx, float ry, float rz);
370void fwl_handle_accelerometer(float ax, float ay, float az);
371void fwl_handle_magnetic(float azimuth, float pitch, float roll);
372
373
374/* JAS - moving OSX front end into 2011 code workings - these may change. */
375void fwl_replaceWorldNeeded(char* str);
376int fwl_pollPromptForURL(); /* poll from front end / UI in loop */
377int fwl_pollPromptForFile();
378void fwl_setPromptForURL(int state);
379void fwl_setPromptForFile(int state);
380
381char *fwg_frontEndWantsFileName(void);
382int fv_display_initialize(void);
383void fwl_initializeRenderSceneUpdateScene(void);
384void fwl_setButDown(int button, int value);
385
386
387/* IS - moving from main/headers.h to here for use in front-ends (bin/main.c calls some of these) */
388int fwl_get_headlight();
389char* fwl_getNavModeStr();
390int fwl_getNavMode();
391int fwl_getLookatMode();
392int fwl_getCollision();
393void fwl_setCollision(int state);
394int fwl_getAnaglyphSide(int whichSide);
395int fwl_draw(); //use when frontend_handles_display_thread
396void fwl_tmpFileLocation(char *tmpFileLocation);
397void fwl_fontFileLocation(char *fontFileLocation);
398int fwl_set_ui_colorscheme(char *colorschemename);
399void fwl_set_ui_colors(char *fourhtmlcolors);
400void fwl_get_ui_color(char *use, float *rgb);
401char *fwl_get_ui_colorschemename();
402void fwl_next_ui_colorscheme();
403int fwl_get_ui_color_changed();
404int fwl_set_sbh_pin_option(char *optarg);
405int fwl_set_sbh_want_option(char *optarg);
406void fwl_setShadingStyle(int style);
407void fwl_set_sbh_pin(int sb, int mb);
408void fwl_get_sbh_pin(int *sb, int *mb);
409void fwl_set_target_fps(int target_fps);
410int fwl_get_target_fps();
411void fwl_set_sbh_wantMenubar(int want);
412int fwl_get_sbh_wantMenubar();
413void fwl_set_sbh_wantStatusbar(int want);
414int fwl_get_sbh_wantStatusbar();
415void fwl_set_modulation(int modulation);
416int fwl_get_modulation();
417
418
419int fwl_commandline(char *cmdline);
420int fwl_getShift();
421void fwl_setShift(int ishift);
422int fwl_getHover();
423void fwl_setHover(int hover);
424int fwl_getPedal();
425void fwl_setPedal(int pedal);
426int fwl_getCtrl();
427void fwl_set_touchtype(int ion);
428int fwl_get_touchtype();
429
430// a few function prototypes from around libfreewrl
431void fwl_setConsole_writePrimitive(int ibool);
432void statusbar_set_window_size(int width, int height);
433int statusbar_handle_mouse(int mev, int butnum, int mouseX, int mouseY);
434int getCursorStyle();
435void *fwl_frontenditem_dequeue();
436char* fwl_resitem_getURL(void *res);
437char* fwl_resitem_getTempDir(void *res);
438void fwl_resitem_setActualFile(void *res, char *fname);
439int fwl_resitem_getStatus(void *res);
440void fwl_resitem_setStatus(void *resp, int status);
441int fwl_resitem_getType(void *res);
442int fwl_resitem_getMediaType(void *res);
443void fwl_resitem_enqueuNextMulti(void *res);
444void fwl_resitem_setLocalPath(void *res, char* path);
445void fwl_resitem_enqueue(void *res);
446void fwl_resitem_setDownloadThread(void *res, void *thread);
447void *fwl_resitem_getDownloadThread(void *res);
448void *fwl_resitem_getGlobal(void *res);
449
450void fwl_init_DIS();
451void fwl_set_testset(int iset);
452int fwl_get_allow_DIS();
453void fwl_set_allow_DIS(int allow);
454void fwl_set_DISverbose(int verbose);
455void fwl_set_DISaddress(char* address);
456void fwl_set_DISport(int port);
457void fwl_set_DISsite(int site);
458void fwl_set_DISapplication(int app);
459
460int file2blob(void *res);
461#ifdef SSR_SERVER
462//SSR (Server-side rendering)
463void SSRserver_enqueue_request_and_wait(void *fwctx, void *request);
464#endif //SSR_SERVER
465
466#endif /* __LIBFREEWRL_API_H__ */
Initialization.
Definition libFreeWRL.h:75