1 /*
2  * Copyright (C) 1997-2005, R3vis Corporation.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
17  * USA, or visit http://www.gnu.org/copyleft/lgpl.html.
18  *
19  * Original Contributor:
20  *   Wes Bethel, R3vis Corporation, Marin County, California
21  * Additional Contributor(s):
22  *
23  * The OpenRM project is located at http://openrm.sourceforge.net/.
24  */
25 
26 /*
27  * $Id: rmpublic.h,v 1.22 2005/06/15 02:10:29 wes Exp $
28  *
29  * $Revision: 1.22 $
30  * Version: $Name: OpenRM-1-6-0-2-RC2 $
31  * $Log: rmpublic.h,v $
32  * Revision 1.22  2005/06/15 02:10:29  wes
33  * Added initial support for application-settable defaults. Apps
34  * will use rmSetEnum/rmGetEnum to set or get defaults that are RMenums.
35  * The first round of variables that can be set/get by apps are
36  * RMnode traversal masks assigned to new scene graph nodes by rmNodeNew.
37  *
38  * Revision 1.21  2005/06/12 21:22:56  wes
39  * Minor documentation changes.
40  *
41  * Revision 1.20  2005/05/28 16:26:34  wes
42  * Added pickEnable attribute to RMnodes, and function prototypes for
43  * rmNodeSetPickEnable and rmNodeGetPickEnable
44  *
45  * Revision 1.19  2005/05/16 01:08:33  wes
46  * Removed dead code.
47  *
48  * Revision 1.18  2005/03/19 17:19:48  wes
49  * Fixed typo on rmMarkerInternal2DDelete function prototype.
50  *
51  * Revision 1.17  2005/02/27 19:32:55  wes
52  * Added support for application supplied texture object IDs and display lists.
53  *
54  * Revision 1.16  2005/02/19 16:47:24  wes
55  * Distro sync and consolidation.
56  *
57  * Revision 1.15  2005/01/23 17:17:34  wes
58  * Copyright update to 2005.
59  * Updates to support use of extensions: multitexturing on all platforms,
60  * 3d texturing (for volume rendering support) on Win32
61  *
62  * Revision 1.14  2004/04/09 14:47:31  wes
63  * No significant changes.
64  *
65  * Revision 1.13  2004/03/30 14:13:05  wes
66  * Fixed declarations for a couple of routines.
67  *
68  * Revision 1.12  2004/03/10 01:48:50  wes
69  * Updated minor version to 1.5.2, added RM_INDEXED_QUAD_STRIP def.
70  *
71  * Revision 1.11  2004/01/17 04:06:42  wes
72  * Updated Copyright line for 2004.
73  *
74  * Revision 1.10  2003/12/06 03:26:04  wes
75  * Documentation tweaks to RMtime routines, updates to RMtime routines for
76  * Windows.
77  *
78  * Revision 1.9  2003/12/01 02:13:37  wes
79  * Additions to support constate-rate rendering on Unix and Win32.
80  *
81  * Revision 1.8  2003/11/22 00:53:52  wes
82  * Changes to support RMtextures being shared when assigned as scene parameters
83  * to properly implement instancing.
84  *
85  * Revision 1.7  2003/11/16 16:18:32  wes
86  * Added routine rmTimeSleep.
87  *
88  * Revision 1.6  2003/11/05 15:36:32  wes
89  * Added rmTime* family of routines to measure time.
90  *
91  * Revision 1.5  2003/06/20 01:40:56  wes
92  * Marked rmNodeSet/GetOpacity as being deprecated. These routines will be
93  * removed in v1.5.1.
94  *
95  * Revision 1.4  2003/04/05 14:14:40  wes
96  * Renamed rmMutexDestroy to rmMutexDelete.
97  *
98  * Revision 1.3  2003/02/02 17:50:55  wes
99  * Added bounding boxes to RMprimitives, as a supplement to node-level bboxes.
100  * The RMprimitive level bboxes are needed for the retained-mode CR work.
101  *
102  * Revision 1.2  2003/02/02 02:07:14  wes
103  * Updated copyright to 2003.
104  *
105  * Revision 1.1.1.1  2003/01/28 02:15:23  wes
106  * Manual rebuild of rm150 repository.
107  *
108  * Revision 1.15  2002/09/17 14:12:54  wes
109  * Added rmComponentManagerPrintStatus() - v1.4.3
110  *
111  * Revision 1.14  2002/08/19 00:54:26  wes
112  * Added API entries for new experiemental routines to get and set
113  * the size of the OpenRM component manager object pool.
114  *
115  * Revision 1.13  2002/08/19 00:29:34  wes
116  * Created external declarations for the rmStats* family of routines.
117  *
118  * Revision 1.12  2002/08/17 15:18:25  wes
119  * Added two new routines: rmNodeSetRenderOrderCallback() and
120  * rmInitComponentPoolSize().
121  *
122  * Revision 1.11  2002/06/17 01:11:06  wes
123  * Removed rmPickListDelete, rmSubtreeFrame and a couple of other
124  * routines that were not actually defined anywhere in the code.
125  * Added rmPickDelete definition.
126  *
127  * Revision 1.10  2002/04/30 19:42:33  wes
128  * Updated copyright dates.
129  *
130  * Revision 1.9  2001/07/15 17:21:47  wes
131  * Cleaned up prototype for rmTextPropsSetAttribs().
132  *
133  * Revision 1.8  2001/03/31 17:13:59  wes
134  * v1.4.0-alpha-2 checkin
135  *
136  * Revision 1.7  2000/12/05 03:13:11  wes
137  * Removed unused code, added rmFrame() [!].
138  *
139  * Revision 1.6  2000/12/03 23:20:22  wes
140  * Thread-safety mods.
141  *
142  * Revision 1.5  2000/10/03 11:41:14  wes
143  * Contribution from jdb - proto cleanups.
144  *
145  * Revision 1.4  2000/05/17 14:31:00  wes
146  * Fixed compile warnings on rmTextPropsSet/GetAttribs().
147  *
148  * Revision 1.3  2000/05/14 23:35:31  wes
149  * Minor updates to reflect doc changes.
150  *
151  * Revision 1.2  2000/04/20 16:30:23  wes
152  * Added copyright info.
153  *
154  * Revision 1.1.1.1  2000/02/28 21:29:40  wes
155  * OpenRM 1.2 Checkin
156  *
157  * Revision 1.1.1.1  2000/02/28 17:18:48  wes
158  * Initial entry - pre-RM120 release, source base for OpenRM 1.2.
159  *
160  */
161 
162 #ifndef _rmpublic_h
163 #define _rmpublic_h
164 
165 /* macros */
166 #define VCOPY(s,d)  	memcpy((void *)(d),(void *)(s),sizeof(RMvertex3D))
167 #define V3COPY(s,d) 	memcpy((void *)(d),(void *)(s),sizeof(RMvertex3D))
168 #define V2COPY(s,d) 	memcpy(d,s,sizeof(RMvertex2D))
169 #define V4COPY(s,d) 	memcpy(d,s,sizeof(RMcolor4D))
170 
171 #ifdef __cplusplus
172 extern "C" {
173 #endif
174 
175 /* rmarray.c: array routines [6] */
176 RM_EXPORT_API  RMenum       rmArrayAdd(RMarray *toModify, void *newData);
177 RM_EXPORT_API  RMenum       rmArrayDelete(RMarray **a);
178 RM_EXPORT_API  void        *rmArrayGet(const RMarray *toQuery, int indx);
179 RM_EXPORT_API  RMarray     *rmArrayNew(int initSize,int chunkSize,int elementSize);
180 RM_EXPORT_API  int          rmArrayNumItems(const RMarray *toQuery);
181 RM_EXPORT_API  void         rmArraySort(RMarray *, int (*compareFunc)(const void *a, const void *b));
182 
183 /* rmbitmap.c: bitmap routines [8] */
184 RM_EXPORT_API  RMbitmap    *rmBitmapNew (int width, int height);
185 RM_EXPORT_API  RMenum       rmBitmapCopy (RMbitmap *dst, const RMbitmap *src);
186 RM_EXPORT_API  RMbitmap    *rmBitmapDup (const RMbitmap *src);
187 RM_EXPORT_API  void         rmBitmapDelete (RMbitmap *toDelete);
188 RM_EXPORT_API  RMenum       rmBitmapSetPixelData (RMbitmap *toModify, const void *pixeldata);
189 RM_EXPORT_API  void        *rmBitmapGetPixelData (const RMbitmap *toQuery);
190 RM_EXPORT_API  RMenum       rmBitmapGetSize (const RMbitmap *toQuery, int *widthReturn, int *heightReturn, int *bytesWidthReturn);
191 RM_EXPORT_API  RMenum       rmBitmapSetBit (RMbitmap *toModify, int columnIndex, int rowIndex);
192 
193 /* rmcamera.c: 2D cameras [11] */
194 RM_EXPORT_API  RMcamera2D  *rmCamera2DNew (void);
195 RM_EXPORT_API  RMenum       rmCamera2DCopy (RMcamera2D *dst, const RMcamera2D *src);
196 RM_EXPORT_API  void         rmCamera2DDelete (RMcamera2D *toDelete);
197 RM_EXPORT_API  RMenum       rmDefaultCamera2D (RMcamera2D *c);
198 RM_EXPORT_API  RMenum       rmCamera2DSetAspectRatio (RMcamera2D *toModify, float newAspect);
199 RM_EXPORT_API  RMenum       rmCamera2DResetAspectRatio (RMcamera2D *toModify, const float *vp, int windowWidth, int windowWeight);
200 RM_EXPORT_API  RMenum       rmCamera2DGetAspectRatio (const RMcamera2D *toQuery, float *retValue);
201 RM_EXPORT_API  RMenum       rmCamera2DSetExtents (RMcamera2D *toModify, float xmin, float ymin, float xmax, float ymax);
202 RM_EXPORT_API  RMenum       rmCamera2DGetExtents (const RMcamera2D *toQuery, float *xmin, float *ymin, float *xmax, float *ymax);
203 RM_EXPORT_API  RMenum       rmCamera2DComputeViewMatrix (const RMcamera2D *c, RMmatrix *m);
204 RM_EXPORT_API  RMenum       rmCamera2DComputeViewFromGeometry (RMcamera2D *toModify, const RMnode *source);
205 
206 /* rmcamera.c: 3D cameras [29] */
207 RM_EXPORT_API  RMcamera3D  *rmCamera3DNew (void);
208 RM_EXPORT_API  RMenum       rmCamera3DCopy (RMcamera3D *dst, const RMcamera3D *src);
209 RM_EXPORT_API  void         rmCamera3DDelete (RMcamera3D *toDelete);
210 RM_EXPORT_API  RMenum       rmDefaultCamera3D (RMcamera3D *c);
211 RM_EXPORT_API  RMenum       rmCamera3DSetAspectRatio (RMcamera3D *toModify, const float newAspect);
212 RM_EXPORT_API  RMenum       rmCamera3DResetAspectRatio (RMcamera3D *toModify, const float *vp, int windowWidth, int windowHeight);
213 RM_EXPORT_API  float        rmCamera3DGetAspectRatio (const RMcamera3D *toQuery);
214 RM_EXPORT_API  RMenum       rmCamera3DSetProjection (RMcamera3D *toQuery, RMenum newVal);
215 RM_EXPORT_API  RMenum       rmCamera3DGetProjection (const RMcamera3D *toQuery);
216 RM_EXPORT_API  RMenum       rmCamera3DSetEye (RMcamera3D *toModify, const RMvertex3D *newEye);
217 RM_EXPORT_API  RMenum       rmCamera3DGetEye (const RMcamera3D *toQuery, RMvertex3D *returnEye);
218 RM_EXPORT_API  RMenum       rmCamera3DSetAt (RMcamera3D *toModify, const RMvertex3D *newAt);
219 RM_EXPORT_API  RMenum       rmCamera3DGetAt (const RMcamera3D *toQuery, RMvertex3D *returnAt);
220 RM_EXPORT_API  RMenum       rmCamera3DSetUpVector (RMcamera3D *toModify, const RMvertex3D *newUpVector);
221 RM_EXPORT_API  RMenum       rmCamera3DGetUpVector (const RMcamera3D *toQuery, RMvertex3D *returnUpVector);
222 RM_EXPORT_API  RMenum       rmCamera3DSetFOV (RMcamera3D *toQuery, float newFOV);
223 RM_EXPORT_API  float        rmCamera3DGetFOV (const RMcamera3D *toQuery);
224 RM_EXPORT_API  RMenum       rmCamera3DSetHither (RMcamera3D *toModify, float newHither);
225 RM_EXPORT_API  float        rmCamera3DGetHither (const RMcamera3D *toQuery);
226 RM_EXPORT_API  RMenum       rmCamera3DSetYon (RMcamera3D *toModify, float newYon);
227 RM_EXPORT_API  float        rmCamera3DGetYon (const RMcamera3D *toQuery);
228 RM_EXPORT_API  RMenum       rmCamera3DSetStereo (RMcamera3D *toModify, RMenum newBoolValue);
229 RM_EXPORT_API  RMenum       rmCamera3DGetStereo (const RMcamera3D *toQuery);
230 RM_EXPORT_API  RMenum       rmCamera3DSetEyeSeparation (RMcamera3D *toModify, float newval);
231 RM_EXPORT_API  float        rmCamera3DGetEyeSeparation (const RMcamera3D *toQuery);
232 RM_EXPORT_API  RMenum       rmCamera3DSetFocalDistance (RMcamera3D *toModify, float newval);
233 RM_EXPORT_API  float        rmCamera3DGetFocalDistance (const RMcamera3D *toQuery);
234 RM_EXPORT_API  RMenum       rmCamera3DComputeViewMatrix (const RMcamera3D *source, RMmatrix *viewReturn, RMmatrix *projectionReturn);
235 RM_EXPORT_API  RMenum       rmCamera3DComputeViewFromGeometry (RMcamera3D *toModify, const RMnode *source, int windowWidth, int windowHeight);
236 
237 /* rmclip.c: clipping plane routines [7] */
238 RM_EXPORT_API  RMclipPlane *rmClipPlaneNew (void);
239 RM_EXPORT_API  RMenum       rmClipPlaneDelete (RMclipPlane *toDelete);
240 RM_EXPORT_API  RMenum       rmClipPlaneSetPointNormal (RMclipPlane *toModify, const RMvertex3D *point, const RMvertex3D *normal);
241 RM_EXPORT_API  RMenum       rmClipPlaneGetPointNormal (const RMclipPlane *toQuery, RMvertex3D *point, RMvertex3D *normal);
242 RM_EXPORT_API  RMenum       rmClipPlaneEnable (RMclipPlane *toModify);
243 RM_EXPORT_API  RMenum       rmClipPlaneDisable (RMclipPlane *toModify);
244 RM_EXPORT_API  RMenum       rmClipPlaneIsEnabled (const RMclipPlane *toQuery);
245 
246 /* rmcmpmgr.c: the RM component manager [1] */
247 RM_EXPORT_API  void         rmComponentManagerPrintStatus(void);
248 
249 /* rmerror.c: errors, warnings and notices [4] */
250 RM_EXPORT_API  void         rmError (const char *msg);
251 RM_EXPORT_API  void         rmNotice (const char *msg);
252 RM_EXPORT_API  RMenum       rmNotifyLevel (RMenum level);
253 RM_EXPORT_API  void         rmSplash (const char *msg);
254 RM_EXPORT_API  void         rmWarning (const char *msg);
255 
256 /* rmdefaults.c: set/get routines for default values [2] */
257 RM_EXPORT_API  RMenum       rmGetEnum(RMenum queryTag, RMenum *returnValue);
258 RM_EXPORT_API  RMenum       rmSetEnum(RMenum setTag, RMenum newValue);
259 
260 /* rmfog.c: fogging routines [11] */
261 RM_EXPORT_API  RMfog       *rmFogNew (void);
262 RM_EXPORT_API  RMfog       *rmFogDup (const RMfog *toDuplicate);
263 RM_EXPORT_API  RMenum       rmFogDelete (RMfog *toDelete);
264 RM_EXPORT_API  RMenum       rmFogSetMode (RMfog *toModify, GLenum newMode);
265 RM_EXPORT_API  GLenum       rmFogGetMode (const RMfog *toQuery);
266 RM_EXPORT_API  RMenum       rmFogSetColor (RMfog *toModify, const RMcolor4D *newColor);
267 RM_EXPORT_API  RMenum       rmFogGetColor (const RMfog *toQuery, RMcolor4D *returnColor);
268 RM_EXPORT_API  RMenum       rmFogSetDensity (RMfog *toModify, GLfloat newDensity);
269 RM_EXPORT_API  GLfloat      rmFogGetDensity (const RMfog *toQuery);
270 RM_EXPORT_API  RMenum       rmFogSetStartEnd (RMfog *toModify, GLfloat newStart, GLfloat newEnd);
271 RM_EXPORT_API  RMenum       rmFogGetStartEnd (const RMfog *toModify, GLfloat *startReturn, GLfloat *endReturn);
272 
273 /* rmframe.c: rendering functions [2] */
274   /*RM_EXPORT_API  void rmSubtreeFrame (RMpipe *drawToPipe, RMnode *rootedTree); */
275 RM_EXPORT_API  void rmFrame (RMpipe *drawToPipe, RMnode *rootedTree);
276 
277 /* rmimage.c: image routines [20] */
278 RM_EXPORT_API  RMimage     *rmImageNew (int ndims, int width, int height, int depth, RMenum formatEnum, RMenum typeEnum, RMenum copyFlag);
279 RM_EXPORT_API  RMimage     *rmImageDup (const RMimage *toDuplicate);
280 RM_EXPORT_API  RMenum       rmImageDelete (RMimage *toDelete);
281 RM_EXPORT_API  RMenum       rmImageSetPixelData (RMimage *toModify, void *pixelData, RMenum copyEnum, void (*appFreeFunc)(void *));
282 RM_EXPORT_API  void        *rmImageGetPixelData (const RMimage *toQuery);
283 RM_EXPORT_API  unsigned int rmImageGetBytesPerScanline (const RMimage *toQuery);
284 RM_EXPORT_API  RMenum       rmImageGetCopyFlag (const RMimage *toQuery);
285 RM_EXPORT_API  RMenum       rmImageGetType (const RMimage *toQuery);
286 RM_EXPORT_API  RMenum       rmImageGetFormat (const RMimage *toQuery);
287 RM_EXPORT_API  RMenum       rmImageGetImageSize (const RMimage *toQuery, int *returnNDims, int *returnWidth, int *returnHeight, int *returnDepth, int *returnElements, int *returnBytesPerScanline);
288 RM_EXPORT_API  RMenum       rmImageSetPixelZoom (RMimage *toModify, float xzoom, float yzoom);
289 RM_EXPORT_API  RMenum       rmImageGetPixelZoom (const RMimage *toQuery, float *returnXZoom, float *returnYZoom);
290 RM_EXPORT_API  RMenum       rmImageSetVismap (RMimage *toModify, const RMvisMap *vismap);
291 RM_EXPORT_API  RMenum       rmImageGetVismap (const RMimage *toQuery, RMvisMap **vismapReturn);
292 RM_EXPORT_API  RMenum       rmImageMirror (RMimage *toMirror, RMenum mirrorAxisEnum);
293 RM_EXPORT_API  RMenum       rmImageResize (const RMimage *src, RMimage *dst, RMenum hardwareEnum, RMpipe *p);
294 RM_EXPORT_API  RMenum       rmImageSetScale (RMimage *toModify, float newScale);
295 RM_EXPORT_API  RMenum       rmImageGetScale (const RMimage *toQuery, float *returnScale);
296 RM_EXPORT_API  RMenum       rmImageSetBias (RMimage *toModify, float newBias);
297 RM_EXPORT_API  RMenum       rmImageGetBias (const RMimage *toQuery, float *returnBias);
298 
299 /* rmlites.c: light sources [18] */
300 RM_EXPORT_API  RMlight     *rmLightNew (void);
301 RM_EXPORT_API  void         rmLightDelete (RMlight *toDelete);
302 RM_EXPORT_API  RMenum       rmLightSetType (RMlight *toModify, RMenum newType);
303 RM_EXPORT_API  RMenum       rmLightGetType (const RMlight *toQuery);
304 RM_EXPORT_API  RMenum       rmLightSetXYZ (RMlight *toModify, const RMvertex3D *newXYZ);
305 RM_EXPORT_API  RMenum       rmLightGetXYZ (const RMlight *toQuery, RMvertex3D *retXYZ);
306 RM_EXPORT_API  RMenum       rmLightSetColor (RMlight *toModify, const RMcolor4D *newAmbientColor, const RMcolor4D *newDiffuseColor, const RMcolor4D *newSpecularColor);
307 RM_EXPORT_API  RMenum       rmLightGetColor (const RMlight *toQuery, RMcolor4D *retAmbientColor, RMcolor4D *retDiffuseColor, RMcolor4D *retSpecularColor);
308 RM_EXPORT_API  RMenum       rmLightSetAttenuation (RMlight *toModify, float newConstantAttenuation, float newLinearAttenuation, float newQuadraticAttenuation);
309 RM_EXPORT_API  RMenum       rmLightGetAttenuation (const RMlight *toQuery, float *retConstantAttenuation, float *retLinearAttenuation, float *retQuadraticAttenuation);
310 RM_EXPORT_API  RMenum       rmLightSetEnable (RMlight *toModify, RMenum newValue);
311 RM_EXPORT_API  RMenum       rmLightGetEnable (const RMlight *toQuery);
312 RM_EXPORT_API  RMenum       rmLightSetSpotDirection (RMlight *toModify, const RMvertex3D *newSpotDirection);
313 RM_EXPORT_API  RMenum       rmLightGetSpotDirection (const RMlight *toModify, RMvertex3D *retDirection);
314 RM_EXPORT_API  RMenum       rmLightSetSpotCutoff (RMlight *toModify, float newValue);
315 RM_EXPORT_API  RMenum       rmLightGetSpotCutoff (const RMlight *toQuery, float *retValue);
316 RM_EXPORT_API  RMenum       rmLightSetSpotExponent (RMlight *toModify, float newValue);
317 RM_EXPORT_API  RMenum       rmLightGetSpotExponent (const RMlight *toQuery, float *retValue);
318 
319 /* rmlites.c: light models [9] */
320 RM_EXPORT_API RMlightModel *rmLightModelNew (void);
321 RM_EXPORT_API  RMenum       rmLightModelDelete (RMlightModel *toDelete);
322 RM_EXPORT_API  RMenum       rmLightModelSetAmbient (RMlightModel *toModify, const RMcolor4D *newAmbientColor);
323 RM_EXPORT_API  RMenum       rmLightModelGetAmbient (const RMlightModel *toQuery, RMcolor4D *retAmbientColor);
324 RM_EXPORT_API  RMenum       rmLightModelSetTwoSided (RMlightModel *toModify, RMenum newValue);
325 RM_EXPORT_API  RMenum       rmLightModelGetTwoSided (const RMlightModel *toQuery);
326 RM_EXPORT_API  RMenum       rmLightModelSetLocalViewer (RMlightModel *toModify, RMenum newValue);
327 RM_EXPORT_API  RMenum       rmLightModelGetLocalViewer (const RMlightModel *toQuery);
328 RM_EXPORT_API  RMenum       rmDefaultLighting (RMnode *toModify);
329 
330 /* rmmalloc.c: creation and deletion functions [25] */
331 RM_EXPORT_API  float       *rmFloatNew (int num_floats);
332 RM_EXPORT_API  void         rmFloatDelete (float *f);
333 RM_EXPORT_API  RMvertex2D  *rmVertex2DNew (int n);
334 RM_EXPORT_API  void         rmVertex2DDelete (RMvertex2D *);
335 RM_EXPORT_API  RMvertex3D  *rmVertex3DNew (int n);
336 RM_EXPORT_API  void         rmVertex3DDelete (RMvertex3D *);
337 #define                     rmColor3DNew(a) ((RMcolor3D *)rmVertex3DNew((a)))
338 #define                     rmColor3DDelete(a) (rmVertex3DDelete((RMvertex3D *)(a)))
339 RM_EXPORT_API  RMcolor4D   *rmColor4DNew (int n);
340 RM_EXPORT_API  void         rmColor4DDelete (RMcolor4D *to_delete);
341 RM_EXPORT_API  RMinternalMarker2D *rmInternalMarker2DNew (int nverts, int begin_flag, RMvertex2D *dverts);
342 RM_EXPORT_API  void         rmInternalMarker2DDelete (RMinternalMarker2D *t);
343 #define                     rmInternalMarker2DGetNpts(n)	((n)->npts)
344 #define                     rmInternalMarker2DSetNpts(m,n)	((m)->npts = n)
345 #define                     rmInternalMarker2DGetVerts(n)	((n)->vlist)
346 #define                     rmInternalMarker2DSetBFlag(m,f)	((m)->gl_begin_flag = (f))
347 #define                     rmInternalMarker2DGetBFlag(m)	((m)->gl_begin_flag)
348 RM_EXPORT_API unsigned char **rmMalloc2DByteBuffer (int width, int height);
349 RM_EXPORT_API  void         rmFree2DByteBuffer (unsigned char **c);
350 RM_EXPORT_API  float      **rmMalloc2DFloatBuffer (int width, int height);
351 RM_EXPORT_API  void         rmFree2DFloatBuffer (float **f);
352 RM_EXPORT_API unsigned char ***rmMalloc3DByteBuffer (int width, int height, int depth);
353 RM_EXPORT_API  void         rmFree3DByteBuffer (unsigned char ***c);
354 RM_EXPORT_API  float     ***rmMalloc3DFloatBuffer (int width, int height, int depth);
355 RM_EXPORT_API  void         rmFree3DFloatBuffer (float ***c);
356 
357 /* rmmatrix.c: matrix routines [12] */
358 RM_EXPORT_API  RMmatrix    *rmMatrixNew (void);
359 RM_EXPORT_API  RMenum       rmMatrixCopy (RMmatrix *dst, const RMmatrix *src);
360 RM_EXPORT_API  RMenum       rmMatrixDelete (RMmatrix *toDelete);
361 RM_EXPORT_API  RMenum       rmMatrixIdentity (RMmatrix *toModify);
362 RM_EXPORT_API  RMenum       rmMatrixSetValue (RMmatrix *toModify, int row, int col, float newValue);
363 RM_EXPORT_API  float        rmMatrixGetValue (const RMmatrix *toQuery, int row, int col);
364 RM_EXPORT_API  RMenum       rmMatrixTranspose (const RMmatrix *src, RMmatrix *dst);
365 RM_EXPORT_API  RMenum       rmMatrixMultiply (const RMmatrix *srcA, const RMmatrix *srcB, RMmatrix *dst);
366 RM_EXPORT_API  RMenum       rmMatrixInverse (const RMmatrix *src, RMmatrix *dst);
367 RM_EXPORT_API  RMenum       rmPoint4MatrixTransform (const float *src, const RMmatrix *matrix, float *dst);
368 RM_EXPORT_API  RMenum       rmPointMatrixTransform (const RMvertex3D *src, const RMmatrix *m, RMvertex3D *dst);
369 RM_EXPORT_API  RMenum       rmPrintMatrix (const RMmatrix *toPrint);
370 
371 /* rmmatrix.c: min/max routines [3] */
372 RM_EXPORT_API  RMenum       rmPointMin (const float *input, int count, int vdims, int stride, RMvertex3D *minReturn);
373 RM_EXPORT_API  RMenum       rmPointMax (const float *input, int count, int vdims, int stride, RMvertex3D *maxReturn);
374 RM_EXPORT_API  RMenum       rmPointMinMax (const float *input, int count, int vdims, int stride, RMvertex3D *minReturn, RMvertex3D *maxReturn);
375 
376 /* rmmatrix.c: vector routines [10] */
377 RM_EXPORT_API  double       rmVertex3DMag (const RMvertex3D *v);
378 RM_EXPORT_API  RMenum       rmVertex3DSum (const RMvertex3D *a, const RMvertex3D *b, RMvertex3D *dst);
379 RM_EXPORT_API  RMenum       rmVertex3DDiff (const RMvertex3D *a, const RMvertex3D *b, RMvertex3D *dst);
380 RM_EXPORT_API  double       rmVertex3DDot (const RMvertex3D *a, const RMvertex3D *b);
381 RM_EXPORT_API  RMenum       rmVertex3DCross (RMvertex3D *p, RMvertex3D *r, RMvertex3D *result);
382 RM_EXPORT_API  RMenum       rmVertex3DNormalize (RMvertex3D *toNormalize);
383 RM_EXPORT_API  RMenum       rmVertex3DMagNormalize (RMvertex3D *toNormalize, double *magReturn);
384 RM_EXPORT_API  RMenum       rmVertex3DMidpoint (const RMvertex3D *a, const RMvertex3D *b, RMvertex3D *dst);
385 RM_EXPORT_API  RMenum       rmDCFromWC3 (const RMvertex3D *src, RMvertex3D *dst, int nPoints, const RMcamera3D *cam3d, const RMmatrix *model, float viewPort[4], int windowWidth, int windowHeight);
386 RM_EXPORT_API  RMenum       rmDCFromWC2 (const RMvertex2D *src, RMvertex2D *dst, int nPoints, const RMcamera2D *cam3d, const RMmatrix *model, float viewPort[4], int windowWidth, int windowHeight);
387 
388 /* rmnode.c: node functions [25] */
389 RM_EXPORT_API  RMnode      *rmRootNode (void);
390 RM_EXPORT_API  RMnode      *rmNodeNew (char *name, RMenum renderpassVdims, RMenum renderpassOpaque);
391 RM_EXPORT_API  RMenum       rmNodeDelete (RMnode *toDelete);
392 RM_EXPORT_API  RMenum       rmSubTreeDelete (RMnode *toDelete);
393 RM_EXPORT_API  RMenum       rmNodeSetName (RMnode *toModify, const char *name);
394 RM_EXPORT_API  char        *rmNodeGetName (const RMnode *toQuery);
395 RM_EXPORT_API  RMenum       rmNodeSetPickEnable (RMnode *toModify, RMenum newVal);
396 RM_EXPORT_API  RMenum       rmNodeSetTraverseEnable (RMnode *toModify, RMenum newval);
397 RM_EXPORT_API  RMenum       rmNodeGetTraverseEnable (const RMnode *toQuery);
398 RM_EXPORT_API  RMenum       rmNodeGetPickEnable (const RMnode *toQuery);
399 RM_EXPORT_API  RMenum       rmNodeAddChild (RMnode *parent, RMnode *child);
400 RM_EXPORT_API  RMenum       rmNodeRemoveChild (RMnode *parent, RMnode *child);
401 RM_EXPORT_API  RMenum       rmNodeRemoveAllChildren (RMnode *toModify);
402 RM_EXPORT_API  RMenum       rmNodeRemoveAllPrims (RMnode *toModify);
403 RM_EXPORT_API  int          rmNodeGetNumChildren (const RMnode *toQuery);
404 RM_EXPORT_API  int          rmNodeGetNumPrims (const RMnode *toQuery);
405 RM_EXPORT_API  RMnode      *rmNodeGetIthChild (const RMnode *toQuery, int indx);
406 RM_EXPORT_API  RMnode      *rmFindNamedNode (const RMnode *start, const char *name);
407 RM_EXPORT_API  void         rmSceneGraphWalk (const RMpipe *p, RMnode *r, void (*userfunc)(RMnode *node, const RMstate *s, void *clientData), void *clientData);
408 RM_EXPORT_API  void         rmPrintSceneGraph (const RMnode *root, RMenum printMode, const char *fileName);
409 RM_EXPORT_API  RMenum	    rmNodeMutexInit (RMnode *toModify, RMenum lockStatus);
410 RM_EXPORT_API  RMenum	    rmNodeMutexLock (RMnode *toModify);
411 RM_EXPORT_API  RMenum	    rmNodeMutexUnlock (RMnode *toModify);
412 RM_EXPORT_API  RMenum       rmNodeMutexTryLock (const RMnode *toQuery);
413 RM_EXPORT_API  RMmutex     *rmNodeGetMutex (const RMnode *toQuery);
414 RM_EXPORT_API  RMenum       rmNodeMutexDelete (RMnode *toModify);
415 
416 /* rmnode.c: node bounding box stuff [5] */
417 RM_EXPORT_API  RMenum       rmNodeSetBoundingBox (RMnode *toModify, const RMvertex3D *vMin, const RMvertex3D *vMax);
418 RM_EXPORT_API  RMenum       rmNodeGetBoundingBox (const RMnode *toQuery, RMvertex3D *vMinReturn, RMvertex3D *vMaxReturn);
419 RM_EXPORT_API  RMenum       rmNodeComputeCenterFromBoundingBox (RMnode *toModify);
420 RM_EXPORT_API  RMenum       rmNodeComputeBoundingBox (RMnode *toModify);
421 RM_EXPORT_API  RMenum       rmNodeUnionAllBoxes (RMnode *toModify);
422 
423 /* rmnode.c: node material properties [12] */
424 RM_EXPORT_API  RMenum       rmNodeSetAmbientColor (RMnode *toModify, const RMcolor4D *newColor);
425 RM_EXPORT_API  RMenum       rmNodeGetAmbientColor (const RMnode *toQuery, RMcolor4D *ambientReturn);
426 RM_EXPORT_API  RMenum       rmNodeSetDiffuseColor (RMnode *toModify, const RMcolor4D *newColor);
427 RM_EXPORT_API  RMenum       rmNodeGetDiffuseColor (const RMnode *toQuery, RMcolor4D *diffuseReturn);
428 RM_EXPORT_API  RMenum       rmNodeSetSpecularColor (RMnode *toModify, const RMcolor4D *newColor);
429 RM_EXPORT_API  RMenum       rmNodeGetSpecularColor (const RMnode *toQuery, RMcolor4D *diffuseReturn);
430 RM_EXPORT_API  RMenum       rmNodeSetSpecularExponent (RMnode *toModify, float newValue);
431 RM_EXPORT_API  RMenum       rmNodeGetSpecularExponent (const RMnode *toQuery, float *retValue);
432 RM_EXPORT_API  RMenum       rmNodeSetUnlitColor (RMnode *toModify, const RMcolor4D *newColor);
433 RM_EXPORT_API  RMenum       rmNodeGetUnlitColor (const RMnode *toQuery, RMcolor4D *retColor);
434 /* deprecated */ RM_EXPORT_API  RMenum rmNodeSetOpacity (RMnode *toModify, float newValue);
435 /* deprecated */ RM_EXPORT_API  RMenum rmNodeGetOpacity (const RMnode *toQuery, float *retValue);
436 
437 /* rmnode.c: drawing attributes [16] */
438 RM_EXPORT_API  RMenum       rmNodeSetNormalizeNormals (RMnode *toModify, RMenum newValue);
439 RM_EXPORT_API  RMenum       rmNodeGetNormalizeNormals (const RMnode *toQuery, RMenum *retValue);
440 RM_EXPORT_API  RMenum       rmNodeSetLineStyle (RMnode *toModify, RMenum newStyle);
441 RM_EXPORT_API  RMenum       rmNodeGetLineStyle (const RMnode *toQuery, RMenum *retStyle);
442 RM_EXPORT_API  RMenum       rmNodeSetLineWidth (RMnode *toModify, RMenum newWidthEnum);
443 RM_EXPORT_API  RMenum       rmNodeGetLineWidth (const RMnode *toQuery, RMenum *retWidthEnum);
444 RM_EXPORT_API  RMenum       rmNodeSetPointSize (RMnode *toModify, float newsize);
445 RM_EXPORT_API  RMenum       rmNodeGetPointSize (const RMnode *toQuery, float *sizeReturn);
446 RM_EXPORT_API  RMenum       rmNodeSetShader (RMnode *toModify, RMenum newShaderEnum);
447 RM_EXPORT_API  RMenum       rmNodeGetShader (const RMnode *toQuery, RMenum *retShaderEnum);
448 RM_EXPORT_API  RMenum       rmNodeSetPolygonDrawMode (RMnode *toModify, RMenum whichFace, RMenum newMode);
449 RM_EXPORT_API  RMenum       rmNodeGetPolygonDrawMode (const RMnode *toQuery, RMenum *returnFace, RMenum *returnMode);
450 RM_EXPORT_API  RMenum       rmNodeSetPolygonCullMode (RMnode *toModify, RMenum newMode);
451 RM_EXPORT_API  RMenum       rmNodeGetPolygonCullMode (const RMnode *toQuery, RMenum *modeReturn);
452 RM_EXPORT_API  RMenum       rmNodeSetFrontFace (RMnode *toModify, RMenum newMode);
453 RM_EXPORT_API  RMenum       rmNodeGetFrontFace (const RMnode *toQuery, RMenum *modeReturn);
454 
455 /* rmnode.c: traversal mask control [6] */
456 RM_EXPORT_API  RMenum       rmNodeSetTraversalMaskOpacity (RMnode *toModify,RMenum opacityTraversalMask);
457 RM_EXPORT_API  RMenum       rmNodeGetTraversalMaskOpacity (const RMnode *toQuery, RMenum *opacityTraversalMaskReturn);
458 RM_EXPORT_API  RMenum       rmNodeSetTraversalMaskDims (RMnode *n, RMenum dimsTraversalMask);
459 RM_EXPORT_API  RMenum       rmNodeGetTraversalMaskDims (RMnode *n, RMenum *dimsTraversalMaskReturn);
460 RM_EXPORT_API  RMenum       rmNodeSetTraversalMaskChannel(RMnode *toModify, RMenum newval);
461 RM_EXPORT_API  RMenum       rmNodeGetTraversalMaskChannel(const RMnode *toQuery, RMenum *channelTraversalMaskReturn);
462 
463 /* rmnode.c: node transformations [17] */
464 RM_EXPORT_API  RMenum       rmNodeSetTransformMode (RMnode *toModify, RMenum newMode);
465 RM_EXPORT_API  RMenum       rmNodeGetTransformMode (const RMnode *toQuery);
466 RM_EXPORT_API  RMenum       rmNodeSetPreMatrix (RMnode *toModify, const RMmatrix *newMatrix);
467 RM_EXPORT_API  RMenum       rmNodeGetPreMatrix (const RMnode *toQuery, RMmatrix *matrixReturn);
468 RM_EXPORT_API  RMenum       rmNodeSetCenter (RMnode *toModify, const RMvertex3D *newVertex);
469 RM_EXPORT_API  RMenum       rmNodeGetCenter (const RMnode *toQuery, RMvertex3D *retVector);
470 RM_EXPORT_API  RMenum       rmNodeSetScaleMatrix (RMnode *toModify, const RMmatrix *newMatrix);
471 RM_EXPORT_API  RMenum       rmNodeGetScaleMatrix (const RMnode *toQuery, RMmatrix *matrixReturn);
472 RM_EXPORT_API  RMenum       rmNodeSetRotateMatrix (RMnode *toModify, const RMmatrix *newMatrix);
473 RM_EXPORT_API  RMenum       rmNodeGetRotateMatrix (const RMnode *toQuery, RMmatrix *matrixReturn);
474 RM_EXPORT_API  RMenum       rmNodeSetPostRotateScaleMatrix (RMnode *toModify, const RMmatrix *newMatrix);
475 RM_EXPORT_API  RMenum       rmNodeGetPostRotateScaleMatrix (const RMnode *toQuery, RMmatrix *matrixReturn);
476 RM_EXPORT_API  RMenum       rmNodeSetTranslateVector (RMnode *toModify, const RMvertex3D *newVector);
477 RM_EXPORT_API  RMenum       rmNodeGetTranslateVector (const RMnode *toQuery, RMvertex3D *returnVector);
478 RM_EXPORT_API  RMenum       rmNodeSetPostMatrix (RMnode *toModify, const RMmatrix *newMatrix);
479 RM_EXPORT_API  RMenum       rmNodeGetPostMatrix (const RMnode *toQuery, RMmatrix *matrixReturn);
480 RM_EXPORT_API  RMenum       rmNodeGetCompositeModelMatrix (RMnode *toQuery, RMmatrix *transformReturn);
481 
482 /* rmnode.c: node callbacks [4] */
483 RM_EXPORT_API  RMenum       rmNodeSetSwitchCallback (RMnode *toModify, int (*appFunc)(const RMnode *, const RMstate *));
484 RM_EXPORT_API  RMenum       rmNodeSetPreTraversalCallback (RMnode *toModify, RMenum whichPass, int (*appFunc)(const RMnode *, const RMstate *));
485 RM_EXPORT_API  RMenum       rmNodeSetPostTraversalCallback (RMnode *toModify, RMenum whichPass, int (*appFunc)(const RMnode *, const RMstate *));
486 RM_EXPORT_API  RMenum       rmNodeSetRenderOrderCallback (RMnode *toModify, int (*appFunc)(const RMnode *, const RMstate *, int *orderIndices, int nChildren));
487 
488 /* rmnode.c: default view frustum callback */
489 RM_EXPORT_API int           rmNodeFrustumCullCallback(const RMnode *n, const RMstate *s);
490 
491 /* rminit.c: init, epilogue [2] */
492 RM_EXPORT_API  void         rmInit (void);
493 RM_EXPORT_API  void         rmFinish (void);
494 
495 /* rmpick.c: picking [7] */
496 RM_EXPORT_API  RMpick      *rmFramePick (RMpipe *renderPipe, RMnode *subTree, int xpick, int ypick);
497 RM_EXPORT_API  int          rmFramePickList (RMpipe *renderPipe, RMnode *subTree, int xpick, int ypick, RMpick **listReturn);
498 RM_EXPORT_API  RMenum       rmPickDelete (RMpick *toDelete);
499 RM_EXPORT_API  RMnode      *rmPickedNode (const RMpick *toQuery);
500 RM_EXPORT_API  int          rmPickedPrimitive (const RMpick *toQuery);
501 RM_EXPORT_API  char        *rmPickedNodeName (const RMpick *toQuery);
502 RM_EXPORT_API  float        rmPickedPrimitiveZval (const RMpick *toQuery);
503 
504 /* rmprim.c: primitives [32] */
505 RM_EXPORT_API  RMprimitive *rmPrimitiveNew (RMenum primType);
506 RM_EXPORT_API  void         rmPrimitiveDelete (RMprimitive *toDelete);
507 RM_EXPORT_API  RMenum       rmPrimitiveSetRenderFunc (RMprimitive *toModify, void (*drawFunc) OGLPRIMPARMLIST() );
508 RM_EXPORT_API  void        *rmPrimitiveGetRenderFunc (const RMprimitive *toQuery);
509 RM_EXPORT_API  RMenum       rmPrimitiveSetModelFlag (RMprimitive *toModify, int newVal);
510 RM_EXPORT_API  int          rmPrimitiveGetModelFlag (const RMprimitive *toQuery);
511 RM_EXPORT_API  RMenum       rmPrimitiveSetBoundingBox(RMprimitive *p, const RMvertex3D *bmin, const RMvertex3D *bmax);
512 RM_EXPORT_API  RMenum       rmPrimitiveGetBoundingBox(const RMprimitive *p, RMvertex3D *bmin, RMvertex3D *bmax);
513 RM_EXPORT_API  RMenum       rmPrimitiveComputeBoundingBox (RMprimitive *p);
514 
515 RM_EXPORT_API  RMenum       rmPrimitiveGetType (const RMprimitive *toQuery);
516 RM_EXPORT_API  RMenum       rmPrimitiveSetClientData (RMprimitive *toModify, void *clientData, void (*cdFreeFunc)(RMprimitive *, void *));
517 RM_EXPORT_API  void        *rmPrimitiveGetClientData (const RMprimitive *toQuery);
518 RM_EXPORT_API  RMenum       rmPrimitiveSetAppDisplayList(RMprimitive *toModify, GLuint displayListID);
519 RM_EXPORT_API  RMenum       rmPrimitiveSetVertex2D (RMprimitive *toModify, int nVertices, RMvertex2D *vertexData, RMenum copyEnum, void (*appFreeFunc)(void *));
520 RM_EXPORT_API  RMenum       rmPrimitiveSetVertex3D (RMprimitive *toModify, int nVertices, RMvertex3D *vertexData, RMenum copyEnum, void (*appFreeFunc)(void *));
521 RM_EXPORT_API  RMenum       rmPrimitiveSetColor3D (RMprimitive *toModify, int nColors, RMcolor3D *colorData, RMenum copyEnum, void (*appFreeFunc)(void *));
522 RM_EXPORT_API  RMenum       rmPrimitiveSetColor4D (RMprimitive *toModify, int nColors, RMcolor4D *colorData, RMenum copyEnum, void (*appFreeFunc)(void *));
523 RM_EXPORT_API  RMenum       rmPrimitiveSetRadii (RMprimitive *toModify, int nRadii, float *radii, RMenum copyEnum, void (*freeFunc)(void *));
524 RM_EXPORT_API  RMenum       rmPrimitiveSetNormal3D (RMprimitive *toModify, int nNormals, RMvertex3D *normalsData, RMenum copyEnum, void (*freeFunc)(void *));
525 RM_EXPORT_API  RMenum       rmPrimitiveSetTexcoord1D (RMprimitive *toModify, int nTexCoords, float *texCoordData, RMenum copyEnum, void (*appFreeFunc)(void *));
526 RM_EXPORT_API  RMenum       rmPrimitiveSetTexcoord2D (RMprimitive *toModify, int nTexCoords, RMvertex2D *texCoordData, RMenum copyEnum, void (*appFreeFunc)(void *));
527 RM_EXPORT_API  RMenum       rmPrimitiveSetTexcoord3D (RMprimitive *toModify, int nTexcoords, RMvertex3D *texCoordData, RMenum copyEnum, void (*appFreeFunc)(void *));
528 RM_EXPORT_API  RMenum       rmPrimitiveSetTexcoord2D (RMprimitive *toModify, int nTexCoords, RMvertex2D *texCoordData, RMenum copyEnum, void (*appFreeFunc)(void *));
529 RM_EXPORT_API  RMenum       rmPrimitiveSetTexcoord3D (RMprimitive *toModify, int nTexcoords, RMvertex3D *texCoordData, RMenum copyEnum, void (*appFreeFunc)(void *));
530 RM_EXPORT_API  RMenum       rmPrimitiveSetMultiTexcoord1D (RMprimitive *toModify, int nTexCoords, float *texCoordData, RMenum copyEnum, void (*appFreeFunc)(void *), int textureUnitIndx);
531 RM_EXPORT_API  RMenum       rmPrimitiveSetMultiTexcoord2D (RMprimitive *toModify, int nTexCoords, RMvertex2D *texCoordData, RMenum copyEnum, void (*appFreeFunc)(void *), int textureUnitIndx);
532 RM_EXPORT_API  RMenum       rmPrimitiveSetMultiTexcoord3D (RMprimitive *toModify, int nTexcoords, RMvertex3D *texCoordData, RMenum copyEnum, void (*appFreeFunc)(void *), int textureUnitIndx);
533 RM_EXPORT_API  RMenum       rmPrimitiveSetIndices (RMprimitive *toModify, int numIndices, int *indicesArray, RMenum copyEnum, void (*appFreeFunc)(void *));
534 RM_EXPORT_API  RMenum       rmPrimitiveSetSprites (RMprimitive *toModify, int nSprites, RMimage **spriteArray);
535 RM_EXPORT_API  RMenum       rmPrimitiveSetBitmaps (RMprimitive *toModify, int nBitmaps, RMbitmap **bmapArray);
536 RM_EXPORT_API  RMenum       rmPrimitiveSetQmeshDims (RMprimitive *toModify, int uSize, int vSize);
537 RM_EXPORT_API  RMenum       rmPrimitiveSetOmeshDims (RMprimitive *toModify, int isize, int jsize, int ksize);
538 RM_EXPORT_API  RMenum       rmPrimitiveSetOmeshMinMaxGrid (RMprimitive *toModify, const RMvertex3D *gridMin, const RMvertex3D *gridMax);
539 RM_EXPORT_API  RMenum       rmPrimitiveSetMarkerScale (RMprimitive *toModify, int npts, float *scales, RMenum copyEnum, void (*appFreeFunc)(void *));
540 RM_EXPORT_API  RMenum       rmPrimitiveSetMarkerPrims (RMprimitive *toModify, int nMarkerPrims, RMinternalMarker2D **mArray);
541 RM_EXPORT_API  RMenum       rmPrimitiveSetEllipse2DRotate (RMprimitive *toModify, int nVals, float *rotationValues, RMenum copyEnum, void (*appFreeFunc)(void *));
542 RM_EXPORT_API  RMenum       rmPrimitiveSetText (RMprimitive *toModify, int nStrings, char *strings[]);
543 RM_EXPORT_API  RMenum       rmPrimitiveSetDisplayListEnable (RMprimitive *toModify, RMenum newMode);
544 
545 RM_EXPORT_API  RMenum       rmNodeAddPrimitive (RMnode *addTo,  RMprimitive *src);
546 RM_EXPORT_API  RMprimitive *rmNodeGetPrimitive (const RMnode *toQuery, int indx);
547 RM_EXPORT_API  RMenum       rmNodeSetClientData (RMnode *toModify, void *clientData, void (*cdFreeFunc)(RMnode *,void *));
548 RM_EXPORT_API  void        *rmNodeGetClientData (const RMnode *toQuery);
549 
550 /* rmrstate.c: render state interface [13] */
551 RM_EXPORT_API  RMstate     *rmStateNew (void);
552 RM_EXPORT_API  void         rmStateDelete (RMstate *toDelete);
553 RM_EXPORT_API  void         rmStateCopy (const RMstate *src, RMstate *dst);
554 RM_EXPORT_API  const RMmatrix *rmStateGetModelViewMatrix (const RMstate *toQuery);
555 RM_EXPORT_API  const RMmatrix *rmStateGetProjectionMatrix (const RMstate *toQuery);
556 RM_EXPORT_API  RMenum       rmStateGetShader(const RMstate *toQuery);
557 RM_EXPORT_API  RMenum       rmStateGetPolygonDrawMode(const RMstate *toQuery, RMenum *whichFaceReturn, RMenum *drawModeReturn);
558 RM_EXPORT_API  RMenum       rmStateGetPolygonCullMode(const RMstate *toQuery, RMenum *cullModeReturn);
559 RM_EXPORT_API  RMenum       rmStateGetFrontFace(const RMstate *toQuery, RMenum *frontFaceReturn);
560 RM_EXPORT_API  RMenum       rmStateGetLineWidth(const RMstate *toQuery, RMenum *lineWidthReturn);
561 RM_EXPORT_API  RMenum       rmStateGetLineStyle(const RMstate *toQuery, RMenum *lineStyleReturn);
562 RM_EXPORT_API  RMenum       rmStateGetPointSize(const RMstate *toQuery, float *sizeReturn);
563 RM_EXPORT_API  int          rmStateGetFrameNumber(const RMstate *toQuery);
564 
565 /* rmscene.c: node scene parameters [30] */
566 RM_EXPORT_API  RMenum       rmNodeSetSceneBackgroundColor (RMnode *toModify, const RMcolor4D *newColor);
567 RM_EXPORT_API  RMenum       rmNodeGetSceneBackgroundColor (const RMnode *toQuery, RMcolor4D *returnColor);
568 RM_EXPORT_API  RMenum       rmNodeSetSceneBackgroundImage (RMnode *toModify, const RMimage *newImageTile);
569 RM_EXPORT_API  RMenum       rmNodeGetSceneBackgroundImage (const RMnode *toQuery, RMimage **returnImageTile);
570 RM_EXPORT_API  RMenum       rmNodeSetSceneCamera2D (RMnode *toModify, const RMcamera2D *newCamera);
571 RM_EXPORT_API  RMenum       rmNodeGetSceneCamera2D (const RMnode *toQuery, RMcamera2D **returnCamera);
572 RM_EXPORT_API  RMenum       rmNodeSetSceneCamera3D (RMnode *toModify, const RMcamera3D *newCamera);
573 RM_EXPORT_API  RMenum       rmNodeGetSceneCamera3D (const RMnode *toQuery, RMcamera3D **returnCamera);
574 RM_EXPORT_API  RMenum       rmNodeSetSceneClipPlane (RMnode *toModify, RMenum clipPlaneEnum, const RMclipPlane *newClipPlane);
575 RM_EXPORT_API  RMenum       rmNodeGetSceneClipPlane (const RMnode *toQuery, RMenum clipPlaneEnum, RMclipPlane **returnClipPlaneCopy);
576 RM_EXPORT_API  RMenum       rmNodeSetSceneDepthImage (RMnode *toModify, const RMimage *newDepthImage);
577 RM_EXPORT_API  RMenum       rmNodeGetSceneDepthImage (const RMnode *toQuery, RMimage **returnDepthImage);
578 RM_EXPORT_API  RMenum       rmNodeSetSceneDepthValue (RMnode *toModify, const float *newDepthValue);
579 RM_EXPORT_API  RMenum       rmNodeGetSceneDepthValue (const RMnode *toQuery, float *returnDepthValue);
580 RM_EXPORT_API  RMenum       rmNodeSetSceneFog (RMnode *toModify, const RMfog *newFog);
581 RM_EXPORT_API  RMenum       rmNodeGetSceneFog (const RMnode *toQuery, RMfog **returnFog);
582 RM_EXPORT_API  RMenum       rmNodeSetSceneLight (RMnode *toModify, RMenum whichLightEnum, const RMlight *newLight);
583 RM_EXPORT_API  RMenum       rmNodeGetSceneLight (const RMnode *toQuery, RMenum whichLightEnum, RMlight **returnLightCopy);
584 RM_EXPORT_API  RMenum       rmNodeSetSceneLightModel (RMnode *toQuery, const RMlightModel *newLightModel);
585 RM_EXPORT_API  RMenum       rmNodeGetSceneLightModel (const RMnode *toQuery, RMlightModel **retLightModel);
586 RM_EXPORT_API  RMenum       rmNodeGetSceneMultiTexture (const RMnode *n, int textureUnitIndx, RMtexture **t);
587 RM_EXPORT_API  RMenum       rmNodeSetSceneMultiTexture (RMnode *n, RMtexture *t, int textureUnit);
588 
589 RM_EXPORT_API  RMtextProps *rmTextPropsNew (void);
590 RM_EXPORT_API  RMenum       rmTextPropsDelete (RMtextProps *t);
591 RM_EXPORT_API  RMenum       rmNodeSetSceneTextProps (RMnode *toModify, const RMtextProps *newTextProps);
592 RM_EXPORT_API  RMenum       rmNodeGetSceneTextProps (const RMnode *toQuery, RMtextProps **returnTextProps);
593 RM_EXPORT_API  RMenum       rmNodeSetSceneTexture (RMnode *toModify, RMtexture *newTexture);
594 RM_EXPORT_API  RMenum       rmNodeGetSceneTexture (const RMnode *toQuery, RMtexture **returnTexture);
595 RM_EXPORT_API  RMenum       rmNodeSetSceneViewport (RMnode *toModify, const float *newViewport);
596 RM_EXPORT_API  RMenum       rmNodeGetSceneViewport (const RMnode *toQuery, float **returnViewport);
597 
598 /* rmstats.c: scene graph statistics [4] */
599 RM_EXPORT_API  RMenum      rmStatsComputeDemography (RMnode *r);
600 RM_EXPORT_API  RMenum      rmStatsPrint(void);
601 RM_EXPORT_API  RMenum      rmStatsEndTime(void);
602 RM_EXPORT_API  RMenum      rmStatsStartTime(void);
603 
604 
605 /* rmtext.c: text properties [2] */
606 RM_EXPORT_API  RMenum      rmTextPropsSetAttribs (RMtextProps *toModify, int fontEnum, int sizeEnum, RMenum boldEnum, RMenum italicEnum, RMenum hJustifyEnum, RMenum vJustifyEnum);
607 RM_EXPORT_API  RMenum      rmTextPropsGetAttribs (const RMtextProps *toQuery, int *fontEnumReturn, int *sizeEnumReturn, RMenum *boldEnumReturn, RMenum *italicEnumReturn, RMenum *hJustifyReturn, RMenum *vJustifyReturn);
608 /* rmxtext.c: text computation  [1] */
609 RM_EXPORT_API  RMenum      rmTextGetExtents (const char *string, int fontEnum, int sizeEnum, RMenum boldEnum, RMenum italicEnum, int *widthReturn, int *heightReturn, const RMpipe *renderPipe);
610 
611 /* rmtime.c: time routines [7] */
612 RM_EXPORT_API  RMtime     *rmTimeNew(void);
613 RM_EXPORT_API  RMenum      rmTimeDelete(RMtime *toDelete);
614 RM_EXPORT_API  RMenum      rmTimeCurrent(RMtime *returnVal);
615 RM_EXPORT_API  RMenum      rmTimeDifference(const RMtime *startTime, const RMtime *endTime, RMtime *diffTime);
616 RM_EXPORT_API  double      rmTimeDifferenceMS(const RMtime *startTime, const RMtime *endTime);
617 RM_EXPORT_API  RMenum      rmTimeSet(RMtime *toModify, long secs, long usecs);
618 RM_EXPORT_API  RMenum      rmTimeGet(const RMtime *toQuery, long *returnSecs, long *returnUSecs);
619 RM_EXPORT_API  RMenum      rmTimeSleep(const RMtime *tSleep);
620 RM_EXPORT_API  RMenum      rmTimeEncodeMS(RMtime *result, double ms);
621 RM_EXPORT_API  RMenum      rmTimeDecodeMS(const RMtime *src, double *resultMS);
622 
623 /* rmtxture.c: texturing routines [14] */
624 RM_EXPORT_API  RMtexture  *rmTextureNew (int ntdims);
625 RM_EXPORT_API  RMenum      rmTextureDelete (RMtexture *toDelete, RMenum deleteImagesBool);
626 RM_EXPORT_API  RMenum      rmTextureSetImages (RMtexture *toModify, RMimage **imageArray, int nimages, int borderWidth);
627 RM_EXPORT_API  RMenum      rmTextureGetImages (const RMtexture *toQuery, RMimage ***imageArray, int *nimages, int *borderWidth);
628 RM_EXPORT_API  RMenum      rmTextureSetFilterMode (RMtexture *toModify, GLenum minMode, GLenum magMode);
629 RM_EXPORT_API  RMenum      rmTextureGetFilterMode (const RMtexture *toQuery, GLenum *minModeReturn, GLenum *magModeReturn);
630 RM_EXPORT_API  RMenum      rmTextureSetWrapMode (RMtexture *toModify, GLenum wrapMode);
631 RM_EXPORT_API  RMenum      rmTextureGetWrapMode (const RMtexture *toQuery, GLenum *wrapModeReturn);
632 RM_EXPORT_API  RMenum      rmTextureSetEnv (RMtexture *toModify, GLenum envMode, const RMcolor4D *blendColor);
633 RM_EXPORT_API  RMenum      rmTextureGetEnv (const RMtexture *toQuery, GLenum *envModeReturn, RMcolor4D *blendColorReturn);
634 RM_EXPORT_API  RMenum      rmTextureSetGLTexelFormat (RMtexture *toModify, GLenum internalTexelFormat);
635 RM_EXPORT_API  RMenum      rmTextureGetGLTexelFormat (const RMtexture *toQuery, GLenum *returnTexelFormat);
636 RM_EXPORT_API  RMenum      rmTextureGetTextureID (const RMtexture *toQuery, GLuint *returnTextureID);
637 RM_EXPORT_API  RMenum      rmTextureSetTextureID (RMtexture *toModify, GLuint *textureID);
638 
639 /* rmutil.c: various utilities [7] */
640 RM_EXPORT_API  int         rmNearestPowerOfTwo (int n);
641 RM_EXPORT_API  int         rmIntMagnitude (int m);
642 RM_EXPORT_API  void        rmHSVtoRGB (float hue, float saturation, float value, float *redReturn, float *greenReturn, float *blueReturn);
643 RM_EXPORT_API  void        rmRGBtoHSV (float red, float green, float blue, float *hueReturn, float *saturationReturn, float *valueReturn);
644 RM_EXPORT_API  RMenum      rmUnionBoundingBoxes (const RMvertex3D *s1min, const RMvertex3D *s1max, const RMvertex3D *s2min, const RMvertex3D *s2max, RMvertex3D *dmin, RMvertex3D *dmax);
645 RM_EXPORT_API  int         rmGLGetError (const char *string);
646 RM_EXPORT_API  int         rmImageBuildMipmaps (const RMimage *src, RMimage ***mapsReturn, RMenum hardwareEnum, RMpipe *hwPipe);
647 
648 /* rmx.c or rmw.c: buffer swap [1] */
649 RM_EXPORT_API  void rmSwapBuffers (RMpipe *p);
650 
651 #ifdef __cplusplus
652 }
653 #endif
654 
655 #endif /* _rmpublic_h */
656 
657 /* EOF */
658