mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-12-01 11:56:58 -05:00
148 lines
6 KiB
C
148 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_
|