3
// Copyright 1997 - 2001, Paul C. Gregory
5
// Contact: pgregory@aqsis.com
7
// This library is free software; you can redistribute it and/or
8
// modify it under the terms of the GNU Lesser General Public
9
// License as published by the Free Software Foundation; either
10
// version 2.1 of the License, or (at your option) any later version.
12
// This library is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
// General Public License for more details.
17
// You should have received a copy of the GNU General Public
18
// License along with this library; if not, write to the Free Software
19
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
* \brief Libri2rib output base class
23
* \author Lionel J. Lacour (intuition01@online.fr)
26
#ifndef RI2RIB_OUTPUT_H
27
#define RI2RIB_OUTPUT_H 1
35
#include "dictionary.h"
37
#include "outstream.h"
40
START_NAMESPACE( libri2rib )
46
enum EqFunctions{ Declare, FrameBegin, FrameEnd, WorldBegin,
47
WorldEnd, ObjectBegin, ObjectEnd, ObjectInstance,
48
AttributeBegin, AttributeEnd, TransformBegin, TransformEnd,
49
SolidBegin, SolidEnd, MotionBegin, MotionEnd,
50
Format, FrameAspectRatio, ScreenWindow, CropWindow,
51
Projection, Clipping, ClippingPlane, DepthOfField,
52
Shutter, PixelVariance, PixelSamples, PixelFilter,
53
Exposure, Imager, Quantize, Display,
54
Hider, ColorSamples, RelativeDetail, Option,
55
Color, Opacity, TextureCoordinates, LightSource,
56
AreaLightSource, Illuminate, Surface, Atmosphere,
57
Interior, Exterior, ShadingRate, ShadingInterpolation,
58
Matte, Bound, Detail, DetailRange,
59
GeometricApproximation, Basis, TrimCurve, Orientation,
60
ReverseOrientation, Sides, Displacement, Identity,
61
Transform, ConcatTransform, Perspective, Translate,
62
Rotate, Scale, Skew, Deformation,
63
CoordinateSystem, CoordSysTransform, Attribute, Polygon,
64
GeneralPolygon, PointsPolygons, PointsGeneralPolygons, Patch,
65
PatchMesh, NuPatch, Sphere, Cone,
66
Cylinder, Hyperboloid, Paraboloid, Disk,
67
Torus, Blobby, Points, Curves,
68
SubdivisionMesh, Procedural, Geometry, MakeTexture,
69
MakeBump, MakeLatLongEnvironment, MakeCubeFaceEnvironment, MakeShadow,
70
ArchiveRecord, ReadArchive, ErrorHandler, LAST_Function };
71
// block types (used to check context nesting)
73
B_Ri, B_Frame, B_World, B_Attribute, B_Transform, B_Solid, B_Object,
77
CqDictionary m_Dictionary;
88
std::stack<SqSteps> m_Steps;
90
std::vector<EqBlocks> m_nesting;
91
bool beginNesting(EqBlocks type);
92
bool endNesting(EqBlocks type);
93
bool nestingContains(EqBlocks type) const;
98
void printPL ( RtInt n, RtToken tokens[], RtPointer parms[],
99
RtInt vertex = 1, RtInt varying = 1, RtInt uniform = 1, RtInt facevarying = 1 );
100
std::string getFilterFuncName ( RtFilterFunc, const char * ) const;
102
CqOutput( CqOutput const & )
104
CqOutput const &operator=( CqOutput const & )
110
SqOptions::EqIndentation m_Indentation;
116
virtual void printHeader()
118
virtual void printRequest( const char *, EqFunctions )
120
virtual void printInteger( const RtInt )
122
virtual void printFloat( const RtFloat )
124
virtual void printString( std::string & )
126
virtual void printSpace()
128
virtual void printEOL()
131
virtual void printArray ( RtInt n, RtInt *p )
133
virtual void printArray ( RtInt n, RtFloat *p )
135
virtual void printArray ( RtInt n, RtToken *p )
137
virtual void printToken ( RtToken t )
139
virtual void printCharP ( const char *c )
141
virtual void print( const char *c )
145
CqOutput( const char *, int fdesc,
146
SqOptions::EqCompression,
147
SqOptions::EqIndentation, TqInt isize );
150
RtToken RiDeclare( const char *name, const char *declaration );
152
/* RenderMan State machine */
153
RtVoid RiBegin( RtToken name );
156
RtVoid RiFrameBegin( RtInt frame );
157
RtVoid RiFrameEnd( );
159
RtVoid RiWorldBegin( );
160
RtVoid RiWorldEnd( );
162
RtObjectHandle RiObjectBegin( );
163
RtVoid RiObjectEnd( );
164
RtVoid RiObjectInstance( RtObjectHandle handle );
166
RtVoid RiAttributeBegin( );
167
RtVoid RiAttributeEnd( );
169
RtVoid RiTransformBegin( );
170
RtVoid RiTransformEnd( );
172
RtVoid RiSolidBegin( RtToken operation );
173
RtVoid RiSolidEnd( );
175
RtVoid RiMotionBeginV( RtInt n, RtFloat times[] );
176
RtVoid RiMotionEnd( );
180
RtVoid RiFormat ( RtInt xres, RtInt yres, RtFloat aspect );
181
RtVoid RiFrameAspectRatio ( RtFloat aspect );
182
RtVoid RiScreenWindow ( RtFloat left, RtFloat right, RtFloat bot, RtFloat top );
183
RtVoid RiCropWindow ( RtFloat xmin, RtFloat xmax, RtFloat ymin, RtFloat ymax );
184
RtVoid RiProjectionV ( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
185
RtVoid RiClipping( RtFloat hither, RtFloat yon );
186
RtVoid RiClippingPlane( RtFloat x, RtFloat y, RtFloat z, RtFloat nx, RtFloat ny, RtFloat nz );
187
RtVoid RiDepthOfField ( RtFloat fstop, RtFloat focallength, RtFloat focaldistance );
188
RtVoid RiShutter( RtFloat min, RtFloat max );
190
/* DISPLAY OPTIONS */
191
RtVoid RiPixelVariance( RtFloat variation );
192
RtVoid RiPixelSamples( RtFloat xsamples, RtFloat ysamples );
193
RtVoid RiPixelFilter( RtFilterFunc filterfunc, RtFloat xwidth, RtFloat ywidth );
194
RtVoid RiExposure( RtFloat gain, RtFloat gamma );
195
RtVoid RiImagerV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
196
RtVoid RiQuantize( RtToken type, RtInt one, RtInt min, RtInt max, RtFloat ampl );
197
RtVoid RiDisplayV( const char *name, RtToken type, RtToken mode,
198
RtInt n, RtToken tokens[], RtPointer parms[] );
200
/* ADDITIONAL OPTIONS */
201
RtVoid RiHiderV( const char *type, RtInt n, RtToken tokens[], RtPointer parms[] );
202
RtVoid RiColorSamples( RtInt n, RtFloat nRGB[], RtFloat RGBn[] );
203
RtVoid RiRelativeDetail( RtFloat relativedetail );
204
RtVoid RiOptionV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
207
/* SHADING ATTRIBUTES */
208
RtVoid RiColor( RtColor color );
209
RtVoid RiOpacity( RtColor color );
210
RtVoid RiTextureCoordinates( RtFloat s1, RtFloat t1, RtFloat s2, RtFloat t2,
211
RtFloat s3, RtFloat t3, RtFloat s4, RtFloat t4 );
212
RtLightHandle RiLightSourceV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
213
RtLightHandle RiAreaLightSourceV( const char *name,
214
RtInt n, RtToken tokens[], RtPointer parms[] );
215
RtVoid RiIlluminate( RtLightHandle light, RtBoolean onoff );
216
RtVoid RiSurfaceV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
217
RtVoid RiAtmosphereV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
218
RtVoid RiInteriorV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
219
RtVoid RiExteriorV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
220
RtVoid RiShadingRate( RtFloat size );
221
RtVoid RiShadingInterpolation( RtToken type );
222
RtVoid RiMatte( RtBoolean onoff );
224
/* GEOMETRY ATTRIBUTES */
225
RtVoid RiBound( RtBound );
226
RtVoid RiDetail( RtBound );
227
RtVoid RiDetailRange( RtFloat minvis, RtFloat lowtran, RtFloat uptran, RtFloat maxvis );
228
RtVoid RiGeometricApproximation( RtToken type, RtFloat value );
229
RtVoid RiBasis( RtBasis ubasis, RtInt ustep, RtBasis vbasis, RtInt vstep );
230
RtVoid RiTrimCurve( RtInt nloops, RtInt ncurves[], RtInt order[],
231
RtFloat knot[], RtFloat min[], RtFloat max[], RtInt n[],
232
RtFloat u[], RtFloat v[], RtFloat w[] );
233
RtVoid RiOrientation( RtToken orientation );
234
RtVoid RiReverseOrientation( );
235
RtVoid RiSides( RtInt sides );
236
RtVoid RiDisplacementV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
238
/* TRANSFORMATIONS */
239
RtVoid RiIdentity( );
240
RtVoid RiTransform( RtMatrix transform );
241
RtVoid RiConcatTransform( RtMatrix transform );
242
RtVoid RiPerspective( RtFloat fov );
243
RtVoid RiTranslate( RtFloat dx, RtFloat dy, RtFloat dz );
244
RtVoid RiRotate( RtFloat angle, RtFloat dx, RtFloat dy, RtFloat dz );
245
RtVoid RiScale( RtFloat sx, RtFloat sy, RtFloat sz );
246
RtVoid RiSkew( RtFloat angle, RtFloat dx1, RtFloat dy1, RtFloat dz1,
247
RtFloat dx2, RtFloat dy2, RtFloat dz2 );
248
RtVoid RiDeformationV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
249
RtVoid RiCoordinateSystem( RtToken space );
250
RtVoid RiCoordSysTransform( RtToken space );
252
RtVoid RiAttributeV( const char *name, RtInt n, RtToken tokens[], RtPointer parms[] );
255
RtVoid RiPolygonV( RtInt nverts, RtInt n, RtToken tokens[], RtPointer parms[] );
256
RtVoid RiGeneralPolygonV( RtInt nloops, RtInt nverts[], RtInt n,
257
RtToken tokens[], RtPointer parms[] );
258
RtVoid RiPointsPolygonsV( RtInt npolys, RtInt nverts[], RtInt verts[], RtInt n,
259
RtToken tokens[], RtPointer parms[] );
260
RtVoid RiPointsGeneralPolygonsV( RtInt npolys, RtInt nloops[], RtInt nverts[],
261
RtInt verts[], RtInt n, RtToken tokens[],
263
RtVoid RiPatchV( RtToken type, RtInt n, RtToken tokens[], RtPointer parms[] );
264
RtVoid RiPatchMeshV( RtToken type, RtInt nu, RtToken uwrap,
265
RtInt nv, RtToken vwrap, RtInt n, RtToken tokens[],
267
RtVoid RiNuPatchV( RtInt nu, RtInt uorder, RtFloat uknot[], RtFloat umin,
268
RtFloat umax, RtInt nv, RtInt vorder, RtFloat vknot[],
269
RtFloat vmin, RtFloat vmax,
270
RtInt n, RtToken tokens[], RtPointer parms[] );
272
RtVoid RiSphereV( RtFloat radius, RtFloat zmin, RtFloat zmax, RtFloat tmax,
273
RtInt n, RtToken tokens[], RtPointer parms[] );
274
RtVoid RiConeV( RtFloat height, RtFloat radius, RtFloat tmax,
275
RtInt n, RtToken tokens[], RtPointer parms[] );
276
RtVoid RiCylinderV( RtFloat radius, RtFloat zmin, RtFloat zmax, RtFloat tmax,
277
RtInt n, RtToken tokens[], RtPointer parms[] );
278
RtVoid RiHyperboloidV( RtPoint point1, RtPoint point2, RtFloat tmax,
279
RtInt n, RtToken tokens[], RtPointer parms[] );
280
RtVoid RiParaboloidV( RtFloat rmax, RtFloat zmin, RtFloat zmax, RtFloat tmax,
281
RtInt n, RtToken tokens[], RtPointer parms[] );
282
RtVoid RiDiskV( RtFloat height, RtFloat radius, RtFloat tmax,
283
RtInt n, RtToken tokens[], RtPointer parms[] );
284
RtVoid RiTorusV( RtFloat majrad, RtFloat minrad, RtFloat phimin, RtFloat phimax,
285
RtFloat tmax, RtInt n, RtToken tokens[], RtPointer parms[] );
287
RtVoid RiBlobbyV( RtInt nleaf, RtInt ncode, RtInt code[],
288
RtInt nflt, RtFloat flt[],
289
RtInt nstr, RtToken str[],
290
RtInt n, RtToken tokens[], RtPointer parms[] );
291
RtVoid RiPointsV( RtInt npoints,
292
RtInt n, RtToken tokens[], RtPointer parms[] );
293
RtVoid RiCurvesV( RtToken type, RtInt ncurves,
294
RtInt nvertices[], RtToken wrap,
295
RtInt n, RtToken tokens[], RtPointer parms[] );
296
RtVoid RiSubdivisionMeshV( RtToken mask, RtInt nf, RtInt nverts[],
298
RtInt ntags, RtToken tags[], RtInt numargs[],
299
RtInt intargs[], RtFloat floatargs[],
300
RtInt n, RtToken tokens[], RtPointer parms[] );
303
RtVoid RiProcedural( RtPointer data, RtBound bound,
304
RtVoid ( *subdivfunc ) ( RtPointer, RtFloat ),
305
RtVoid ( *freefunc ) ( RtPointer ) );
306
RtVoid RiGeometryV( RtToken type, RtInt n, RtToken tokens[],
310
RtVoid RiMakeTextureV( const char *pic, const char *tex, RtToken swrap, RtToken twrap,
311
RtFilterFunc filterfunc, RtFloat swidth, RtFloat twidth,
312
RtInt n, RtToken tokens[], RtPointer parms[] );
313
RtVoid RiMakeBumpV( const char *pic, const char *tex, RtToken swrap, RtToken twrap,
314
RtFilterFunc filterfunc, RtFloat swidth, RtFloat twidth,
315
RtInt n, RtToken tokens[], RtPointer parms[] );
316
RtVoid RiMakeLatLongEnvironmentV( const char *pic, const char *tex, RtFilterFunc filterfunc,
317
RtFloat swidth, RtFloat twidth,
318
RtInt n, RtToken tokens[], RtPointer parms[] );
319
RtVoid RiMakeCubeFaceEnvironmentV( const char *px, const char *nx, const char *py, const char *ny,
320
const char *pz, const char *nz, const char *tex, RtFloat fov,
321
RtFilterFunc filterfunc, RtFloat swidth,
323
RtInt n, RtToken tokens[], RtPointer parms[] );
324
RtVoid RiMakeShadowV( const char *pic, const char *tex,
325
RtInt n, RtToken tokens[], RtPointer parms[] );
328
RtVoid RiArchiveRecord( RtToken type, std::string );
329
RtVoid RiReadArchiveV( RtToken name, RtArchiveCallback callback,
330
RtInt n, RtToken tokens[], RtPointer parms[] );
333
RtVoid RiErrorHandler( RtErrorFunc handler );
337
END_NAMESPACE( libri2rib )