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; }