windows-nt/Source/XPSP1/NT/multimedia/directx/dxvb/dx7vb/frmsave.h
2020-09-26 16:20:57 +08:00

177 lines
4.4 KiB
C++

//**************************************************************************
//
// Copyright (C) Microsoft Corporation, 1998 - 1999 All Rights Reserved.
//
// File: frmsave.h
//
// Description: Save LPDIRECT3DRMFRAME to an x file.
//
// History:
// 011/06/98 CongpaY Created
//
//**************************************************************************
typedef struct _Header {
WORD major;
WORD minor;
DWORD flags;
} Header;
typedef struct _ColorRGBA {
float r;
float g;
float b;
float a;
} ColorRGBA;
typedef struct _ColorRGB {
float r;
float g;
float b;
} ColorRGB;
typedef struct _IndexedColor {
DWORD index;
ColorRGBA color;
} IndexedColor;
typedef struct _VertexColors {
DWORD cVertices;
IndexedColor vertexColors[1];
} VertexColors;
typedef struct _Boolean2d {
BOOL u;
BOOL v;
} Boolean2d;
typedef struct _FaceWraps {
DWORD cFaces;
Boolean2d faceWraps[1];
} FaceWraps;
typedef struct _Coords2d {
float u;
float v;
} Coords2d;
typedef struct _TextureCoords {
DWORD cVertices;
Coords2d textureCoords[1];
} TextureCoords;
typedef struct _FaceMaterials {
DWORD cMaterials;
DWORD cFaceIndexes;
DWORD faceIndexes[1];
} FaceMaterials;
typedef struct _BaseMaterial {
ColorRGBA faceColor;
float power;
ColorRGB specularColor;
ColorRGB emissiveColor;
} BaseMaterial;
typedef struct _FaceMaterial {
D3DCOLOR faceColor;
LPDIRECT3DRMMATERIAL pMaterial;
LPDIRECT3DRMTEXTURE pTexture;
_FaceMaterial *pNext;
} FaceMaterial;
typedef void (__stdcall *CREATEXFILE)( IDirectXFile **);
class FaceMaterialList
{
DWORD cElements;
FaceMaterial *pFirst;
public:
FaceMaterialList();
~FaceMaterialList();
DWORD Find(D3DCOLOR faceColor,
LPDIRECT3DRMMATERIAL pMaterial,
LPDIRECT3DRMTEXTURE pTexture);
DWORD Count() { return cElements; }
FaceMaterial *First() { return pFirst; }
};
class NameEntry {
public:
LPSTR pName;
NameEntry *pNext;
};
class NameList
{
NameEntry *pFirst;
NameEntry **ppLast;
public:
NameList();
~NameList();
void Add(LPSTR pName);
};
class Saver {
public:
Saver();
~Saver();
HRESULT Init(LPCSTR filename,
D3DRMXOFFORMAT d3dFormat,
D3DRMSAVEOPTIONS d3dSaveFlags);
HRESULT SaveHeaderObject();
HRESULT SaveFrame(LPDIRECT3DRMFRAME3 pFrame,
LPDIRECT3DRMFRAME3 pRefFrame = NULL,
LPDIRECTXFILEDATA pRefFrameObj = NULL);
private:
LPDIRECTXFILE pXFile;
LPDIRECTXFILESAVEOBJECT pSave;
D3DRMXOFFORMAT d3dFormat;
D3DRMSAVEOPTIONS d3dSaveFlags;
NameList lNames;
HRESULT SaveFrameTransform(LPDIRECTXFILEDATA pFrameObj,
LPDIRECT3DRMFRAME3 pFrame,
LPDIRECT3DRMFRAME3 pRefFrame);
HRESULT SaveMeshBuilder(LPDIRECTXFILEDATA pFrameObj,
LPDIRECT3DRMMESHBUILDER3 pMeshBuilder);
HRESULT CreateMeshObject(DWORD cVertices,
DWORD cFaces,
DWORD dwFaceData,
LPDWORD pdwFaceData,
LPDIRECT3DRMMESHBUILDER3 pMeshBuilder,
LPDIRECTXFILEDATA *ppMeshObj);
HRESULT CreateNormalsObject(LPDIRECTXFILEDATA pMeshObj,
DWORD cNormals,
DWORD cFaces,
DWORD dwFaceData,
LPDWORD pdwFaceData,
LPDIRECT3DRMMESHBUILDER3 pMeshBuilder);
HRESULT CreateVertexColorsObject(LPDIRECTXFILEDATA pMeshObj,
DWORD cVertices,
LPDIRECT3DRMMESHBUILDER3 pMeshBuilder);
HRESULT CreateMaterialListObject(LPDIRECTXFILEDATA pMeshObj,
LPDIRECT3DRMFACEARRAY pFaceArray);
HRESULT CreateMaterialObject(LPDIRECTXFILEDATA pMatListObj,
FaceMaterial *pMat);
HRESULT CreateTextureWrapsObject(LPDIRECTXFILEDATA pMeshObj,
LPDIRECT3DRMFACEARRAY pFaceArray);
HRESULT CreateTextureCoordsObject(LPDIRECTXFILEDATA pMeshObj,
DWORD cVertices,
LPDIRECT3DRMMESHBUILDER3 pMeshBuilder);
};