15 #pragma comment(lib, "d3d9.lib")
19 #define RELEASE(o) if (o){o->Release();o=NULL;}
20 #define PI (3.1415926f)
21 #define DEGtoRAD(deg) ((float)deg * 0.017453292f)
22 #define RADtoDEG(rad) ((float)rad * 57.29578049f)
23 #define SAFE_DELETE(p) { if(p){ delete (p); (p)=NULL; } }
24 #define SAFE_DELETE_ARRAY(p) { if(p){ delete [](p); (p)=NULL; } }
25 #define SAFE_RELEASE(p) { if(p){ (p)->Release(); (p)=NULL; } }
32 typedef void (*CDirectDrawCALLBACK)();
36 virtual BOOL Dispose() = 0;
37 virtual BOOL Restore() = 0;
38 virtual BOOL Release() = 0;
42 class CDirectDraw_RenderState
45 DWORD m_valuePrevious[300];
46 DWORD m_valueNew[300];
49 void SetRenderState(D3DRENDERSTATETYPE State, DWORD Value)
51 m_valueNew[(int)State] = Value;
58 for(
int i=0; i<300; i++)
60 valueNew = m_valueNew[i];
61 if((DWORD)0x7fffffff != valueNow)
63 if(m_valuePrevious[i] != valueNew)
68 m_valuePrevious[i] = valueNew;
73 for(
int i=0; i<300; i++)
75 m_valuePrevious[i] = (DWORD)0x7fffffff;
76 m_valueNew[i] = (DWORD)0x7fffffff;
80 CDirectDraw_RenderState()
84 ~CDirectDraw_RenderState()
107 DWORD m_VertexShaderVersion;
108 DWORD m_PixelShaderVersion;
110 D3DPRESENT_PARAMETERS m_d3dParam_current;
111 D3DPRESENT_PARAMETERS m_d3dParam_window;
112 D3DPRESENT_PARAMETERS m_d3dParam_full;
114 LPDIRECT3DDEVICE9 m_pd3dDev;
115 LPDIRECT3DSURFACE9 m_pBackBuffer;
116 LPDIRECT3DSURFACE9 m_currentRenderTarget;
120 static bool m_DeviceLost;
132 CDirectDrawCALLBACK m_ReleaseDeviceCallback;
133 CDirectDrawCALLBACK m_RestoreDeviceCallback;
137 BOOL Create(
void* HWND ,
int ScreenWidth ,
int ScreenHeight );
152 m_DeviceLost =
false;
153 m_current_displaymode = displaymode;
154 Create( HWND , ScreenWidth , ScreenHeight );
169 virtual HRESULT BeginScene();
170 virtual HRESULT EndScene();
172 HWND GetHWnd(){
return m_hwnd; }
173 LPDIRECT3D9 GetD3D(){
return m_pD3D; }
174 LPDIRECT3DDEVICE9 GetDevice(){
return m_pd3dDev;}
179 int GetScreenWidth(){
return m_dwWidth;}
180 int GetScreenHeight(){
return m_dwHeight;}
181 void SetScreenWidth(
int w ) { m_dwWidth = w;}
182 void SetScreenHeight(
int h ) { m_dwHeight = h;}
186 LPDIRECT3DSURFACE9 getBackBuffer();
188 void SetRenderTarget(
int index , LPDIRECT3DSURFACE9 surface , LPDIRECT3DSURFACE9 depath = 0)
190 m_currentRenderTarget = surface;
191 m_pd3dDev->SetRenderTarget( index , surface );
194 m_pd3dDev->SetDepthStencilSurface( depath );
198 LPDIRECT3DSURFACE9 GetRenderTarget()
200 return m_currentRenderTarget;
203 void SetPause(
bool flag )
208 virtual void ChangeDisplayMode(
DISPLAYMODE mode );
209 DISPLAYMODE GetCurrentDisplayMode(){
return m_current_displaymode; }
210 virtual BOOL DeviceChk();
212 void SetBackGroundColor( BYTE r , BYTE g , BYTE b )
220 DWORD GetVSVersion(){
return m_VertexShaderVersion; }
221 DWORD GetPSVersion(){
return m_PixelShaderVersion; }
222 void SetReleaseDeviceCallBackFunc(CDirectDrawCALLBACK func ) { m_ReleaseDeviceCallback = func; }
223 void SetRestoreDeviceCallBackFunc(CDirectDrawCALLBACK func ) { m_RestoreDeviceCallback = func; }