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