goat3d

annotate libs/openctm/internal.h @ 14:188c697b3b49

- added a document describing the goat3d file format chunk hierarchy - started an alternative XML-based file format - added the openctm library
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 26 Sep 2013 04:47:05 +0300
parents
children
rev   line source
nuclear@14 1 //-----------------------------------------------------------------------------
nuclear@14 2 // Product: OpenCTM
nuclear@14 3 // File: internal.h
nuclear@14 4 // Description: Internal (private) declarations, types and function prototypes.
nuclear@14 5 //-----------------------------------------------------------------------------
nuclear@14 6 // Copyright (c) 2009-2010 Marcus Geelnard
nuclear@14 7 //
nuclear@14 8 // This software is provided 'as-is', without any express or implied
nuclear@14 9 // warranty. In no event will the authors be held liable for any damages
nuclear@14 10 // arising from the use of this software.
nuclear@14 11 //
nuclear@14 12 // Permission is granted to anyone to use this software for any purpose,
nuclear@14 13 // including commercial applications, and to alter it and redistribute it
nuclear@14 14 // freely, subject to the following restrictions:
nuclear@14 15 //
nuclear@14 16 // 1. The origin of this software must not be misrepresented; you must not
nuclear@14 17 // claim that you wrote the original software. If you use this software
nuclear@14 18 // in a product, an acknowledgment in the product documentation would be
nuclear@14 19 // appreciated but is not required.
nuclear@14 20 //
nuclear@14 21 // 2. Altered source versions must be plainly marked as such, and must not
nuclear@14 22 // be misrepresented as being the original software.
nuclear@14 23 //
nuclear@14 24 // 3. This notice may not be removed or altered from any source
nuclear@14 25 // distribution.
nuclear@14 26 //-----------------------------------------------------------------------------
nuclear@14 27
nuclear@14 28 #ifndef __OPENCTM_INTERNAL_H_
nuclear@14 29 #define __OPENCTM_INTERNAL_H_
nuclear@14 30
nuclear@14 31 //-----------------------------------------------------------------------------
nuclear@14 32 // Constants
nuclear@14 33 //-----------------------------------------------------------------------------
nuclear@14 34 // OpenCTM file format version (v5).
nuclear@14 35 #define _CTM_FORMAT_VERSION 0x00000005
nuclear@14 36
nuclear@14 37 // Flags for the Mesh flags field of the file header
nuclear@14 38 #define _CTM_HAS_NORMALS_BIT 0x00000001
nuclear@14 39
nuclear@14 40 //-----------------------------------------------------------------------------
nuclear@14 41 // _CTMfloatmap - Internal representation of a floating point based vertex map
nuclear@14 42 // (used for UV maps and attribute maps).
nuclear@14 43 //-----------------------------------------------------------------------------
nuclear@14 44 typedef struct _CTMfloatmap_struct _CTMfloatmap;
nuclear@14 45 struct _CTMfloatmap_struct {
nuclear@14 46 char * mName; // Unique name
nuclear@14 47 char * mFileName; // File name reference (used only for UV maps)
nuclear@14 48 CTMfloat mPrecision; // Precision for this map
nuclear@14 49 CTMfloat * mValues; // Attribute/UV coordinate values (per vertex)
nuclear@14 50 _CTMfloatmap * mNext; // Pointer to the next map in the list (linked list)
nuclear@14 51 };
nuclear@14 52
nuclear@14 53 //-----------------------------------------------------------------------------
nuclear@14 54 // _CTMcontext - Internal CTM context structure.
nuclear@14 55 //-----------------------------------------------------------------------------
nuclear@14 56 typedef struct {
nuclear@14 57 // Context mode (import or export)
nuclear@14 58 CTMenum mMode;
nuclear@14 59
nuclear@14 60 // Vertices
nuclear@14 61 CTMfloat * mVertices;
nuclear@14 62 CTMuint mVertexCount;
nuclear@14 63
nuclear@14 64 // Indices
nuclear@14 65 CTMuint * mIndices;
nuclear@14 66 CTMuint mTriangleCount;
nuclear@14 67
nuclear@14 68 // Normals (optional)
nuclear@14 69 CTMfloat * mNormals;
nuclear@14 70
nuclear@14 71 // Multiple sets of UV coordinate maps (optional)
nuclear@14 72 CTMuint mUVMapCount;
nuclear@14 73 _CTMfloatmap * mUVMaps;
nuclear@14 74
nuclear@14 75 // Multiple sets of custom vertex attribute maps (optional)
nuclear@14 76 CTMuint mAttribMapCount;
nuclear@14 77 _CTMfloatmap * mAttribMaps;
nuclear@14 78
nuclear@14 79 // Last error code
nuclear@14 80 CTMenum mError;
nuclear@14 81
nuclear@14 82 // The selected compression method
nuclear@14 83 CTMenum mMethod;
nuclear@14 84
nuclear@14 85 // The selected compression level
nuclear@14 86 CTMuint mCompressionLevel;
nuclear@14 87
nuclear@14 88 // Vertex coordinate precision
nuclear@14 89 CTMfloat mVertexPrecision;
nuclear@14 90
nuclear@14 91 // Normal precision (angular + magnitude)
nuclear@14 92 CTMfloat mNormalPrecision;
nuclear@14 93
nuclear@14 94 // File comment
nuclear@14 95 char * mFileComment;
nuclear@14 96
nuclear@14 97 // Read() function pointer
nuclear@14 98 CTMreadfn mReadFn;
nuclear@14 99
nuclear@14 100 // Write() function pointer
nuclear@14 101 CTMwritefn mWriteFn;
nuclear@14 102
nuclear@14 103 // User data (for stream read/write - usually the stream handle)
nuclear@14 104 void * mUserData;
nuclear@14 105 } _CTMcontext;
nuclear@14 106
nuclear@14 107 //-----------------------------------------------------------------------------
nuclear@14 108 // Macros
nuclear@14 109 //-----------------------------------------------------------------------------
nuclear@14 110 #define FOURCC(str) (((CTMuint) str[0]) | (((CTMuint) str[1]) << 8) | \
nuclear@14 111 (((CTMuint) str[2]) << 16) | (((CTMuint) str[3]) << 24))
nuclear@14 112
nuclear@14 113 //-----------------------------------------------------------------------------
nuclear@14 114 // Funcion prototypes for stream.c
nuclear@14 115 //-----------------------------------------------------------------------------
nuclear@14 116 CTMuint _ctmStreamRead(_CTMcontext * self, void * aBuf, CTMuint aCount);
nuclear@14 117 CTMuint _ctmStreamWrite(_CTMcontext * self, void * aBuf, CTMuint aCount);
nuclear@14 118 CTMuint _ctmStreamReadUINT(_CTMcontext * self);
nuclear@14 119 void _ctmStreamWriteUINT(_CTMcontext * self, CTMuint aValue);
nuclear@14 120 CTMfloat _ctmStreamReadFLOAT(_CTMcontext * self);
nuclear@14 121 void _ctmStreamWriteFLOAT(_CTMcontext * self, CTMfloat aValue);
nuclear@14 122 void _ctmStreamReadSTRING(_CTMcontext * self, char ** aValue);
nuclear@14 123 void _ctmStreamWriteSTRING(_CTMcontext * self, const char * aValue);
nuclear@14 124 int _ctmStreamReadPackedInts(_CTMcontext * self, CTMint * aData, CTMuint aCount, CTMuint aSize, CTMint aSignedInts);
nuclear@14 125 int _ctmStreamWritePackedInts(_CTMcontext * self, CTMint * aData, CTMuint aCount, CTMuint aSize, CTMint aSignedInts);
nuclear@14 126 int _ctmStreamReadPackedFloats(_CTMcontext * self, CTMfloat * aData, CTMuint aCount, CTMuint aSize);
nuclear@14 127 int _ctmStreamWritePackedFloats(_CTMcontext * self, CTMfloat * aData, CTMuint aCount, CTMuint aSize);
nuclear@14 128
nuclear@14 129 //-----------------------------------------------------------------------------
nuclear@14 130 // Funcion prototypes for compressRAW.c
nuclear@14 131 //-----------------------------------------------------------------------------
nuclear@14 132 int _ctmCompressMesh_RAW(_CTMcontext * self);
nuclear@14 133 int _ctmUncompressMesh_RAW(_CTMcontext * self);
nuclear@14 134
nuclear@14 135 //-----------------------------------------------------------------------------
nuclear@14 136 // Funcion prototypes for compressMG1.c
nuclear@14 137 //-----------------------------------------------------------------------------
nuclear@14 138 int _ctmCompressMesh_MG1(_CTMcontext * self);
nuclear@14 139 int _ctmUncompressMesh_MG1(_CTMcontext * self);
nuclear@14 140
nuclear@14 141 //-----------------------------------------------------------------------------
nuclear@14 142 // Funcion prototypes for compressMG2.c
nuclear@14 143 //-----------------------------------------------------------------------------
nuclear@14 144 int _ctmCompressMesh_MG2(_CTMcontext * self);
nuclear@14 145 int _ctmUncompressMesh_MG2(_CTMcontext * self);
nuclear@14 146
nuclear@14 147 #endif // __OPENCTM_INTERNAL_H_