|
|
//**************************************************************************
//
// 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); };
|