bgfx/3rdparty/openctm/lib/internal.h
2012-10-07 20:41:18 -07:00

147 lines
6 KiB
C

//-----------------------------------------------------------------------------
// Product: OpenCTM
// File: internal.h
// Description: Internal (private) declarations, types and function prototypes.
//-----------------------------------------------------------------------------
// Copyright (c) 2009-2010 Marcus Geelnard
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not
// claim that you wrote the original software. If you use this software
// in a product, an acknowledgment in the product documentation would be
// appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such, and must not
// be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source
// distribution.
//-----------------------------------------------------------------------------
#ifndef __OPENCTM_INTERNAL_H_
#define __OPENCTM_INTERNAL_H_
//-----------------------------------------------------------------------------
// Constants
//-----------------------------------------------------------------------------
// OpenCTM file format version (v5).
#define _CTM_FORMAT_VERSION 0x00000005
// Flags for the Mesh flags field of the file header
#define _CTM_HAS_NORMALS_BIT 0x00000001
//-----------------------------------------------------------------------------
// _CTMfloatmap - Internal representation of a floating point based vertex map
// (used for UV maps and attribute maps).
//-----------------------------------------------------------------------------
typedef struct _CTMfloatmap_struct _CTMfloatmap;
struct _CTMfloatmap_struct {
char * mName; // Unique name
char * mFileName; // File name reference (used only for UV maps)
CTMfloat mPrecision; // Precision for this map
CTMfloat * mValues; // Attribute/UV coordinate values (per vertex)
_CTMfloatmap * mNext; // Pointer to the next map in the list (linked list)
};
//-----------------------------------------------------------------------------
// _CTMcontext - Internal CTM context structure.
//-----------------------------------------------------------------------------
typedef struct {
// Context mode (import or export)
CTMenum mMode;
// Vertices
CTMfloat * mVertices;
CTMuint mVertexCount;
// Indices
CTMuint * mIndices;
CTMuint mTriangleCount;
// Normals (optional)
CTMfloat * mNormals;
// Multiple sets of UV coordinate maps (optional)
CTMuint mUVMapCount;
_CTMfloatmap * mUVMaps;
// Multiple sets of custom vertex attribute maps (optional)
CTMuint mAttribMapCount;
_CTMfloatmap * mAttribMaps;
// Last error code
CTMenum mError;
// The selected compression method
CTMenum mMethod;
// The selected compression level
CTMuint mCompressionLevel;
// Vertex coordinate precision
CTMfloat mVertexPrecision;
// Normal precision (angular + magnitude)
CTMfloat mNormalPrecision;
// File comment
char * mFileComment;
// Read() function pointer
CTMreadfn mReadFn;
// Write() function pointer
CTMwritefn mWriteFn;
// User data (for stream read/write - usually the stream handle)
void * mUserData;
} _CTMcontext;
//-----------------------------------------------------------------------------
// Macros
//-----------------------------------------------------------------------------
#define FOURCC(str) (((CTMuint) str[0]) | (((CTMuint) str[1]) << 8) | \
(((CTMuint) str[2]) << 16) | (((CTMuint) str[3]) << 24))
//-----------------------------------------------------------------------------
// Funcion prototypes for stream.c
//-----------------------------------------------------------------------------
CTMuint _ctmStreamRead(_CTMcontext * self, void * aBuf, CTMuint aCount);
CTMuint _ctmStreamWrite(_CTMcontext * self, void * aBuf, CTMuint aCount);
CTMuint _ctmStreamReadUINT(_CTMcontext * self);
void _ctmStreamWriteUINT(_CTMcontext * self, CTMuint aValue);
CTMfloat _ctmStreamReadFLOAT(_CTMcontext * self);
void _ctmStreamWriteFLOAT(_CTMcontext * self, CTMfloat aValue);
void _ctmStreamReadSTRING(_CTMcontext * self, char ** aValue);
void _ctmStreamWriteSTRING(_CTMcontext * self, const char * aValue);
int _ctmStreamReadPackedInts(_CTMcontext * self, CTMint * aData, CTMuint aCount, CTMuint aSize, CTMint aSignedInts);
int _ctmStreamWritePackedInts(_CTMcontext * self, CTMint * aData, CTMuint aCount, CTMuint aSize, CTMint aSignedInts);
int _ctmStreamReadPackedFloats(_CTMcontext * self, CTMfloat * aData, CTMuint aCount, CTMuint aSize);
int _ctmStreamWritePackedFloats(_CTMcontext * self, CTMfloat * aData, CTMuint aCount, CTMuint aSize);
//-----------------------------------------------------------------------------
// Funcion prototypes for compressRAW.c
//-----------------------------------------------------------------------------
int _ctmCompressMesh_RAW(_CTMcontext * self);
int _ctmUncompressMesh_RAW(_CTMcontext * self);
//-----------------------------------------------------------------------------
// Funcion prototypes for compressMG1.c
//-----------------------------------------------------------------------------
int _ctmCompressMesh_MG1(_CTMcontext * self);
int _ctmUncompressMesh_MG1(_CTMcontext * self);
//-----------------------------------------------------------------------------
// Funcion prototypes for compressMG2.c
//-----------------------------------------------------------------------------
int _ctmCompressMesh_MG2(_CTMcontext * self);
int _ctmUncompressMesh_MG2(_CTMcontext * self);
#endif // __OPENCTM_INTERNAL_H_