struct RwFrame { RwObject object; RwLLLink inDirtyListLink; /* Put embedded matrices here to ensure they remain 16-byte aligned */ RwMatrix modelling; RwMatrix ltm; RwLinkList objectList; /* List of objects connected to a frame */ struct RwFrame *child; struct RwFrame *next; struct RwFrame *root; /* Root of the tree */ }; struct RpMaterial { RwTexture *texture; /**< texture */ RwRGBA color; /**< color */ RxPipeline *pipeline; /**< pipeline */ RwSurfaceProperties surfaceProps; /**< surfaceProps */ RwInt16 refCount; /* C.f. rwsdk/world/bageomet.h:RpGeometry */ RwInt16 pad; }; struct RpMaterialList { RpMaterial **materials; RwInt32 numMaterials; RwInt32 space; }; struct RpMorphTarget { RpGeometry *parentGeom; RwSphere boundingSphere; RwV3d *verts; RwV3d *normals; }; struct RpGeometry { RwObject object; /* Generic type */ RwUInt32 flags; /* Geometry flags */ RwUInt16 lockedSinceLastInst; /* What has been locked since we last instanced - for re-instancing */ RwInt16 refCount; /* Reference count (for keeping track of atomics referencing geometry) */ RwInt32 numTriangles; /* Quantity of various things (polys, verts and morph targets) */ RwInt32 numVertices; RwInt32 numMorphTargets; RwInt32 numTexCoordSets; RpMaterialList matList; RpTriangle *triangles; /* The triangles */ RwRGBA *preLitLum; /* The pre-lighting values */ RwTexCoords *texCoords[rwMAXTEXTURECOORDS]; /* Texture coordinates */ RwSurfaceProperties ignoredSurfaceProps; /* Not used in pp rendering, but present * so if pipe1 files are read and written these * values are not lost */ RpMeshHeader *mesh; /* The mesh - groups polys of the same material */ RwResEntry *repEntry; /* Information for an instance */ RpMorphTarget *morphTarget; /* The Morph Target */ }; struct RpAtomic { RwObjectHasFrame object; /* Information for an instance */ RwResEntry *repEntry; /* Triangles making the object */ RpGeometry *geometry; /* Interpolated bounding sphere (in object space and world space) */ RwSphere boundingSphere; RwSphere worldBoundingSphere; /* Connections to other atomics */ RpClump *clump; RwLLLink inClumpLink; /* callbacks */ RpAtomicCallBackRender renderCallBack; /* Interpolation animation pointer */ RpInterpolator interpolator; /* Counter for checks of "render has occurred already" */ RwUInt16 renderFrame; RwUInt16 pad; /* Connections to sectors */ RwLinkList llWorldSectorsInAtomic; /* The Atomic object pipeline for this Atomic */ RxPipeline *pipeline; }; struct RpClump { RwObject object; /* Information about all the Atomics */ RwLinkList atomicList; /* Lists of lights and cameras */ RwLinkList lightList; RwLinkList cameraList; /* The clump in the world */ RwLLLink inWorldLink; /* Clump callback */ RpClumpCallBack callback; /* Render frame - used to prevent multiple invocations * of the clump frustum callback */ RwUInt16 renderFrame; RwUInt16 pad; };