diff options
Diffstat (limited to 'sdk/rwsdk/include/d3d8/rtimport.h')
-rw-r--r-- | sdk/rwsdk/include/d3d8/rtimport.h | 1338 |
1 files changed, 0 insertions, 1338 deletions
diff --git a/sdk/rwsdk/include/d3d8/rtimport.h b/sdk/rwsdk/include/d3d8/rtimport.h deleted file mode 100644 index 2cc6383b..00000000 --- a/sdk/rwsdk/include/d3d8/rtimport.h +++ /dev/null @@ -1,1338 +0,0 @@ -/*************************************************************************** - * * - * Module : rtimport.h * - * * - * Purpose : World handling functions. * - * * - **************************************************************************/ - -#ifndef RTIMPORT_H -#define RTIMPORT_H - -/** - * \defgroup rtworldimport RtWorldImport - * \ingroup basicgeometry - * - * World Import Toolkit for RenderWare. - */ - -/** - * \defgroup selectors RtWorldImportPartitionSelectors - * \ingroup rtworldimport - * - * The set of provided RtWorldImportPartitionSelectors: - * Selects a good partition by calling one of the - * \ref iterators and then - * one of the \ref evaluators to - * see which is best. - */ - -/** - * \defgroup iterators RtWorldImportPartitionIterators - * \ingroup rtworldimport - * - * The set of provided RtWorldImportPartitionIterators: - * Iterates through a set of candidate partitions, possibly - * using the geometric information in the build sector, or perhaps - * using some other criteria. - */ - -/** - * \defgroup evaluators RtWorldImportPartitionEvaluators - * \ingroup rtworldimport - * - * The set of provided RtWorldImportPartitionEvaluators: - * Uses a combination of statistics, build sector, build status, and - * possibly other criteria to evaluate a partition. While the value - * returned can be any real value, all provided evaluators are return - * lower values for better partitioners, and are in the range [0..1] - * where appropriate - */ - -/** - * \defgroup terminators RtWorldImportPartitionTerminators - * \ingroup rtworldimport - * - * The set of provided RtWorldImportPartitionTerminators: - * Checks given criteria about the statistics, build sector, build status, and - * possibly other criteria to see whether the building process should be - * allowed to terminate, or whether more parititoning is necessary. - */ - -/** - * \defgroup kd RtWorldImportGuideKD - * \ingroup rtworldimport - * - * Tools to manipulate the \ref RtWorldImportGuideKDTree that is used to - * manually build the sectors of a world. - */ - -/** - * \defgroup hints RtWorldImportHints - * \ingroup rtworldimport - * - * Tools to aid the build process by giving hints as to what geometry should - * not be split, and what geometry makes for a good partitioning guide. - */ - -/**************************************************************************** - Includes - */ -#include "rwcore.h" -#include "rpworld.h" - -#include "rtimport.rpe" /* automatically generated header file */ - -/**************************************************************************** - Defines - */ - -/* Progress callback message types */ -#define rtWORLDIMPORTPROGRESSBSPBUILDSTART 0 -#define rtWORLDIMPORTPROGRESSBSPBUILDUPDATE 1 -#define rtWORLDIMPORTPROGRESSBSPBUILDEND 2 -#define rtWORLDIMPORTPROGRESSBSPCOMPRESSSTART 3 -#define rtWORLDIMPORTPROGRESSBSPCOMPRESSUPDATE 4 -#define rtWORLDIMPORTPROGRESSBSPCOMPRESSEND 5 - -/** - * \ingroup rtworldimport - * \def rtWORLDIMPORTINVALIDPARTITION - * - * This value means that no partition was found, or that the partition was - * invalid or impractical. The value represents infinity. - */ -#define rtWORLDIMPORTINVALIDPARTITION RwRealMAXVAL - -/* maintained in Bin-tree */ -#define CONGRUENTVERTEXCHILDREN 2 - -/* maintained in Quad-tree */ -#define WELDVERTEXCHILDREN 4 - -/**************************************************************************** - Global types - */ -#if (!defined(DOXYGEN)) -typedef struct RtWorldImportVertex RtWorldImportVertex; - -typedef struct RtWorldImportWeldVertex RtWorldImportWeldVertex; - -typedef struct RtWorldImportBuildVertex RtWorldImportBuildVertex; - -/* Internal use only */ -typedef union RtWorldImportVertexState RtWorldImportVertexState; - -/* Internal use only */ -union RtWorldImportVertexState -{ - /* clipFlags, two types, first is based on partition only, 2nd is - * also based on partition, but takes overlaps into consideration. i.e. - * number splits is usually higher in clipFlags[0] than [1] */ - RwInt32 clipFlags[2]; /* Internal use only */ - RwInt32 forwardingAddress; /* Internal use only */ - RtWorldImportVertex *vpVert; /* Internal use only */ - RtWorldImportWeldVertex *vpWeldVert; /* Internal use only */ - RtWorldImportBuildVertex *vpBuildVert; /* Internal use only */ - RwSList *slist; /* Internal use only */ -}; -#endif /* (!defined(DOXYGEN)) */ - -/** - * \ingroup rtworldimport - * \struct RtWorldImportVertex - * Holds data for each vertex in the import world. - * - */ -struct RtWorldImportVertex -{ - RwV3d OC; /**< World space vertex position */ - RwV3d normal; /**< World space vertex normal */ - RwRGBA preLitCol; /**< Vertex Prelight color */ - RwTexCoords texCoords[rwMAXTEXTURECOORDS]; - /**< Vertex texture coordinates */ - RtWorldImportVertexState state; /**< Internal use only */ - RwInt32 matIndex; /**< Vertex material index */ - void *pUserdata; /**< Pointer to unspecified per vertex user data */ -}; - -typedef struct RtWorldImportBuildPolyInfo RtWorldImportBuildPolyInfo; -/** - * \ingroup rtworldimport - * \struct RtWorldImportBuildPolyInfo - * - * Information about a polygon - */ -struct RtWorldImportBuildPolyInfo -{ - RwInt16 matIndex; - /**< The material index */ - RwUInt8 clipFlags; - /**< Clipping flags */ - RwUInt8 hasAlpha; - /**< Alpha status */ - void *pUserdata; - /**< Userdata */ -}; - -typedef union RtWorldImportBuildVertexMode RtWorldImportBuildVertexMode; -/** - * \ingroup rtworldimport - * \struct RtWorldImportBuildVertexMode - * - * Mode of the vertex. - * - */ -union RtWorldImportBuildVertexMode -{ - RtWorldImportVertex *vpVert; - /**< The vertex */ - RwInt32 index; - /**< The index */ -}; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportBuildVertex - * - * A list of polygons as a list of vertices where the end of poly boundary - * is marked by mode.vpVert == NULL. - * - */ -struct RtWorldImportBuildVertex -{ - RtWorldImportBuildVertexMode mode; - /**< The mode of the element */ - - RtWorldImportBuildPolyInfo pinfo; - /**< we store some poly info in the end marker of a boundary */ -}; - -/* NB Merged RtWorldImportPartition with RtWorldImportBuildClipStatistics because - * there was a unique one-to-one relationship between them, and it made things easier - * just updating one stucture, without having to update both in sequence... - */ - - -typedef struct RtWorldImportBuildClipStatistics RtWorldImportBuildClipStatistics; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportBuildClipStatistics - * - * Holds statistics about a partition or candidate partition during - * the build process. - */ -struct RtWorldImportBuildClipStatistics -{ - RwInt32 numPotentialSplit; - /**< The number of polygons split by the partition, - * disregarding overlaps */ - - RwInt32 numPotentialLeft; - /**< The number of potential polygons and fragments on the - * left of the partition, disregarding overlaps */ - - RwInt32 numPotentialRight; - /**< The number of potential polygons and fragments on the - * right of the partition, disregarding overlaps */ - - - RwInt32 numActualSplit; - /**< The number of polygons split by the partition */ - - RwInt32 numActualLeft; - /**< The number of polygons and fragments on the - * left of the partition */ - - RwInt32 numActualRight; - /**< The number of polygons and fragments on the - * right of the partition */ - - - RwInt32 numMaterialLeft; - /**< The number of materials on the left of the partition */ - - RwInt32 numMaterialRight; - /**< The number of materials on the right of the partition */ - - RwInt32 numMaterialSplits; - /**< The number of materials split by the partition */ - - - RwInt32 numMaterialSector; - /**< The total number of materials in the sector containing - * the partition */ - - - RwReal overlapLeft; - /**< The actual, relative size of the overlap on the left of the partition */ - - RwReal overlapRight; - /**< The actual, relative size of the overlap on the right of the partition */ -}; - -/* - * typedef for struct RtWorldImportPartition - */ -typedef struct RtWorldImportPartition RtWorldImportPartition; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportPartition - * - * A partitioning plane. - */ -struct RtWorldImportPartition -{ - RwInt32 type; - /**< Plane type, i.e. 0,4,8 for being normal to the x,y,z axes respectively. */ - - RwReal value; - /**< The distance of the plane from the origin */ - - RwReal maxLeftValue; - /**< The maximum value of the left face of the overlap. This is derived - * from the maxOverlapPercent value in \ref RtWorldImportParameters - */ - - RwReal maxRightValue; - /**< The maximum value of the right face of the overlap. This is derived - * from the maxOverlapPercent value in \ref RtWorldImportParameters - */ - - RtWorldImportBuildClipStatistics buildStats; - /**< The statistics for the partition */ -}; - -/* - * typedef for struct \ref RtWorldImportGuideKDTree - */ -typedef struct RtWorldImportGuideKDTree RtWorldImportGuideKDTree; - - -/** - * \ingroup rtworldimport - * \struct RtWorldImportGuideKDTree - * Represents the structure of a binary tree with - * no contents per se. It is used to build a BSP in a user specified - * manner instead of using any heuristic. - * - */ -struct RtWorldImportGuideKDTree -{ - RtWorldImportPartition partition; - /**< A partitioning plane */ - - RwBBox bbox; - /**< Bounding box of the sector or super-sector */ - - RtWorldImportGuideKDTree *parent; - /**< Pointer to its parent */ - - RwInt32 order; - /**< Relationship information - 0 for left child, 1 for right child */ - - RtWorldImportGuideKDTree *left; - /**< Left child */ - - RtWorldImportGuideKDTree *right; - /**< Right child */ -}; - -typedef struct _rtWorldImportGuideKDStackElement _rtWorldImportGuideKDStackElement; - -#if (!defined(DOXYGEN)) -struct _rtWorldImportGuideKDStackElement -{ - RwBool terminal; - RtWorldImportGuideKDTree *node; - _rtWorldImportGuideKDStackElement *next; -}; - -typedef struct _rtWorldImportGuideKDStack _rtWorldImportGuideKDStack; - -struct _rtWorldImportGuideKDStack -{ - _rtWorldImportGuideKDStackElement *top; - _rtWorldImportGuideKDStackElement *current; - _rtWorldImportGuideKDStackElement *bottom; -}; -#endif /* (!defined(DOXYGEN)) */ - -/* - * typedef for struct RtWorldImportBuildSector - */ -typedef struct RtWorldImportBuildSector RtWorldImportBuildSector; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportBuildSector - * - * Holds information about the sector that is being subdivided - */ -struct RtWorldImportBuildSector -{ - RwInt32 type; - /**< Sector type (so can handle in an RpWorld) */ - - RtWorldImportVertex *vertices; - /**< A pointer to the list of vertices */ - - RwInt32 numVertices; - /**< The number of vertices */ - - RtWorldImportBuildVertex *boundaries; - /**< A list of boundaries \see RtWorldImportBuildVertex */ - - RwInt32 numBoundaries; - /**< The number of boundaries */ - - RwInt32 numPolygons; - /**< The number of polygons (triangles) */ - - RwBBox boundingBox; - /**< Sector's bounding box */ - - RwReal overlap; - /**< The percentage that the sector overlaps with its neighbour */ - - RwUInt32 maxNumMaterials; - /**< Maximum number of materials in the in the world */ -}; - -/* - * typedef for struct RtWorldImportBuildStatus - */ -typedef struct RtWorldImportBuildStatus RtWorldImportBuildStatus; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportBuildStatus - * World Import Build Status Structure - * Used to store the current tree's build status - */ -struct RtWorldImportBuildStatus -{ - RwInt32 depth; /**< current depth in the tree */ -}; - -typedef struct RwRGBAUInt32 RwRGBAUInt32; - -#if (!defined(DOXYGEN)) -struct RwRGBAUInt32 -{ - RwUInt32 red, green, blue, alpha; -}; - -typedef struct RtWorldImportCongruentVertex RtWorldImportCongruentVertex; - -struct RtWorldImportCongruentVertex -{ - RwInt32 destIdx; - RtWorldImportVertex vertex; - RtWorldImportVertex Mean; - RwRGBAUInt32 preLitMean; - RwInt32 refCount; - RtWorldImportCongruentVertex *child[CONGRUENTVERTEXCHILDREN]; -}; - -struct RtWorldImportWeldVertex -{ - RtWorldImportVertex *sourcePtr; - RtWorldImportCongruentVertex *CongruentVertex; - RtWorldImportWeldVertex *child[WELDVERTEXCHILDREN]; -}; -#endif /* (!defined(DOXYGEN)) */ - -/* - * Holds data for each triangle in the import world. - */ -typedef struct RtWorldImportTriangle RtWorldImportTriangle; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportTriangle - * Holds data for each triangle in the import world. - * - * \see RtWorldImportTriangle - */ -struct RtWorldImportTriangle -{ - RwInt32 matIndex; /**< Index into material list */ - RwInt32 vertIndex[3]; /**< Indices into vertex list */ - void *pUserdata; /**< Pointer to unspecified per triangle user data */ -}; - - - - -/* - * typedef for struct RtWorldImportBBoxHintDesc - */ -typedef struct RtWorldImportBBoxHintDesc RtWorldImportBBoxHintDesc; -/** - * \ingroup rtworldimport - * \struct RtWorldImportBBoxHintDesc - * Bounding box hints and (priority) values used to control the world - * sectorization process. - */ -struct RtWorldImportBBoxHintDesc -{ - RwBBox bBox; /**< The (necessarily orthogonal) bounding box */ - RwReal value; /**< The value or priority of the hint (highest is most important) */ -}; - -/* - * typedef for struct RtWorldImportHints - */ -typedef struct RtWorldImportHints RtWorldImportHints; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportHints - * Bounding box hints used to control the world sectorization process. - * \see RtWorldImportHintsSet - */ -struct RtWorldImportHints -{ - RtWorldImportBBoxHintDesc *boundingBoxes; /**< The bounding box hints */ - RwInt32 numBoundingBoxes; /**< The number of bounding box hints */ -}; - - -/** - * \ingroup rtworldimport - * \ref RtWorldImportHintGroup - * - * An enumeration that can be passed to - * \ref RtWorldImportHintsSetGroup and \ref RtWorldImportHintsGetGroup to determine - * whether hints will contribute towards the shield hint group or partition hint group - */ -typedef enum -{ - rtWORLDIMPORTSHIELDHINT = 0, - rtWORLDIMPORTPARTITIONHINT, - - rtWORLDIMPORTFORCEENUMSIZEINT = RWFORCEENUMSIZEINT -} -RtWorldImportHintGroup; - - - - -/* - * typedef for struct \ref RtWorldImportParameters - */ -typedef struct RtWorldImportParameters RtWorldImportParameters; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportParameters - * Parameters used with \ref RtWorldImportCreateWorld. - * They are initialized to default values using \ref RtWorldImportParametersInit. - * - */ -struct RtWorldImportParameters -{ - RwReal worldSectorMaxSize; - /**< The maximum world sector size. */ - RwInt32 maxWorldSectorPolygons; - /**< The maximum number of polygons in a world sector. */ - RwReal maxOverlapPercent; - /**< Total fraction of world sector overlap allowed. */ - RwReal weldThreshold; - /**< Threshold for welding vertices. */ - RwReal angularThreshold; - /**< Angular threshold for welding vertex normals */ - RwBool calcNormals; - /**< If TRUE then importer creates normals. */ - RwBool conditionGeometry; - /**< If TRUE perform vertex welding and degenerate triangle removal.*/ - RwBool userSpecifiedBBox; - /**< If TRUE allows user to specify minimum bounding-box for the - * world using the userBBox parameter. */ - RwBBox userBBox; - /**< User specified world bounding-box if userSpecifiedBBox is TRUE.*/ - RwReal uvLimit; - /**< If conditionGeometry is TRUE limit texture coordinates to this - * value. */ - RwBool retainCreases; - /**< If TRUE then duplicate vertices with differing normals will not - * be merged. */ - RwBool fixTJunctions; - /**< If TRUE then T-junctions are fixed in the geometry (slow). */ - RwBool weldPolygons; - /**< If TRUE then polygons are welded where possible to reduce the - * polygon count. */ - RwInt32 flags; - /**< Conversion flags (see RpWorldFlag). */ - RwTextureAddressMode mode; - /**< If \ref rwTEXTUREADDRESSWRAP than weld vertices according to - * mod(1) congruent texture coordinates */ - RwBool sortPolygons; - /**< If TRUE then polygons are sorted by their centroid */ - RwBool cullZeroAreaPolygons; - /**< If TRUE then zero-area polygons are culled */ - RwInt32 numTexCoordSets; - /**< The number of texture coordinate sets to use. If set to zero, then - * the number is taken from the flags parameter which, for backward - * compatibility, can include the \ref rpWORLDTEXTURED or \ref rpWORLDTEXTURED2 - * flags. These specify one or two sets respectively. */ - RwBool terminatorCheck; - /**< If TRUE the world will be checked for validity during the build process. */ -}; - -/* - * typedef for struct RtWorldImport - */ -typedef struct RtWorldImport RtWorldImport; - -/** - * \ingroup rtworldimport - * \struct RtWorldImport - * World Import State Structure - */ -struct RtWorldImport -{ - RpMaterialList matList; /**< Material list */ - RtWorldImportVertex *vertices; /**< Vertex array */ - RwInt32 numVertices; /**< Vertex count */ - - RtWorldImportTriangle *polygons; /**< Triangle array */ - RwInt32 numPolygons; /**< Triangle count */ -}; - -/** - * \ingroup rtworldimport - * \ref RtWorldImportProgressCallBack is the type for the callback function supplied to - * \ref RtWorldImportSetProgressCallBack. - * - * \param msg Message type corresponding to one of the following: - * \li rtWORLDIMPORTPROGRESSBSPBUILDSTART - - * The BSP creation process is about to start. - * The argument value is equal to 0.0. - * \li rtWORLDIMPORTPROGRESSBSPBUILDUPDATE - - * The BSP creation process has finished processing a subsection of - * the world. The argument value is equal to the percentage of the - * world processed up to this point. - * \li rtWORLDIMPORTPROGRESSBSPBUILDEND - - * The BSP creation process has ended. - * The argument value is equal to 100.0. - * \li rtWORLDIMPORTPROGRESSBSPCOMPRESSSTART - - * The BSP compression process is about to start. The argument value - * is equal to 0.0. - * \li rtWORLDIMPORTPROGRESSBSPCOMPRESSUPDATE - - * The BSP compression has finished processing a subsection of the - * world. The argument value is equal to the percentage of the world - * processed up to this point. - * \li rtWORLDIMPORTPROGRESSBSPCOMPRESSEND - - * The BSP compression process has ended. The argument value is equal - * to 100.0. - * - * \param value The percentage of the progress made in either BSP - * building or BSP compression. - * - * \return TRUE to continue BSP processing, FALSE to abort. - * - * \see RtWorldImportSetProgressCallBack - */ -typedef RwBool (*RtWorldImportProgressCallBack)(RwInt32 msg, RwReal value); - -/** - * \ingroup rtworldimport - * \ref RtWorldImportDestroyVertexUserdataCallBack - * - * A pointer to the CallBack function that will be called during - * vertex destruction. - * - * \param pUserdata - * - * \return - */ -typedef RwBool (*RtWorldImportDestroyVertexUserdataCallBack)(void **pUserdata); - -/** - * \ingroup rtworldimport - * \ref RtWorldImportCloneVertexUserdataCallBack - * - * A pointer to the CallBack function that will be called during - * vertex cloning. - * - * \param pUserdataDst - * \param pUserdataSrc - * - * \return - */ -typedef RwBool (*RtWorldImportCloneVertexUserdataCallBack)(void **pUserdataDst, void **pUserdataSrc); - -/** - * \ingroup rtworldimport - * \ref RtWorldImportInterpVertexUserdataCallBack - * - * A pointer to the CallBack function that will be called during - * vertex interpolation. - * - * \param pUserdataDst - * \param pUserdata1 - * \param pUserdata2 - * \param delta - * - * \return - */ -typedef RwBool (*RtWorldImportInterpVertexUserdataCallBack)(void **pUserdataDst, void **pUserdata1, void **pUserdata2, RwReal delta); - -/** - * \ingroup rtworldimport - * \ref RtWorldImportDestroyPolygonUserdataCallBack - * - * A pointer to the CallBack function that will be called during - * polygon destruction. - * - * \param pUserdata - * - * \return - */ -typedef RwBool (*RtWorldImportDestroyPolygonUserdataCallBack)(void **pUserdata); - -/** - * \ingroup rtworldimport - * \ref RtWorldImportSplitPolygonUserdataCallBack - * - * A pointer to the CallBack function that will be called during - * polygon division. - * - * \param pUserdataDst - * \param pUserdataSrc - * - * \return - */ -typedef RwBool (*RtWorldImportSplitPolygonUserdataCallBack)(void **pUserdataDst, void **pUserdataSrc); - -/** - * \ingroup rtworldimport - * \ref RtWorldImportSectorSetVertexUserdataCallBack - * - * A pointer to the CallBack function that will be called during - * the setting of the vertex user data. - * - * \param pUserdata - * \param sector - * \param index - * - * \return - */ -typedef RwBool (*RtWorldImportSectorSetVertexUserdataCallBack)(void **pUserdata, RpWorldSector *sector, RwInt32 index); - -/** - * \ingroup rtworldimport - * \ref RtWorldImportSectorSetPolygonUserdataCallBack - * - * A pointer to the CallBack function that will be called during - * the setting of the polygon user data. - * - * \param pUserdata - * \param sector - * \param index - * - * \return - */ -typedef RwBool (*RtWorldImportSectorSetPolygonUserdataCallBack)(void **pUserdata, RpWorldSector *sector, RwInt32 index); - - - - -/** - * \ingroup rtworldimport - * \ref RtWorldImportTerminationBuildCallBack - * - * A pointer to the function that will be called during the - * build process to determine whether the current sector should - * be subdivided further, or terminated. - * - * \param buildSector - * \param buildStatus - * \param pData - * - * \return - */ -typedef RwBool (*RtWorldImportTerminationBuildCallBack) - (RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - void *pData); - -/** - * \ingroup rtworldimport - * \ref RtWorldImportPartitionBuildCallBack - * - * A pointer to the function that will be called during the - * build process to select a suitable sector partition. - * - * \param buildSector - * \param buildStatus - * \param partition - * - * \return - */ -typedef RwReal (*RtWorldImportPartitionBuildCallBack) - (RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *pData); - -/* - * typedef for struct \ref RtWorldImportBuildCallBacks - */ -typedef struct RtWorldImportBuildCallBacks RtWorldImportBuildCallBacks; /* MAYBE: rename to SectorCallBacks ?*/ - -/** - * \ingroup rtworldimport - * \struct RtWorldImportBuildCallBacks - * Sectorization callbacks - */ -struct RtWorldImportBuildCallBacks -{ - RtWorldImportPartitionBuildCallBack partitionBuild; - /**< Callback for choosing partition */ - void *partitionUserData; - /**< Partition callback user data */ - RtWorldImportTerminationBuildCallBack terminationBuild; - /**< Callback for termination of further partitioning */ - void *terminationUserData; - /**< Termination callback user data */ -}; - -/* - * typedef for struct \ref RtWorldImportUserdataCallBacks - */ -typedef struct RtWorldImportUserdataCallBacks RtWorldImportUserdataCallBacks; - -/** - * \ingroup rtworldimport - * \struct RtWorldImportUserdataCallBacks - * Bundle of callbacks - */ -struct RtWorldImportUserdataCallBacks -{ - RtWorldImportDestroyVertexUserdataCallBack destroyVertexUserdata; - /**< Callback on vertex destruction */ - RtWorldImportCloneVertexUserdataCallBack cloneVertexUserdata; - /**< Callback on vertex cloning */ - RtWorldImportInterpVertexUserdataCallBack interpVertexUserdata; - /**< Callback on vertex interpolation */ - RtWorldImportDestroyPolygonUserdataCallBack destroyPolygonUserdata; - /**< Callback on polygon destruction */ - RtWorldImportSplitPolygonUserdataCallBack splitPolygonUserdata; - /**< Callback on polygon division */ - RtWorldImportSectorSetVertexUserdataCallBack sectorSetVertexUserdata; - /**< Callback on setting vertex user data */ - RtWorldImportSectorSetPolygonUserdataCallBack sectorSetPolygonUserdata; - /**< Callback on setting polygon user data */ -}; - -/** - * \ingroup rtworldimport - * \ref RtWorldImportBuildPartitionSelector - * - * An enumeration that can be passed to - * \ref RtWorldImportSetStandardBuildPartitionSelector to determine - * whether partitioning will be achieved automatically, using the - * default partition selected, or manually using the \ref RtWorldImportGuideKDTree - */ -typedef enum -{ - rwBUILDPARTITIONSELECTOR_DEFAULT, - /**< Sets the default automated process */ - rwBUILDPARTITIONSELECTOR_GUIDED - /**< Sets the guided manual process */ -} -RtWorldImportBuildPartitionSelector; - - - - -/* Builds overlaps from plane and conversion params */ -#define BuildSectorSetOverlapsMacro(_boundingBox, _partition, _conversionParams) \ -MACRO_START \ -{ \ - RwReal sup = GETCOORD((_boundingBox).sup, (_partition).type); \ - RwReal inf = GETCOORD((_boundingBox).inf, (_partition).type); \ - \ - (_partition).maxLeftValue = \ - (_partition).value + \ - ((sup - (_partition).value) * (_conversionParams).maxOverlapPercent); \ - \ - (_partition).maxRightValue = \ - (_partition).value - \ - ((((_partition).value) - inf) * (_conversionParams).maxOverlapPercent); \ -} \ -MACRO_STOP - -/***************************************************************************** - * Function prototypes - */ - -#ifdef __cplusplus -extern "C" -{ -#endif /* __cplusplus */ - -extern RwBool -_rtImportBuildSectorFindBBox(RtWorldImportBuildSector *buildSector, RwBBox *bbpOut); - -extern void - _rtWorldImportGuideKDCopy(RtWorldImportGuideKDTree *KD, RpSector *spSector, RwInt32 depth); -extern void _rtWorldImportGuideKDStackDestroy(_rtWorldImportGuideKDStack *stack); -extern void -_rtWorldImportGuideKDEncodeAsStack(RtWorldImportGuideKDTree *tree, _rtWorldImportGuideKDStack *stack); - -extern RtWorldImportGuideKDTree *RtWorldImportGuideKDCreate(RwBBox *bbox); -extern RtWorldImportGuideKDTree *RtWorldImportGuideKDAddPartition - (RtWorldImportGuideKDTree *KD, RwInt32 type, RwReal value); -extern void RtWorldImportGuideKDDeletePartition(RtWorldImportGuideKDTree *KD); -extern void RtWorldImportGuideKDDestroy(RtWorldImportGuideKDTree *KD); - -extern RtWorldImportGuideKDTree *RtWorldImportGuideKDWrite( - RtWorldImportGuideKDTree *guideKD, const RwChar *filename); -extern RtWorldImportGuideKDTree * RtWorldImportGuideKDRead( - const RwChar *filename, const RwBBox *bbox); - -/***************************************************************************** - * PARTITION SELECTORS - These callbacks for used to select a partition - * from a sector. - */ - -extern RwReal -RtWorldImportBalancedCullPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); - -extern RwReal -RtWorldImportMaterialCountPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); - -extern RwReal -RtWorldImportMaterialSeparatePartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); -extern RwReal -RtWorldImportPartitionHintPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * __RWUNUSED__ userData); - - -extern RwReal -RtWorldImportMaximumOccluderPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportDisjointOccluderPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportLeastCutAndBalancedPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportMaximumExtentPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportCullMiddleSpacePartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); - -extern RwReal -RtWorldImportCullEndSpacePartitionSelector(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); - -extern RwReal -RtWorldImportCullSpacePartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); - -extern RwReal -RtWorldImportHintBBoxPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); - -extern RwReal -RtWorldImportGeneralOccluderPartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportBalancedTreePartitionSelector(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -/***************************************************************************** - * PARTITION ITERATORS - These callbacks iterate though a set of partitions - */ - -extern RwBool -RtWorldImportOrthogonalAutoPartitionIterator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData, - RwInt32* loopCounter); - - -extern RwBool -RtWorldImportRegularIntervalPartitionIterator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData, - RwInt32* loopCounter); - - -extern RwBool -RtWorldImportMiddleAxisPartitionIterator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData, - RwInt32 * loopCounter); - - -extern RwBool -RtWorldImportMedianPercentagePartitionIterator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData, - RwInt32 *loopCounter); - - -extern RwBool -RtWorldImportHintBBoxPartitionIterator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData, - RwInt32* loopCounter); - -extern RwBool -RtWorldImportHighestVertexAccommodatingPlanePartitionIterator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus * buildStatus, - RtWorldImportPartition *partition, - void * userData, - RwInt32* loopCounter); - -extern RwBool -RtWorldImportMaterialBoundsPartitionIterator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus * buildStatus, - RtWorldImportPartition *partition, - void *userData, - RwInt32 *loopCounter); - -/***************************************************************************** - * PARTITION EVALUATORS - These callbacks iterate though a set of partitions - */ - -extern RwReal -RtWorldImportFuzzyBalancedPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); - - -extern RwReal -RtWorldImportPotentialSplitPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - - -extern RwReal -RtWorldImportBalancedPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - - -extern RwReal -RtWorldImportExtentPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - - -extern RwReal -RtWorldImportOccluderPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - - -extern RwReal -RtWorldImportWeightedOccluderPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportHintBBoxPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void *userData); - -extern RwReal -RtWorldImportVolumeBalancedPartitionEvaluator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportWeightedDisjointOccluderPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportMaterialCutsPartitionEvaluator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportMaterialBalancedPartitionEvaluator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus *buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportAspectPartitionEvaluator(RtWorldImportBuildSector *buildSector, - RtWorldImportBuildStatus * buildStatus, - RtWorldImportPartition *partition, - void * userData); - -extern RwReal -RtWorldImportMaterialSeparatorPartitionEvaluator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - RtWorldImportPartition *partition, - void * userData); -/***************************************************************************** - * PARTITION TERMINATORS - These callbacks are used to decide when - * partitioning of a sector should stop - */ -extern RwBool -RtWorldImportNeverPartitionTerminator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - void * userData); - -extern RwBool -RtWorldImportMaximumLegalPartitionTerminator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * __RWUNUSED__ buildStatus, - void * __RWUNUSED__ userData); - -extern RwBool -RtWorldImportDefaultPartitionTerminator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - void * pData); - - -extern RwBool -RtWorldImportDepthPartitionTerminator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - void * userData); - - -extern RwBool -RtWorldImportSectorHeightPartitionTerminator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - void * userData); - -extern RwBool -RtWorldImportSizePartitionTerminator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - void * userData); - -extern RwBool -RtWorldImportSectorAspectSizePartitionTerminator(RtWorldImportBuildSector * buildSector, - RtWorldImportBuildStatus * buildStatus, - void * userData); - - - - -/* WorldImport hints */ -extern void -RtWorldImportHintsSetGroup(RtWorldImportHints *hints, RtWorldImportHintGroup group); - -extern RtWorldImportHints * -RtWorldImportHintsGetGroup(RtWorldImportHintGroup group); - -extern RtWorldImportHints * -RtWorldImportHintsCreate(void); - -extern RwBool -RtWorldImportHintsDestroy(RtWorldImportHints *hints); - -extern RtWorldImportHints * -RtWorldImportHintsAddBoundingBoxes(RtWorldImportHints *hints, RwInt32 numBoundingBoxes); - -extern void -RtWorldImportMaterialGroupHintGenerator(RtWorldImportBuildSector *buildSector, - RtWorldImportHints *materialGroupHints); - -/* Initializing the conversion structure */ -extern RtWorldImportParameters *RtWorldImportParametersInit(void); -extern void RtWorldImportParametersSet(RtWorldImportParameters *params); -extern RtWorldImportParameters *RtWorldImportParametersGet(void); - - -extern RpWorld *RtWorldImportCreateWorld(RtWorldImport * - nohsworld, - RtWorldImportParameters - * conversionParams); - -extern RpGeometry *RtWorldImportCreateGeometry(RtWorldImport * - nohsworld, - RtWorldImportParameters - * conversionParams); - -extern RtWorldImport *RtWorldImportCreate(void); - -extern RwBool RtWorldImportDestroy(RtWorldImport * nohsworld); - -extern RtWorldImport *RtWorldImportAddNumVertices(RtWorldImport * - nohsworld, - RwInt32 - numNewVertices); - -extern RtWorldImport *RtWorldImportAddNumTriangles(RtWorldImport * - nohsworld, - RwInt32 - numNewTriangles); - -extern RpMaterial *RtWorldImportGetMaterial(RtWorldImport * - nohsworld, - RwInt32 matInd); - -extern RwInt32 RtWorldImportGetNumVertices(RtWorldImport * nohsworld); - -extern RtWorldImportVertex *RtWorldImportGetVertices(RtWorldImport * - nohsworld); - -extern RwInt32 RtWorldImportGetNumTriangles(RtWorldImport * nohsworld); - -extern RtWorldImportTriangle * -RtWorldImportGetTriangles(RtWorldImport * nohsworld); - - -/* Progress callbacks */ -extern void -RtWorldImportSetProgressCallBack(RtWorldImportProgressCallBack CB); - -extern RpWorldSector * RtWorldImportGetNumMaterials(RpWorldSector *worldSector, void *data); - -extern void -_rtImportWorldSendProgressMessage(RwInt32 msgtype, RwReal value); - -/* Reading and Writing */ - -extern RtWorldImport *RtWorldImportWrite(RtWorldImport * world, - RwChar * filename); - -extern RtWorldImport *RtWorldImportRead(RwChar * filename); - -extern RwInt32 RtWorldImportAddMaterial(RtWorldImport * nohsworld, - RpMaterial * material); - -extern RwInt32 RtWorldImportGetMaterialIndex(RtWorldImport * nohsworld, - RpMaterial * material); - -extern RtWorldImport *RtWorldImportForAllMaterials(RtWorldImport * - nohsworld, - RpMaterialCallBack - fpCallBack, - void *pData); - -extern void -RtWorldImportSetUserdataCallBacks(RtWorldImportDestroyVertexUserdataCallBack - destroyVertexUserdataCB, - RtWorldImportCloneVertexUserdataCallBack - cloneVertexUserdataCB, - RtWorldImportInterpVertexUserdataCallBack - interpVertexUserdataCB, - RtWorldImportSectorSetVertexUserdataCallBack - sectorSetVertexUserdata, - RtWorldImportDestroyPolygonUserdataCallBack - destroyPolygonUserdataCB, - RtWorldImportSplitPolygonUserdataCallBack - splitPolygonUserdataCB, - RtWorldImportSectorSetPolygonUserdataCallBack - sectorSetPolygonUserdata); - -extern void -RtWorldImportSetBuildCallBacks(RtWorldImportPartitionBuildCallBack - partitionBuildCB, - RtWorldImportTerminationBuildCallBack - terminationBuildCB); - -extern void -RtWorldImportSetPartitionStatistics(RtWorldImportBuildSector * buildSector, - RtWorldImportPartition * partition); - -extern void -RtWorldImportSetBuildCallBacksUserData(void *partitionUserData, - void *terminateUserData); - - -extern void -RtWorldImportSetStandardBuildPartitionSelector(RtWorldImportBuildPartitionSelector partitionSelector, void* userData); - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#define RtWorldImportParametersInitialize(_paramsPtr) \ - *(_paramsPtr) = *RtWorldImportParametersInit(); - -/* Back compatibility with former hints which only permitted type zero (shield) hints... */ -#define RtWorldImportHintsSet(_hints) \ -RtWorldImportHintsSetGroup(_hints, rtWORLDIMPORTSHIELDHINT); - -#define RtWorldImportHintsGet() \ -RtWorldImportHintsGetGroup(rtWORLDIMPORTSHIELDHINT); - - -#endif /* RTIMPORT_H */ - - - - - - - - - - - - - - - - - - - |