253 lines
6.8 KiB
C++
253 lines
6.8 KiB
C++
#ifndef __D3DREND_H__
|
|
#define __D3DREND_H__
|
|
|
|
#include "rend.h"
|
|
|
|
class D3dRenderer;
|
|
|
|
class D3dExecuteBuffer : public RendExecuteBuffer
|
|
{
|
|
public:
|
|
D3dExecuteBuffer(void);
|
|
BOOL Initialize(LPDIRECT3DDEVICE pd3dev, UINT cbSize, UINT uiFlags);
|
|
~D3dExecuteBuffer(void);
|
|
|
|
virtual void Release(void);
|
|
|
|
virtual void* Lock(void);
|
|
virtual void Unlock(void);
|
|
|
|
virtual void SetData(UINT nVertices, UINT cbStart, UINT cbSize);
|
|
|
|
virtual BOOL Process(void);
|
|
|
|
LPDIRECT3DEXECUTEBUFFER _pdeb;
|
|
};
|
|
|
|
class D3dLight : public RendLight
|
|
{
|
|
public:
|
|
D3dLight(void);
|
|
BOOL Initialize(LPDIRECT3D pd3d, LPDIRECT3DVIEWPORT pdvw, int iType);
|
|
~D3dLight(void);
|
|
|
|
virtual void Release(void);
|
|
|
|
virtual void SetColor(D3DCOLORVALUE *pdcol);
|
|
virtual void SetVector(D3DVECTOR *pdvec);
|
|
virtual void SetAttenuation(float fConstant, float fLinear,
|
|
float fQuadratic);
|
|
|
|
LPDIRECT3DLIGHT _pdl;
|
|
D3DLIGHT _dl;
|
|
};
|
|
|
|
class D3dTexture : public RendTexture
|
|
{
|
|
public:
|
|
D3dTexture(void);
|
|
BOOL Initialize(D3dRenderer *pdrend,
|
|
LPDIRECTDRAW pdd, LPDIRECT3DDEVICE pd3dev,
|
|
DDSURFACEDESC *pddsd, char* pszFile, UINT uiFlags,
|
|
D3dTexture *pdtexNext);
|
|
~D3dTexture(void);
|
|
|
|
virtual void Release(void);
|
|
|
|
virtual D3DTEXTUREHANDLE Handle(void);
|
|
|
|
BOOL CreateVidTex(LPDIRECTDRAW pdd, UINT uiFlags);
|
|
BOOL RestoreSurface(void);
|
|
|
|
D3dRenderer *_pdrend;
|
|
LPDIRECTDRAWSURFACE _pddsSrc;
|
|
LPDIRECT3DTEXTURE _pdtexSrc;
|
|
D3DTEXTUREHANDLE _dthDst;
|
|
LPDIRECTDRAWSURFACE _pddsDst;
|
|
LPDIRECT3DTEXTURE _pdtexDst;
|
|
D3dTexture* _pdtexNext;
|
|
};
|
|
|
|
class D3dMatrix : public RendMatrix
|
|
{
|
|
public:
|
|
D3dMatrix(void);
|
|
BOOL Initialize(LPDIRECT3DDEVICE pd3dev);
|
|
~D3dMatrix(void);
|
|
|
|
virtual void Release(void);
|
|
|
|
virtual D3DMATRIXHANDLE Handle(void);
|
|
|
|
virtual void Get(D3DMATRIX *pdm);
|
|
virtual void Set(D3DMATRIX *pdm);
|
|
|
|
LPDIRECT3DDEVICE _pd3dev;
|
|
D3DMATRIXHANDLE _dmh;
|
|
};
|
|
|
|
class D3dMaterial : public RendMaterial
|
|
{
|
|
public:
|
|
D3dMaterial(void);
|
|
BOOL Initialize(LPDIRECT3D pd3d, LPDIRECT3DDEVICE pd3dev,
|
|
UINT nColorEntries);
|
|
~D3dMaterial(void);
|
|
|
|
virtual void Release(void);
|
|
|
|
virtual D3DMATERIALHANDLE Handle(void);
|
|
|
|
virtual void SetDiffuse(D3DCOLORVALUE* pdcol);
|
|
virtual void SetSpecular(D3DCOLORVALUE* pdcol, float fPower);
|
|
virtual void SetTexture(RendTexture *prtex);
|
|
|
|
LPDIRECT3DDEVICE _pd3dev;
|
|
LPDIRECT3DMATERIAL _pdmat;
|
|
D3DMATERIAL _dmat;
|
|
};
|
|
|
|
class D3dWindow : public RendWindow
|
|
{
|
|
public:
|
|
D3dWindow(void);
|
|
BOOL Initialize(D3dRenderer *pdrend,
|
|
LPDIRECTDRAW pdd, LPDIRECT3D pd3d, LPGUID pguid,
|
|
int x, int y, UINT uiWidth, UINT uiHeight, UINT uiBuffers);
|
|
~D3dWindow(void);
|
|
|
|
virtual void Release(void);
|
|
|
|
virtual BOOL SetViewport(int x, int y, UINT uiWidth, UINT uiHeight);
|
|
|
|
virtual RendLight* NewLight(int iType);
|
|
virtual RendTexture* NewTexture(char *pszFile, UINT uiFlags);
|
|
virtual RendExecuteBuffer* NewExecuteBuffer(UINT uiSize, UINT uiFlags);
|
|
virtual RendMatrix* NewMatrix(void);
|
|
virtual RendMaterial* NewMaterial(UINT nColorEntries);
|
|
|
|
virtual BOOL BeginScene(void);
|
|
virtual BOOL Execute(RendExecuteBuffer* preb);
|
|
virtual BOOL ExecuteClipped(RendExecuteBuffer* preb);
|
|
virtual BOOL EndScene(D3DRECT* pdrcBound);
|
|
|
|
virtual BOOL Clear(UINT uiBuffers, D3DRECT* pdrc);
|
|
virtual BOOL Flip(void);
|
|
virtual BOOL CopyForward(D3DRECT* pdrc);
|
|
|
|
virtual HWND Handle(void);
|
|
|
|
LRESULT WindowProc(HWND hwnd, UINT uiMessage, WPARAM wpm, LPARAM lpm);
|
|
BOOL CreateZBuffer(UINT uiWidth, UINT uiHeight, DWORD dwDepth,
|
|
DWORD dwMemoryType);
|
|
HWND CreateHWND(int x, int y, UINT uiWidth, UINT uiHeight);
|
|
BOOL InitDD(UINT uiWidth, UINT uiHeight, UINT uiBuffers);
|
|
BOOL InitializeTextureLoad(void);
|
|
BOOL InitD3D(LPGUID pguid, UINT uiWidth, UINT uiHeight, UINT uiBuffers);
|
|
BOOL RestoreSurfaces(void);
|
|
|
|
D3dRenderer *_pdrend;
|
|
HWND _hwnd;
|
|
LPDIRECTDRAW _pdd;
|
|
LPDIRECT3D _pd3d;
|
|
LPDIRECT3DDEVICE _pd3dev;
|
|
LPDIRECT3DVIEWPORT _pdvw;
|
|
LPDIRECT3DEXECUTEBUFFER _pdebLast;
|
|
LPDIRECT3DMATERIAL _pdmatBackground;
|
|
LPDIRECTDRAWSURFACE _pddsFrontBuffer;
|
|
LPDIRECTDRAWSURFACE _pddsBackBuffer;
|
|
LPDIRECTDRAWSURFACE _pddsZBuffer;
|
|
LPDIRECTDRAWCLIPPER _pddcClipper;
|
|
LPDIRECTDRAWPALETTE _pddpPalette;
|
|
RECT _rcClient;
|
|
D3dTexture* _pdtex;
|
|
int _nTextureFormats;
|
|
// Only use one currently
|
|
DDSURFACEDESC _ddsdTextureFormat[1];
|
|
BOOL _bHandleActivate;
|
|
BOOL _bPrimaryPalettized;
|
|
BOOL _bIgnoreWM_SIZE;
|
|
};
|
|
|
|
#define DD_DRIVER_COUNT 5
|
|
#define DD_MODE_LIST_COUNT 20
|
|
#define D3D_DRIVER_COUNT 5
|
|
|
|
struct DdDriverInfo
|
|
{
|
|
GUID guid;
|
|
DDCAPS ddcapsHw;
|
|
char achName[40];
|
|
BOOL bIsPrimary;
|
|
};
|
|
|
|
struct ModeListElement
|
|
{
|
|
int iWidth, iHeight, iDepth;
|
|
};
|
|
|
|
struct D3dDriverInfo
|
|
{
|
|
char achDesc[50];
|
|
char achName[30];
|
|
D3DDEVICEDESC d3ddHw, d3ddHel;
|
|
LPGUID pguid;
|
|
};
|
|
|
|
class D3dRenderer : public Renderer
|
|
{
|
|
public:
|
|
D3dRenderer(void);
|
|
|
|
virtual void Name(char* psz);
|
|
|
|
virtual char* LastErrorString(void);
|
|
|
|
virtual BOOL Initialize(HWND hwndParent);
|
|
virtual void Uninitialize(void);
|
|
|
|
virtual BOOL EnumDisplayDrivers(RendEnumDriversFn pfn,
|
|
void* pvArg);
|
|
virtual BOOL EnumGraphicsDrivers(RendEnumDriversFn pfn,
|
|
void* pvArg);
|
|
|
|
virtual BOOL SelectDisplayDriver(RendId rid);
|
|
virtual BOOL SelectGraphicsDriver(RendId rid);
|
|
|
|
virtual BOOL DescribeDisplay(RendDisplayDescription* prdd);
|
|
virtual BOOL DescribeGraphics(RendGraphicsDescription* prgd);
|
|
|
|
virtual BOOL FlipToDesktop(void);
|
|
virtual BOOL RestoreDesktop(void);
|
|
|
|
virtual RendWindow* NewWindow(int x, int y,
|
|
UINT uiWidth, UINT uiHeight,
|
|
UINT uiBuffers);
|
|
|
|
BOOL GetDDCaps(void);
|
|
BOOL EnumerateDisplayModes(void);
|
|
|
|
int _iDD;
|
|
int _iD3D;
|
|
LPDIRECTDRAW _pdd;
|
|
LPDIRECT3D _pd3d;
|
|
DDSCAPS _ddscapsHw;
|
|
DdDriverInfo _ddiDriver[DD_DRIVER_COUNT];
|
|
int _nDdDrivers;
|
|
ModeListElement _mleModeList[DD_MODE_LIST_COUNT];
|
|
int _nModes;
|
|
int _iCurrentMode;
|
|
BOOL _bCurrentFullscreenMode;
|
|
UINT _nD3dDrivers;
|
|
D3dDriverInfo _d3diDriver[D3D_DRIVER_COUNT];
|
|
DWORD _dwZDepth;
|
|
DWORD _dwZType;
|
|
DWORD _dwWinBpp;
|
|
};
|
|
|
|
// ATTENTION - Technically this should be on the renderer but that's a huge
|
|
// pain
|
|
extern HRESULT hrLast;
|
|
|
|
#endif
|