/** ** File : cpmesh.h ** Description: Interface implementations **/ #ifndef _cpmesh_h_ #define _cpmesh_h_ #include "global.h" #include "interface.h" #include "aglmesh.h" #include "excptn.h" #include "vsplit.h" #include "aglmesh.h" /************************************************************************* Defines *************************************************************************/ #define DLLEXPORT __declspec(dllexport) /************************************************************************* Structs and Classes *************************************************************************/ class CPMeshGL: public IPMesh, public IPMeshGL, public CAugGlMesh { private: /* * Enums used for compression */ enum { NORM_EXPLICIT, // All normal explicitly stored NORM_NONE, // No normals stored. Generate from faces NORM_PARTIAL, NORM_MASK = 3 }; // Texture coordinates stored or not. // This is or'ed with normal flags enum { TEX_EXPLICIT = 4, TEX_NONE, TEX_MASK = 1<<2 }; enum { INTC_MAX, // Fixed integer size to fit the largest possible value INTC_MUL8, // Integer size based on the range. // Clamped to multiple of 8 bits INTC_VAR // Integer size based on range: ceil(log(maxval)/log(2)) }; /* * COM overhead */ DWORD m_cRef; // Reference count /* * BaseMesh data */ DWORD m_baseVertices; // # of vertices. DWORD m_baseWedges; // # of wedges. DWORD m_baseFaces; // # of faces. /* * Current position in the Vsplit array */ DWORD m_currPos; /* * Max data obtained from the PMesh header. * Parameters for the fully detailed mesh. */ DWORD m_maxVertices; // # of vertices. DWORD m_maxWedges; // # of wedges. DWORD m_maxFaces; // # of faces. DWORD m_maxMaterials; // # of materials. DWORD m_maxTextures; // # of textures. /* * Array of Vsplit record, possibly shared */ VsplitArray* m_vsarr; /* * No idea what this is for */ HRESULT LoadStream(IStream* is, DWORD*, DWORD*); public: /* * Constructor-Destructor */ CPMeshGL(); ~CPMeshGL(); /* * IUnknown Methods */ STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP QueryInterface(REFIID, LPVOID FAR*); /* * IPMesh Methods */ //Loads STDMETHODIMP Load(const char* const, const char* const, DWORD* const, DWORD* const, LPPMESHLOADCB); STDMETHODIMP LoadStat(const char* const, const char* const, DWORD* const, DWORD* const) { return E_NOTIMPL; }; // Gets STDMETHODIMP GetNumFaces(DWORD* const); STDMETHODIMP GetNumVertices(DWORD* const); STDMETHODIMP GetMaxVertices(DWORD* const); STDMETHODIMP GetMaxFaces(DWORD* const); //Sets STDMETHODIMP SetNumFaces(DWORD); STDMETHODIMP SetNumVertices(DWORD); //Geomorph stuff STDMETHODIMP GeomorphToVertices(LPPMGEOMORPH, DWORD* const) { return E_NOTIMPL; }; STDMETHODIMP GeomorphToFaces(LPPMGEOMORPH, DWORD* const) { return E_NOTIMPL; }; STDMETHODIMP ClonePM(IPMesh* const) { return E_NOTIMPL; }; // IPMeshGL Methods STDMETHODIMP Initialize (void); STDMETHODIMP Render (void); }; DLLEXPORT HRESULT CreatePMeshGL (REFIID, LPVOID FAR *, //dunno what this is for IUnknown *, DWORD); #endif //_cpmesh_h_