BizHawk/libmupen64plus/D3D8Interceptor/Direct3DSwapChain8Functions...

66 lines
2.3 KiB
C++

#include "d3d8Wrapper.h"
extern "C"
{
namespace D3D8Wrapper
{
ThreadSafePointerSet IDirect3DSwapChain8::m_List;
D3D8Wrapper::IDirect3DSwapChain8::IDirect3DSwapChain8(D3D8Base::IDirect3DSwapChain8* realSwapChain) : IDirect3DUnknown((IUnknown*) realSwapChain)
{
LOG("IDirect3DSwapChain8::IDirect3DSwapChain8( " << realSwapChain << " )\n");
m_pD3D = realSwapChain;
}
D3D8Wrapper::IDirect3DSwapChain8* D3D8Wrapper::IDirect3DSwapChain8::GetSwapChain(D3D8Base::IDirect3DSwapChain8* realSwapChain)
{
LOG("IDirect3DSwapChain8::GetSwapChain( " << realSwapChain << " )\n");
D3D8Wrapper::IDirect3DSwapChain8* wrappedSwapChain = (D3D8Wrapper::IDirect3DSwapChain8*) m_List.GetDataPtr(realSwapChain);
if( wrappedSwapChain == NULL )
{
wrappedSwapChain = new D3D8Wrapper::IDirect3DSwapChain8(realSwapChain);
m_List.AddMember(realSwapChain, wrappedSwapChain);
return wrappedSwapChain;
}
wrappedSwapChain->m_ulRef++;
return wrappedSwapChain;
}
STDMETHODIMP_(ULONG) D3D8Wrapper::IDirect3DSwapChain8::Release(THIS)
{
LOG("IDirect3DSwapChain8::Release()n[ " << this << " ]\n");
m_pUnk->Release();
ULONG ulRef = --m_ulRef;
if(ulRef == 0)
{
m_List.DeleteMember(GetSwapChain8());
delete this;
return 0;
}
return ulRef;
}
STDMETHODIMP D3D8Wrapper::IDirect3DSwapChain8::Present(CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion)
{
LOG("IDirect3DSwapChain8::Present( " << pSourceRect << " , " << pDestRect << " , " << hDestWindowOverride << " , " << pDirtyRegion << " ) [ " << this << " ]\n");
return m_pD3D->Present(pSourceRect,pDestRect,hDestWindowOverride,pDirtyRegion);
}
STDMETHODIMP D3D8Wrapper::IDirect3DSwapChain8::GetBackBuffer(UINT BackBuffer,D3D8Base::D3DBACKBUFFER_TYPE Type,D3D8Wrapper::IDirect3DSurface8** ppBackBuffer)
{
LOG("IDirect3DSwapChain8::GetBackBuffer( " << BackBuffer << " , " << Type << " , " << ppBackBuffer << " ) [ " << this << " ]\n");
D3D8Base::IDirect3DSurface8* realD3D = NULL;
HRESULT hr = m_pD3D->GetBackBuffer(BackBuffer,Type,&realD3D);
D3D8Wrapper::IDirect3DSurface8* wrappedD3D = D3D8Wrapper::IDirect3DSurface8::GetSurface(realD3D);
*ppBackBuffer = wrappedD3D;
return hr;
}
}
}