package RenderMan;
use strict;
use Carp;
use vars qw($VERSION @ISA @EXPORT);
require Exporter;
require DynaLoader;
require AutoLoader;
@ISA = qw(Exporter DynaLoader);
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
@EXPORT = qw(
RIE_BADFILE
RIE_BADHANDLE
RIE_BADMOTION
RIE_BADSOLID
RIE_BADTOKEN
RIE_BUG
RIE_CONSISTENCY
RIE_ERROR
RIE_ILLSTATE
RIE_INCAPABLE
RIE_INFO
RIE_LIMIT
RIE_MATH
RIE_MISSINGDATA
RIE_NESTING
RIE_NOERROR
RIE_NOFILE
RIE_NOMEM
RIE_NOSHADER
RIE_NOTATTRIBS
RIE_NOTOPTIONS
RIE_NOTPRIMS
RIE_NOTSTARTED
RIE_OPTIONAL
RIE_RANGE
RIE_SEVERE
RIE_SYNTAX
RIE_SYSTEM
RIE_UNIMPLEMENT
RIE_VERSION
RIE_WARNING
RI_BEZIERSTEP
RI_BSPLINESTEP
RI_CATMULLROMSTEP
RI_EPSILON
RI_FALSE
RI_H
RI_HERMITESTEP
RI_INFINITY
RI_NULL
RI_POWERSTEP
RI_TRUE
RI_A
RI_ABORT
RI_AMBIENTLIGHT
RI_AMPLITUDE
RI_AZ
RI_BACKGROUND
RI_BEAMDISTRIBUTION
RI_BICUBIC
RI_BILINEAR
RI_BLACK
RI_BUMPY
RI_CAMERA
RI_CLAMP
RI_COMMENT
RI_CONEANGLE
RI_CONEDELTAANGLE
RI_CONSTANT
RI_CS
RI_DEPTHCUE
RI_DIFFERENCE
RI_DISTANCE
RI_DISTANTLIGHT
RI_FILE
RI_FLATNESS
RI_FOG
RI_FOV
RI_FRAMEBUFFER
RI_FROM
RI_HANDLER
RI_HIDDEN
RI_IDENTIFIER
RI_IGNORE
RI_INSIDE
RI_INTENSITY
RI_INTERSECTION
RI_KA
RI_KD
RI_KR
RI_KS
RI_LH
RI_LIGHTCOLOR
RI_MATTE
RI_MAXDISTANCE
RI_METAL
RI_MINDISTANCE
RI_N
RI_NAME
RI_NONPERIODIC
RI_NP
RI_OBJECT
RI_ORIGIN
RI_ORTHOGRAPHIC
RI_OS
RI_OUTSIDE
RI_P
RI_PAINT
RI_PAINTEDPLASTIC
RI_PERIODIC
RI_PERSPECTIVE
RI_PLASTIC
RI_POINTLIGHT
RI_PRIMITIVE
RI_PRINT
RI_PW
RI_PZ
RI_RASTER
RI_RGB
RI_RGBA
RI_RGBAZ
RI_RGBZ
RI_RH
RI_ROUGHNESS
RI_S
RI_SCREEN
RI_SHINYMETAL
RI_SMOOTH
RI_SPECULARCOLOR
RI_SPOTLIGHT
RI_ST
RI_STRUCTURE
RI_T
RI_TEXTURENAME
RI_TO
RI_UNION
RI_WORLD
RI_Z
RI_LINEAR
RI_CUBIC
RI_WIDTH
RI_CONSTANTWIDTH
RI_CURRENT
RI_WORLD
RI_OBJECT
RI_SHADER
RI_RASTER
RI_NDC
RI_SCREEN
RI_CAMERA
RI_EYE
BSplineBasis
BezierBasis
CatmullRomBasis
HermiteBasis
PowerBasis
Declare
Begin
End
FrameBegin
FrameEnd
WorldBegin
WorldEnd
Format
FrameAspectRatio
ScreenWindow
CropWindow
Projection
Clipping
DepthOfField
Shutter
PixelVariance
PixelSamples
PixelFilter
Exposure
Imager
Quantize
Display
GaussianFilter
BoxFilter
TriangleFilter
CatmullRomFilter
SincFilter
Hider
ColorSamples
RelativeDetail
Option
AttributeBegin
AttributeEnd
Color
Opacity
TextureCoordinates
LightSource
AreaLightSource
Illuminate
Surface
Atmosphere
Interior
Exterior
ShadingRate
ShadingInterpolation
Matte
Bound
Detail
DetailRange
GeometricApproximation
GeometricRepresentation
Orientation
ReverseOrientation
Sides
Identity
Transform
ConcatTransform
Perspective
Translate
Rotate
Scale
Skew
Deformation
Displacement
CoordinateSystem
TransformPoints
TransformBegin
TransformEnd
Attribute
Polygon
GeneralPolygon
PointsPolygons
PointsGeneralPolygons
Basis
Patch
PatchMesh
NuPatch
TrimCurve
Sphere
Cone
Cylinder
Hyperboloid
Paraboloid
Disk
Torus
Geometry
Curves
Points
SubdivisionMesh
Blobby
ProcDelayedReadArchive
ProcRunProgram
ProcDynamicLoad
SolidBegin
SolidEnd
ObjectBegin
ObjectEnd
ObjectInstance
MotionBegin
MotionEnd
MakeTexture
MakeBump
MakeLatLongEnvironment
MakeCubeFaceEnvironment
MakeShadow
ErrorHandler
ErrorIgnore
ErrorPrint
ErrorAbort
ArchiveRecord
ReadArchive
);
$VERSION = '0.04';
bootstrap RenderMan $VERSION;
# Preloaded methods go here.
sub RIE_BADFILE { 4; } # Bad file format
sub RIE_BADHANDLE { 44; } # Bad object/light handle
sub RIE_BADMOTION { 29; } # Badly formed motion block
sub RIE_BADSOLID { 30; } # Badly formed solid block
sub RIE_BADTOKEN { 41; } # Invalid token for request
sub RIE_BUG { 14; } # Probably a bug in renderer
sub RIE_CONSISTENCY { 43; } # Parameters inconsistent
sub RIE_ERROR { 2; } # Problem. Results may be wrong
sub RIE_ILLSTATE { 28; } # Other invalid state
sub RIE_INCAPABLE { 11; } # Optional RI feature
sub RIE_INFO { 0; } # Rendering stats & other info
sub RIE_LIMIT { 13; } # Arbitrary program limit
sub RIE_MATH { 61; } # Zerodivide, noninvert matrix, etc.
sub RIE_MISSINGDATA { 46; } # Required parameters not provided
sub RIE_NESTING { 24; } # Bad begin-end nesting
sub RIE_NOERROR { 0; }
sub RIE_NOFILE { 3; } # File nonexistant
sub RIE_NOMEM { 1; } # Out of memory
sub RIE_NOSHADER { 45; } # Can't load requested shader
sub RIE_NOTATTRIBS { 26; } # Invalid state for attributes
sub RIE_NOTOPTIONS { 25; } # Invalid state for options
sub RIE_NOTPRIMS { 27; } # Invalid state for primitives
sub RIE_NOTSTARTED { 23; } # RiBegin not called
sub RIE_OPTIONAL { 11; } # Optional RI feature
sub RIE_RANGE { 42; } # Parameter out of range
sub RIE_SEVERE { 3; } # So bad you should probably abort
sub RIE_SYNTAX { 47; } # Declare type syntax error
sub RIE_SYSTEM { 2; } # Miscellaneous system error
sub RIE_UNIMPLEMENT { 12; } # Unimplemented feature
sub RIE_VERSION { 5; } # File version mismatch
sub RIE_WARNING { 1; } # Something seems wrong, maybe okay
sub RI_BEZIERSTEP { 3; }
sub RI_BSPLINESTEP { 1; }
sub RI_CATMULLROMSTEP{ 1; }
sub RI_EPSILON { 1.0e-10; }
sub RI_FALSE { 0; }
sub RI_H { 1; }
sub RI_HERMITESTEP { 2; }
sub RI_INFINITY { 1.0e38; }
sub RI_NULL { ""; }
sub RI_POWERSTEP { 4; }
sub RI_TRUE { 1; }
# Autoload methods go after =cut, and are processed by the autosplit program.
1;
__END__
# Below is the stub of documentation for your module. You better edit it!
=head1 NAME
RenderMan - A RenderMan binding as a Perl 5.6 module
=head1 SYNOPSIS
use RenderMan;
=head1 DESCRIPTION
This RenderMan module implements a Perl 5.6 binding for the BMRT client library
(libribout). It fully supports the client library.
Therefore, this module has the following limitations:
Error Handling callbacks are not implemented, Filter function callbacks are
not implemented, and the TransformPoints function does nothing.
Also, Blobby is not yet supported by BMRT 2.5.0.8.
The full RenderMan specification is way beyond the scope of this man page.
Please refer to the documents below for more information about RenderMan.
The Perl binding is identical to the C binding except a few minor points:
All "parameterlist"s are passed as a reference to a hash (i.e. \%params).
Anywhere that a function's arguments can be terminated by RI_NULL, you can
simply choose to not include that RI_NULL argument, which is incredibly nice.
All array, matrix, and basis types are single-dimension arrays of doubles in
this Perl binding. The order for 2-dimension types is first-row followed
by second-row, etc.
You will typically want to run your RenderMan Perl script and pipe the
results into any RenderMan-compliant renderer, such as "rgl", "rendribv",
or "rendrib", which all come with the excellent BMRT backage by Larry Gritz.
If using the WinNT version of BMRT, you can specify a filename, "rgl" or "rendrib"
as the argument to Begin(); and the output will be sent to a file or automatically
piped to "rgl" or "rendrib" since the piping mechanism (and general functionality)
of WinNT's command line parser is, uh, limited.
=head1 AUTHOR
Glenn M. Lewis, mailto:glenn@gmlewis.com, http://www.gmlewis.com/
=head1 SEE ALSO
Blue Moon Rendering Toolkit (BMRT) by Larry Gritz.
http://www.bmrt.org/
The RenderMan Companion: A Programmer's Guide to Realistic Computer Graphics
by Steve Upstill, published by Addison Wesley. ISBN 0-201-50868-0.
Advanced RenderMan: Creating CGI for Motion Pictures
by Anthony A. Apodaca and Larry Gritz, published by Morgan Kaufmann Publishers
ISBN 1-55860-618-1
The RenderMan Interface Specification, Version 3.2, July 2000, Pixar.
http://www.pixar.com/products/rendermandocs/toolkit/Toolkit/
RenderMan is a registered trademark of Pixar.
http://www.pixar.com/
=cut