00001 #ifndef __GXDEVICEWRAPPER_H
00002 #define __GXDEVICEWRAPPER_H
00003
00004 #include "GXStandardDefines.h"
00005 #include "GXTextureManager.h"
00006 #include "GXSizeableArray.h"
00007 #include "GXMutex.h"
00008
00009 D3DRENDERSTATETYPE
00010
00011 struct SGXRenderStateCache
00012 {
00013 DWORD rgdwRenderStates[175];
00014 DWORD dwVertexShader;
00015 DWORD dwPixelShader;
00016
00017 int iBackBuffer;
00018 int iDepthStencil;
00019
00020 int rciTextures[8];
00021
00022 int iVertexBufferIndex;
00023
00024 int iIndexBufferIndex;
00025 };
00026
00027
00028
00029 class CGXDeviceWrapper
00030 {
00031 public:
00032 CGXDeviceWrapper();
00033 virtual ~CGXDeviceWrapper();
00034
00035 virtual bool CreateDevice(HWND hWnd, UINT uMultiSampleCount);
00036
00037 virtual void GetBackBufferFormat(D3DFORMAT* pOut);
00038 virtual void GetDepthStencilFormat(D3DFORMAT* pOut);
00039
00040 virtual bool Clear();
00041 virtual bool Present();
00042
00043 virtual void SetBackgroundColor(DWORD dwColor);
00044 virtual DWORD GetBackgroundColor();
00045
00046
00047 virtual bool SetStreamSource(UINT uStream, int iIndex);
00048 virtual bool SetIndexBuffer(int iIndex);
00049
00050 virtual bool DrawIndexedPrimitive(D3DPRIMITIVETYPE Type,
00051 UINT MinIndex,
00052 UINT NumVertices,
00053 UINT StartIndex,
00054 UINT PrimitiveCount);
00055
00056 virtual bool SetRenderState(D3DRENDERSTATETYPE State,
00057 DWORD Value);
00058
00059 virtual void EnablePolygonCounting(bool bVal);
00060 virtual void EnableRenderStateCaching(bool bVal);
00061
00062
00063 virtual bool SetPixelShader(UINT uIndex);
00064 virtual bool SetVertexShader(UINT uIndex);
00065
00066 virtual bool SetVertexShaderConstant(DWORD Register,
00067 void* pConstantData,
00068 DWORD ConstantCount);
00069
00070
00071
00072 virtual bool CreatePixelShader(char* szShader,
00073 UINT* pHandleOut);
00074
00075 virtual bool CreateVertexShader(char* szShader,
00076 UINT* pHandle);
00077
00078 virtual bool SetRenderTarget(int iBackBuffer,
00079 int iDepthStencil);
00080
00081 virtual bool LoadGXModelFromStream(CGXModel* pOut,
00082 IStream* pStream);
00083
00084 virtual bool LoadGXModelFromData(CGXModel* pOut,
00085 GXVertex* pVerts,
00086 UINT* pIndices,
00087 DWORD dwVertCount,
00088 DWORD dwIndexCount,
00089 char* szTextureName,
00090 char* szBumpName);
00091
00092 virtual bool CreateTextureFromFile(char* szTextureName, int* pOut);
00093 virtual bool CreateEmptyTexture(UINT uSideSize, bool bRenderTarget,
00094 int* pOut);
00095
00096
00097 virtual bool LockPipeline(int uMiliSec);
00098 virtual void UnlockPipeline();
00099
00100 virtual bool CreateVertexBuffer(UINT uVertexCount,
00101 bool bDynamic,
00102 bool bWriteOnly,
00103 int* pOut);
00104
00105 virtual bool CreateIndexBuffer(UINT uIndexCount,
00106 bool bDynamic,
00107 bool bWriteOnly,
00108 int* pOut);
00109
00110
00111 virtual bool SetTextureStageState(DWORD Stage,
00112 D3DTEXTURESTAGESTATETYPE Type,
00113 DWORD Value);
00114
00115
00116 protected:
00117 virtual bool CheckCaps(D3DCAPS8* pCaps);
00118 virtual bool CheckFormat(D3DFORMAT* pOut);
00119 virtual bool GetAnyFormat(D3DFORMAT* pOut);
00120
00121 virtual void Cleanup();
00122
00123 protected:
00124 bool m_bInSceneAlready;
00125 bool m_bCountPolygons;
00126 bool m_bCacheRenderStates;
00127
00128 CGXMutex m_PipelineMutex;
00129
00130 DWORD m_dwBackgroundColor;
00131
00132 IDirect3D8* m_pD3D;
00133 IDirect3DDevice8* m_pDevice;
00134
00135 IDirect3DSurface8* m_pBackBuffer;
00136 IDirect3DSurface8* m_pDepthStencilBuffer;
00137
00138 CGXTextureManager m_TextureManager;
00139 CGXSizeableArray<IDirect3DVertexBuffer8*> m_VertexBuffers;
00140 CGXSizeableArray<IDirect3DIndexBuffer8*> m_IndexVertexBuffers;
00141 CGXSizeableArray<IDirect3DTexture8*> m_TextureMaps;
00142 CGXSizeableArray<DWORD> m_VertexShaders;
00143 CGXSizeableArray<DWORD> m_PixelShaders;
00144
00145
00146 SGXRenderStateCache m_RenderStateCache;
00147 };
00148
00149
00150
00151
00152
00153 #endif