/*===========================================================================
 *
 * D3DCom.H - Dave Humphrey (uesp@m0use.net), 30 October 2000
 *
 *=========================================================================*/
#ifndef __D3DCOM_H
#define __D3DCOM_H

#define D3D_OVERLOADS

	/* Required Includes */
#include <windows.h>
#include <direct.h>
#include <d3drmwin.h>
#include "d3drmobj.h"
#include "genutil.h"


/*===========================================================================
 *
 * Begin Defines
 *
 *=========================================================================*/
 
	/* Defines what we should query for when creating D3D/DD objects */
  #define DIRECT3D_CLASS_OBJECT   2
  #define DIRECTDRAW_CLASS_OBJECT 1

/*===========================================================================
 *		End of Defines
 *=========================================================================*/


/*===========================================================================
 *
 * Begin Type Definitions
 *
 *=========================================================================*/
 
	/* Define the default D3DRM types */
  typedef interface IDirect3DRM2	    CDirect3D, *pCDirect3D, **ppCDirect3D;
  typedef interface IDirectDraw		    CDirectDraw, *pCDirectDraw, **ppCDirectDraw;
  typedef interface IDirectDraw2	    CDirectDraw2, *pCDirectDraw2, **ppCDirectDraw2;
  typedef interface IDirectDrawClipper	    CDDClipper, *pCDDClipper, **ppCDDClipper; 
  typedef interface IDirect3DRMFrame2       CD3DFrame, *pCD3DFrame, **ppCD3DFrame;
  typedef interface IDirect3DRMFrameArray   CD3DFrameArray, *pCD3DFrameArray, **ppCD3DFrameArray;
  typedef interface IDirect3DRMDevice2      CD3DDevice, *pCD3DDevice, **ppCD3DDevice;
  typedef interface IDirect3DRMViewport     CD3DView, *pCD3DView, **ppCD3DView;
  typedef interface IDirectDrawSurface	    CDDSurface, *pCDDSurface, **ppCDDSurface;
  typedef interface IDirect3DRMFace	    CD3DFace, *pCD3DFace, **ppCD3DFace;
  typedef interface IDirect3DRMFaceArray    CD3DFaceArray, *pCD3DFaceArray, **ppCD3DFaceArray;
  typedef interface IDirect3DRMVisual	    CD3DVisual, *pCD3DVisual, **ppCD3DVisual;
  typedef interface IDirect3DRMPickedArray  CD3DPickedArray, *pCD3DPickedArray, **ppCD3DPickedArray;
  typedef interface IDirect3DRMPicked2Array CD3DPickedArray2, *pCD3DPickedArray2, **ppCD3DPickedArray2;
  typedef interface IDirect3DRMMeshBuilder2 CD3DMeshBuilder, *pCD3DMeshBuilder, **ppCD3DMeshBuilder;
  typedef interface IDirect3DRMMesh	    CD3DMesh, *pCD3DMesh, **ppCD3DMesh;
  typedef interface IDirect3DRMWinDevice    CD3DWinDevice, *pCD3DWinDevice, **ppCD3DWinDevice;
  typedef interface IDirect3DRMTexture2	    CD3DTexture, *pCD3DTexture, **ppCD3DTexture;
  typedef interface IDirect3DRMLight	    CD3DLight, *pCD3DLight, **ppCD3DLight;
  typedef interface IDirect3DRMWrap	    CD3DWrap, *pCD3DWrap, **ppCD3DWrap;
  typedef interface IDirect3DRMMaterial	    CD3DMaterial, *pCD3DMaterial, **ppCD3DMaterial;
  typedef interface IDirectDrawPalette      CDDPalette, *pCDDPalette, **ppCDDPalette;
  typedef interface IDirect3DRMObject	    CD3DObject, *pCD3DObject, **ppCD3DObject;

  typedef D3DVALUE		d3dvalue_t;
  typedef D3DVECTOR		d3dvector_t;
  typedef D3DCOLOR		d3dcolor_t;
  typedef D3DRMRENDERQUALITY	d3drenderq_t;
  typedef D3DRMTEXTUREQUALITY   d3dtextureq_t;
  typedef D3DRMFILLMODE		d3dfillmode_t;
  typedef DDSCAPS		ddscaps_t;
  typedef DDSURFACEDESC		ddsdesc_t;
  typedef D3DRMPICKDESC		d3dpickdesc_t;
  typedef D3DRMPICKDESC2	d3dpickdesc2_t;
  typedef D3DRMRAY		d3dray_t;
  typedef D3DRMFILLMODE		d3dfillmode_t;
  typedef D3DRMFOGMODE		d3dfogmode_t;
  typedef D3DRMPALETTEENTRY	d3dpalentry_t;
  typedef PALETTEENTRY		ddpalentry_t;
  typedef D3DRMIMAGE		d3dimage_t;
  typedef D3DRMBOX		d3dbox_t;

/*===========================================================================
 *		End of Type Definitions
 *=========================================================================*/


/*===========================================================================
 *
 * Begin Function Definitions 
 *
 *=========================================================================*/

	/* Create DirectDraw and Direct3D objects of the required type */
 boolean CreateDirectDrawObject (ppCDirectDraw ppDirectDraw);
 boolean CreateDirect3DObject   (ppCDirect3D   ppDirect3D);

	/* Convert a Direct3D/DirectDraw result code to a string */
  char* D3DRMErrorToString (HRESULT error);

	/* Standard message box function */
  void __cdecl D3DMessage (HWND hWindow, const char* pTitle, char* pString, ...);

	/* Get/set the current D3DRM objects */
  CDirect3D* GetD3DRM (void);
  void	     SetD3DRM (CDirect3D* pObject);

  	/* Get/set the current DD objects */
  CDirectDraw* GetDD (void);
  void	       SetDD (CDirectDraw* pObject);

/*===========================================================================
 *		End of Function Definitions
 *=========================================================================*/



#endif
/*===========================================================================
 *		End of File D3DCom.H
 *=========================================================================*/