/* -----------------------------------------------------------------------------
-PicoModel Library
+ PicoModel Library
-Copyright (c) 2002, Randy Reddig & seaw0lf
-All rights reserved.
+ Copyright (c) 2002, Randy Reddig & seaw0lf
+ All rights reserved.
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
-Redistributions of source code must retain the above copyright notice, this list
-of conditions and the following disclaimer.
+ Redistributions of source code must retain the above copyright notice, this list
+ of conditions and the following disclaimer.
-Redistributions in binary form must reproduce the above copyright notice, this
-list of conditions and the following disclaimer in the documentation and/or
-other materials provided with the distribution.
+ Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
-Neither the names of the copyright holders nor the names of its contributors may
-be used to endorse or promote products derived from this software without
-specific prior written permission.
+ Neither the names of the copyright holders nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------ */
+ ----------------------------------------------------------------------------- */
{
#endif
+#include <stddef.h>
+
/* version */
-#define PICOMODEL_VERSION "0.8.20"
+#define PICOMODEL_VERSION "0.8.20"
/* constants */
-#define PICO_GROW_SHADERS 16
-#define PICO_GROW_SURFACES 16
-#define PICO_GROW_VERTEXES 1024
-#define PICO_GROW_INDEXES 1024
-#define PICO_GROW_ARRAYS 8
-#define PICO_GROW_FACES 256
-#define PICO_MAX_SPECIAL 8
-#define PICO_MAX_DEFAULT_EXTS 4 /* max default extensions per module */
+#define PICO_GROW_SHADERS 16
+#define PICO_GROW_SURFACES 16
+#define PICO_GROW_VERTEXES 1024
+#define PICO_GROW_INDEXES 1024
+#define PICO_GROW_ARRAYS 8
+#define PICO_GROW_FACES 256
+#define PICO_MAX_SPECIAL 8
+#define PICO_MAX_DEFAULT_EXTS 4 /* max default extensions per module */
/* types */
-typedef unsigned char picoByte_t;
-typedef float picoVec_t;
-typedef float picoVec2_t[ 2 ];
-typedef float picoVec3_t[ 3 ];
-typedef float picoVec4_t[ 4 ];
-typedef picoByte_t picoColor_t[ 4 ];
-typedef int picoIndex_t;
+typedef unsigned char picoByte_t;
+typedef float picoVec_t;
+typedef float picoVec2_t[ 2 ];
+typedef float picoVec3_t[ 3 ];
+typedef float picoVec4_t[ 4 ];
+typedef picoByte_t picoColor_t[ 4 ];
+typedef int picoIndex_t;
typedef enum
{
}
picoPrintLevel_t;
-typedef struct picoSurface_s picoSurface_t;
-typedef struct picoShader_s picoShader_t;
-typedef struct picoModel_s picoModel_t;
-typedef struct picoModule_s picoModule_t;
+typedef struct picoSurface_s picoSurface_t;
+typedef struct picoShader_s picoShader_t;
+typedef struct picoModel_s picoModel_t;
+typedef struct picoModule_s picoModule_t;
struct picoSurface_s
{
- void *data;
-
- picoModel_t *model; /* owner model */
-
- picoSurfaceType_t type;
- char *name; /* sea: surface name */
- picoShader_t *shader; /* ydnar: changed to ptr */
-
- int numVertexes, maxVertexes;
- picoVec3_t *xyz;
- picoVec3_t *normal;
-
- int numSTArrays, maxSTArrays;
- picoVec2_t **st;
-
- int numColorArrays, maxColorArrays;
- picoColor_t **color;
-
- int numIndexes, maxIndexes;
- picoIndex_t *index;
-
- int numFaceNormals, maxFaceNormals;
- picoVec3_t *faceNormal;
-
- int special[ PICO_MAX_SPECIAL ];
+ void *data;
+
+ picoModel_t *model; /* owner model */
+
+ picoSurfaceType_t type;
+ char *name; /* sea: surface name */
+ picoShader_t *shader; /* ydnar: changed to ptr */
+
+ int numVertexes, maxVertexes;
+ picoVec3_t *xyz;
+ picoVec3_t *normal;
+ picoIndex_t *smoothingGroup;
+
+ int numSTArrays, maxSTArrays;
+ picoVec2_t **st;
+
+ int numColorArrays, maxColorArrays;
+ picoColor_t **color;
+
+ int numIndexes, maxIndexes;
+ picoIndex_t *index;
+
+ int numFaceNormals, maxFaceNormals;
+ picoVec3_t *faceNormal;
+
+ int special[ PICO_MAX_SPECIAL ];
};
/* seaw0lf */
struct picoShader_s
{
- picoModel_t *model; /* owner model */
-
- char *name; /* shader name */
- char *mapName; /* shader file name (name of diffuse texturemap) */
- picoColor_t ambientColor; /* ambient color of mesh (rgba) */
- picoColor_t diffuseColor; /* diffuse color of mesh (rgba) */
- picoColor_t specularColor; /* specular color of mesh (rgba) */
- float transparency; /* transparency (0..1; 1 = 100% transparent) */
- float shininess; /* shininess (0..128; 128 = 100% shiny) */
+ picoModel_t *model; /* owner model */
+
+ char *name; /* shader name */
+ char *mapName; /* shader file name (name of diffuse texturemap) */
+ picoColor_t ambientColor; /* ambient color of mesh (rgba) */
+ picoColor_t diffuseColor; /* diffuse color of mesh (rgba) */
+ picoColor_t specularColor; /* specular color of mesh (rgba) */
+ float transparency; /* transparency (0..1; 1 = 100% transparent) */
+ float shininess; /* shininess (0..128; 128 = 100% shiny) */
};
struct picoModel_s
{
- void *data;
- char *name; /* model name */
- char *fileName; /* sea: model file name */
- int frameNum; /* sea: renamed to frameNum */
- int numFrames; /* sea: number of frames */
- picoVec3_t mins;
- picoVec3_t maxs;
-
- int numShaders, maxShaders;
- picoShader_t **shader;
-
- int numSurfaces, maxSurfaces;
- picoSurface_t **surface;
-
- const picoModule_t *module; /* sea */
+ void *data;
+ char *name; /* model name */
+ char *fileName; /* sea: model file name */
+ int frameNum; /* sea: renamed to frameNum */
+ int numFrames; /* sea: number of frames */
+ picoVec3_t mins;
+ picoVec3_t maxs;
+
+ int numShaders, maxShaders;
+ picoShader_t **shader;
+
+ int numSurfaces, maxSurfaces;
+ picoSurface_t **surface;
+
+ const picoModule_t *module; /* sea */
};
/* that there was an error. */
enum
{
- PICO_PMV_OK, /* file valid */
- PICO_PMV_ERROR, /* file not valid */
- PICO_PMV_ERROR_IDENT, /* unknown file magic (aka ident) */
- PICO_PMV_ERROR_VERSION, /* unsupported file version */
- PICO_PMV_ERROR_SIZE, /* file size error */
- PICO_PMV_ERROR_MEMORY, /* out of memory error */
+ PICO_PMV_OK, /* file valid */
+ PICO_PMV_ERROR, /* file not valid */
+ PICO_PMV_ERROR_IDENT, /* unknown file magic (aka ident) */
+ PICO_PMV_ERROR_VERSION, /* unsupported file version */
+ PICO_PMV_ERROR_SIZE, /* file size error */
+ PICO_PMV_ERROR_MEMORY, /* out of memory error */
};
/* convenience (makes it easy to add new params to the callbacks) */
#define PM_PARAMS_CANLOAD \
- char *fileName, const void *buffer, int bufSize
+ const char *fileName, const void *buffer, int bufSize
#define PM_PARAMS_LOAD \
- char *fileName, int frameNum, const void *buffer, int bufSize
+ const char *fileName, int frameNum, const void *buffer, int bufSize
#define PM_PARAMS_CANSAVE \
void
#define PM_PARAMS_SAVE \
- char *fileName, picoModel_t *model
+ const char *fileName, picoModel_t * model
/* pico file format module structure */
struct picoModule_s
{
- char *version; /* internal module version (e.g. '1.5-b2') */
+ char *version; /* internal module version (e.g. '1.5-b2') */
- char *displayName; /* string used to display in guis, etc. */
- char *authorName; /* author name (eg. 'My Real Name') */
- char *copyright; /* copyright year and holder (eg. '2002 My Company') */
+ char *displayName; /* string used to display in guis, etc. */
+ char *authorName; /* author name (eg. 'My Real Name') */
+ char *copyright; /* copyright year and holder (eg. '2002 My Company') */
- char *defaultExts[ PICO_MAX_DEFAULT_EXTS ]; /* default file extensions used by this file type */
- int (*canload)( PM_PARAMS_CANLOAD ); /* checks whether module can load given file (returns PMVR_*) */
- picoModel_t *(*load)( PM_PARAMS_LOAD ); /* parses model file data */
- int (*cansave)( PM_PARAMS_CANSAVE ); /* checks whether module can save (returns 1 or 0 and might spit out a message) */
- int (*save)( PM_PARAMS_SAVE ); /* saves a pico model in module's native model format */
+ char *defaultExts[ PICO_MAX_DEFAULT_EXTS ]; /* default file extensions used by this file type */
+ int ( *canload )( PM_PARAMS_CANLOAD ); /* checks whether module can load given file (returns PMVR_*) */
+ picoModel_t *( *load )( PM_PARAMS_LOAD ); /* parses model file data */
+ int ( *cansave )( PM_PARAMS_CANSAVE ); /* checks whether module can save (returns 1 or 0 and might spit out a message) */
+ int ( *save )( PM_PARAMS_SAVE ); /* saves a pico model in module's native model format */
};
/* general functions */
-int PicoInit( void );
-void PicoShutdown( void );
-int PicoError( void );
+int PicoInit( void );
+void PicoShutdown( void );
+int PicoError( void );
-void PicoSetMallocFunc( void *(*func)( size_t ) );
-void PicoSetFreeFunc( void (*func)( void* ) );
-void PicoSetLoadFileFunc( void (*func)( char*, unsigned char**, int* ) );
-void PicoSetFreeFileFunc( void (*func)( void* ) );
-void PicoSetPrintFunc( void (*func)( int, const char* ) );
+void PicoSetMallocFunc( void *( *func )( size_t ) );
+void PicoSetFreeFunc( void ( *func )( void* ) );
+void PicoSetLoadFileFunc( void ( *func )( const char*, unsigned char**, int* ) );
+void PicoSetFreeFileFunc( void ( *func )( void* ) );
+void PicoSetPrintFunc( void ( *func )( int, const char* ) );
-const picoModule_t **PicoModuleList( int *numModules );
+const picoModule_t **PicoModuleList( int *numModules );
-picoModel_t *PicoLoadModel( char *name, int frameNum );
+picoModel_t *PicoLoadModel( const char *name, int frameNum );
+typedef size_t ( *PicoInputStreamReadFunc )( void* inputStream, unsigned char* buffer, size_t length );
+picoModel_t* PicoModuleLoadModelStream( const picoModule_t* module, void* inputStream, PicoInputStreamReadFunc inputStreamRead, size_t streamLength, int frameNum, const char *fileName );
/* model functions */
-picoModel_t *PicoNewModel( void );
-void PicoFreeModel( picoModel_t *model );
-int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces );
+picoModel_t *PicoNewModel( void );
+void PicoFreeModel( picoModel_t *model );
+int PicoAdjustModel( picoModel_t *model, int numShaders, int numSurfaces );
/* shader functions */
-picoShader_t *PicoNewShader( picoModel_t *model );
-void PicoFreeShader( picoShader_t *shader );
-picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive );
+picoShader_t *PicoNewShader( picoModel_t *model );
+void PicoFreeShader( picoShader_t *shader );
+picoShader_t *PicoFindShader( picoModel_t *model, char *name, int caseSensitive );
/* surface functions */
-picoSurface_t *PicoNewSurface( picoModel_t *model );
-void PicoFreeSurface( picoSurface_t *surface );
-picoSurface_t *PicoFindSurface( picoModel_t *model, char *name, int caseSensitive );
-int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, int numColorArrays, int numIndexes, int numFaceNormals );
+picoSurface_t *PicoNewSurface( picoModel_t *model );
+void PicoFreeSurface( picoSurface_t *surface );
+picoSurface_t *PicoFindSurface( picoModel_t *model, char *name, int caseSensitive );
+int PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTArrays, int numColorArrays, int numIndexes, int numFaceNormals );
/* setter functions */
-void PicoSetModelName( picoModel_t *model, char *name );
-void PicoSetModelFileName( picoModel_t *model, char *fileName );
-void PicoSetModelFrameNum( picoModel_t *model, int frameNum );
-void PicoSetModelNumFrames( picoModel_t *model, int numFrames );
-void PicoSetModelData( picoModel_t *model, void *data );
-
-void PicoSetShaderName( picoShader_t *shader, char *name );
-void PicoSetShaderMapName( picoShader_t *shader, char *mapName );
-void PicoSetShaderAmbientColor( picoShader_t *shader, picoColor_t color );
-void PicoSetShaderDiffuseColor( picoShader_t *shader, picoColor_t color );
-void PicoSetShaderSpecularColor( picoShader_t *shader, picoColor_t color );
-void PicoSetShaderTransparency( picoShader_t *shader, float value );
-void PicoSetShaderShininess( picoShader_t *shader, float value );
-
-void PicoSetSurfaceData( picoSurface_t *surface, void *data );
-void PicoSetSurfaceType( picoSurface_t *surface, picoSurfaceType_t type );
-void PicoSetSurfaceName( picoSurface_t *surface, char *name );
-void PicoSetSurfaceShader( picoSurface_t *surface, picoShader_t *shader );
-void PicoSetSurfaceXYZ( picoSurface_t *surface, int num, picoVec3_t xyz );
-void PicoSetSurfaceNormal( picoSurface_t *surface, int num, picoVec3_t normal );
-void PicoSetSurfaceST( picoSurface_t *surface, int array, int num, picoVec2_t st );
-void PicoSetSurfaceColor( picoSurface_t *surface, int array, int num, picoColor_t color );
-void PicoSetSurfaceIndex( picoSurface_t *surface, int num, picoIndex_t index );
-void PicoSetSurfaceIndexes( picoSurface_t *surface, int num, picoIndex_t *index, int count );
-void PicoSetFaceNormal( picoSurface_t *surface, int num, picoVec3_t normal );
-void PicoSetSurfaceSpecial( picoSurface_t *surface, int num, int special );
+void PicoSetModelName( picoModel_t *model, const char *name );
+void PicoSetModelFileName( picoModel_t *model, const char *fileName );
+void PicoSetModelFrameNum( picoModel_t *model, int frameNum );
+void PicoSetModelNumFrames( picoModel_t *model, int numFrames );
+void PicoSetModelData( picoModel_t *model, void *data );
+
+void PicoSetShaderName( picoShader_t *shader, char *name );
+void PicoSetShaderMapName( picoShader_t *shader, char *mapName );
+void PicoSetShaderAmbientColor( picoShader_t *shader, picoColor_t color );
+void PicoSetShaderDiffuseColor( picoShader_t *shader, picoColor_t color );
+void PicoSetShaderSpecularColor( picoShader_t *shader, picoColor_t color );
+void PicoSetShaderTransparency( picoShader_t *shader, float value );
+void PicoSetShaderShininess( picoShader_t *shader, float value );
+
+void PicoSetSurfaceData( picoSurface_t *surface, void *data );
+void PicoSetSurfaceType( picoSurface_t *surface, picoSurfaceType_t type );
+void PicoSetSurfaceName( picoSurface_t *surface, const char *name );
+void PicoSetSurfaceShader( picoSurface_t *surface, picoShader_t *shader );
+void PicoSetSurfaceXYZ( picoSurface_t *surface, int num, picoVec3_t xyz );
+void PicoSetSurfaceNormal( picoSurface_t *surface, int num, picoVec3_t normal );
+void PicoSetSurfaceST( picoSurface_t *surface, int array, int num, picoVec2_t st );
+void PicoSetSurfaceColor( picoSurface_t *surface, int array, int num, const picoColor_t color );
+void PicoSetSurfaceIndex( picoSurface_t *surface, int num, picoIndex_t index );
+void PicoSetSurfaceIndexes( picoSurface_t *surface, int num, picoIndex_t *index, int count );
+void PicoSetFaceNormal( picoSurface_t *surface, int num, picoVec3_t normal );
+void PicoSetSurfaceSpecial( picoSurface_t *surface, int num, int special );
+void PicoSetSurfaceSmoothingGroup( picoSurface_t *surface, int num, picoIndex_t smoothingGroup );
/* getter functions */
-char *PicoGetModelName( picoModel_t *model );
-char *PicoGetModelFileName( picoModel_t *model );
-int PicoGetModelFrameNum( picoModel_t *model );
-int PicoGetModelNumFrames( picoModel_t *model );
-void *PicoGetModelData( picoModel_t *model );
-int PicoGetModelNumShaders( picoModel_t *model );
-picoShader_t *PicoGetModelShader( picoModel_t *model, int num ); /* sea */
-int PicoGetModelNumSurfaces( picoModel_t *model );
-picoSurface_t *PicoGetModelSurface( picoModel_t *model, int num );
-int PicoGetModelTotalVertexes( picoModel_t *model );
-int PicoGetModelTotalIndexes( picoModel_t *model );
-
-char *PicoGetShaderName( picoShader_t *shader );
-char *PicoGetShaderMapName( picoShader_t *shader );
-picoByte_t *PicoGetShaderAmbientColor( picoShader_t *shader );
-picoByte_t *PicoGetShaderDiffuseColor( picoShader_t *shader );
-picoByte_t *PicoGetShaderSpecularColor( picoShader_t *shader );
-float PicoGetShaderTransparency( picoShader_t *shader );
-float PicoGetShaderShininess( picoShader_t *shader );
-
-void *PicoGetSurfaceData( picoSurface_t *surface );
-char *PicoGetSurfaceName( picoSurface_t *surface ); /* sea */
-picoSurfaceType_t PicoGetSurfaceType( picoSurface_t *surface );
-char *PicoGetSurfaceName( picoSurface_t *surface );
-picoShader_t *PicoGetSurfaceShader( picoSurface_t *surface ); /* sea */
-
-int PicoGetSurfaceNumVertexes( picoSurface_t *surface );
-picoVec_t *PicoGetSurfaceXYZ( picoSurface_t *surface, int num );
-picoVec_t *PicoGetSurfaceNormal( picoSurface_t *surface, int num );
-picoVec_t *PicoGetSurfaceST( picoSurface_t *surface, int array, int num );
-picoByte_t *PicoGetSurfaceColor( picoSurface_t *surface, int array, int num );
-int PicoGetSurfaceNumIndexes( picoSurface_t *surface );
-picoIndex_t PicoGetSurfaceIndex( picoSurface_t *surface, int num );
-picoIndex_t *PicoGetSurfaceIndexes( picoSurface_t *surface, int num );
-picoVec_t *PicoGetFaceNormal( picoSurface_t *surface, int num );
-int PicoGetSurfaceSpecial( picoSurface_t *surface, int num );
+char *PicoGetModelName( picoModel_t *model );
+char *PicoGetModelFileName( picoModel_t *model );
+int PicoGetModelFrameNum( picoModel_t *model );
+int PicoGetModelNumFrames( picoModel_t *model );
+void *PicoGetModelData( picoModel_t *model );
+int PicoGetModelNumShaders( picoModel_t *model );
+picoShader_t *PicoGetModelShader( picoModel_t *model, int num ); /* sea */
+int PicoGetModelNumSurfaces( picoModel_t *model );
+picoSurface_t *PicoGetModelSurface( picoModel_t *model, int num );
+int PicoGetModelTotalVertexes( picoModel_t *model );
+int PicoGetModelTotalIndexes( picoModel_t *model );
+
+char *PicoGetShaderName( picoShader_t *shader );
+char *PicoGetShaderMapName( picoShader_t *shader );
+picoByte_t *PicoGetShaderAmbientColor( picoShader_t *shader );
+picoByte_t *PicoGetShaderDiffuseColor( picoShader_t *shader );
+picoByte_t *PicoGetShaderSpecularColor( picoShader_t *shader );
+float PicoGetShaderTransparency( picoShader_t *shader );
+float PicoGetShaderShininess( picoShader_t *shader );
+
+void *PicoGetSurfaceData( picoSurface_t *surface );
+char *PicoGetSurfaceName( picoSurface_t *surface ); /* sea */
+picoSurfaceType_t PicoGetSurfaceType( picoSurface_t *surface );
+char *PicoGetSurfaceName( picoSurface_t *surface );
+picoShader_t *PicoGetSurfaceShader( picoSurface_t *surface ); /* sea */
+
+int PicoGetSurfaceNumVertexes( picoSurface_t *surface );
+picoVec_t *PicoGetSurfaceXYZ( picoSurface_t *surface, int num );
+picoVec_t *PicoGetSurfaceNormal( picoSurface_t *surface, int num );
+picoVec_t *PicoGetSurfaceST( picoSurface_t *surface, int array, int num );
+picoByte_t *PicoGetSurfaceColor( picoSurface_t *surface, int array, int num );
+int PicoGetSurfaceNumIndexes( picoSurface_t *surface );
+picoIndex_t PicoGetSurfaceIndex( picoSurface_t *surface, int num );
+picoIndex_t *PicoGetSurfaceIndexes( picoSurface_t *surface, int num );
+picoVec_t *PicoGetFaceNormal( picoSurface_t *surface, int num );
+int PicoGetSurfaceSpecial( picoSurface_t *surface, int num );
/* hashtable related functions */
typedef struct picoVertexCombinationData_s
{
- picoVec3_t xyz, normal;
- picoVec2_t st;
- picoColor_t color;
+ picoVec3_t xyz, normal;
+ picoVec2_t st;
+ picoColor_t color;
} picoVertexCombinationData_t;
typedef struct picoVertexCombinationHash_s
{
- picoVertexCombinationData_t vcd;
- picoIndex_t index;
+ picoVertexCombinationData_t vcd;
+ picoIndex_t index;
- void *data;
+ void *data;
- struct picoVertexCombinationHash_s *next;
+ struct picoVertexCombinationHash_s *next;
} picoVertexCombinationHash_t;
-int PicoGetHashTableSize( void );
-unsigned int PicoVertexCoordGenerateHash( picoVec3_t xyz );
-picoVertexCombinationHash_t **PicoNewVertexCombinationHashTable( void );
-void PicoFreeVertexCombinationHashTable( picoVertexCombinationHash_t **hashTable );
-picoVertexCombinationHash_t *PicoFindVertexCombinationInHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color );
+int PicoGetHashTableSize( void );
+unsigned int PicoVertexCoordGenerateHash( picoVec3_t xyz );
+picoVertexCombinationHash_t **PicoNewVertexCombinationHashTable( void );
+void PicoFreeVertexCombinationHashTable( picoVertexCombinationHash_t **hashTable );
+picoVertexCombinationHash_t *PicoFindVertexCombinationInHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color );
picoVertexCombinationHash_t *PicoAddVertexCombinationToHashTable( picoVertexCombinationHash_t **hashTable, picoVec3_t xyz, picoVec3_t normal, picoVec3_t st, picoColor_t color, picoIndex_t index );
/* specialized functions */
-int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, picoColor_t *color );
-void PicoFixSurfaceNormals( picoSurface_t *surface );
-int PicoRemapModel( picoModel_t *model, char *remapFile );
+int PicoFindSurfaceVertexNum( picoSurface_t *surface, picoVec3_t xyz, picoVec3_t normal, int numSTs, picoVec2_t *st, int numColors, const picoColor_t *color, picoIndex_t smoothingGroup );
+void PicoFixSurfaceNormals( picoSurface_t *surface );
+int PicoRemapModel( picoModel_t *model, char *remapFile );
-void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** normals, int numSTs, picoVec2_t **st, int numColors, picoColor_t **colors, picoShader_t* shader );
+void PicoAddTriangleToModel( picoModel_t *model, picoVec3_t** xyz, picoVec3_t** normals, int numSTs, picoVec2_t **st, int numColors, const picoColor_t **colors, picoShader_t* shader, const char *name, picoIndex_t* smoothingGroup );
/* end marker */
#ifdef __cplusplus