windows-nt/Source/XPSP1/NT/multimedia/opengl/pmesh/cpmesh.h
2020-09-26 16:20:57 +08:00

150 lines
3.7 KiB
C++

/**
** 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_