class proxyIDirect3DSwapChain9 : public IDirect3DSwapChain9
{
public:
   proxyIDirect3DSwapChain9(IDirect3DSwapChain9 *pOriginal, IDirect3DDevice9 *pDevice);
   virtual ~proxyIDirect3DSwapChain9(void);

   HRESULT __stdcall QueryInterface (REFIID riid, void **ppvObj);
   ULONG   __stdcall AddRef(void);
   ULONG   __stdcall Release(void);
   HRESULT __stdcall Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion, DWORD dwFlags);
   HRESULT __stdcall GetFrontBufferData(IDirect3DSurface9 *pDestSurface);
   HRESULT __stdcall GetBackBuffer(UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9 **ppBackBuffer);
   HRESULT __stdcall GetRasterStatus(D3DRASTER_STATUS *pRasterStatus);
   HRESULT __stdcall GetDisplayMode(D3DDISPLAYMODE *pMode);
   HRESULT __stdcall GetDevice(IDirect3DDevice9 **ppDevice);
   HRESULT __stdcall GetPresentParameters(D3DPRESENT_PARAMETERS *pPresentationParameters);

private:
   IDirect3DSwapChain9 *origIDirect3DSwapChain9;
   IDirect3DDevice9    *origIDirect3DDevice9;
};
