BizHawk/libmupen64plus/D3D8Interceptor/Direct3DSwapChain8Functions...

66 lines
2.3 KiB
C++
Raw Normal View History

#include "d3d8Wrapper.h"
extern "C"
{
namespace D3D8Wrapper
{
2014-08-17 18:53:49 +00:00
ThreadSafePointerSet IDirect3DSwapChain8::m_List;
D3D8Wrapper::IDirect3DSwapChain8::IDirect3DSwapChain8(D3D8Base::IDirect3DSwapChain8* realSwapChain) : IDirect3DUnknown((IUnknown*) realSwapChain)
{
2014-08-17 18:53:49 +00:00
LOG("IDirect3DSwapChain8::IDirect3DSwapChain8( " << realSwapChain << " )\n");
m_pD3D = realSwapChain;
}
2014-08-17 18:53:49 +00:00
D3D8Wrapper::IDirect3DSwapChain8* D3D8Wrapper::IDirect3DSwapChain8::GetSwapChain(D3D8Base::IDirect3DSwapChain8* realSwapChain)
{
2014-08-17 18:53:49 +00:00
LOG("IDirect3DSwapChain8::GetSwapChain( " << realSwapChain << " )\n");
D3D8Wrapper::IDirect3DSwapChain8* wrappedSwapChain = (D3D8Wrapper::IDirect3DSwapChain8*) m_List.GetDataPtr(realSwapChain);
if( wrappedSwapChain == NULL )
{
2014-08-17 18:53:49 +00:00
wrappedSwapChain = new D3D8Wrapper::IDirect3DSwapChain8(realSwapChain);
m_List.AddMember(realSwapChain, wrappedSwapChain);
return wrappedSwapChain;
}
2014-08-17 18:53:49 +00:00
wrappedSwapChain->m_ulRef++;
return wrappedSwapChain;
}
STDMETHODIMP_(ULONG) D3D8Wrapper::IDirect3DSwapChain8::Release(THIS)
{
2014-08-25 22:21:59 +00:00
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)
{
2014-08-25 22:21:59 +00:00
LOG("IDirect3DSwapChain8::Present( " << pSourceRect << " , " << pDestRect << " , " << hDestWindowOverride << " , " << pDirtyRegion << " ) [ " << this << " ]\n");
2014-08-17 18:53:49 +00:00
return m_pD3D->Present(pSourceRect,pDestRect,hDestWindowOverride,pDirtyRegion);
}
STDMETHODIMP D3D8Wrapper::IDirect3DSwapChain8::GetBackBuffer(UINT BackBuffer,D3D8Base::D3DBACKBUFFER_TYPE Type,D3D8Wrapper::IDirect3DSurface8** ppBackBuffer)
{
2014-08-25 22:21:59 +00:00
LOG("IDirect3DSwapChain8::GetBackBuffer( " << BackBuffer << " , " << Type << " , " << ppBackBuffer << " ) [ " << this << " ]\n");
2014-08-17 18:53:49 +00:00
D3D8Base::IDirect3DSurface8* realD3D = NULL;
2014-08-17 18:53:49 +00:00
HRESULT hr = m_pD3D->GetBackBuffer(BackBuffer,Type,&realD3D);
2014-08-17 18:53:49 +00:00
D3D8Wrapper::IDirect3DSurface8* wrappedD3D = D3D8Wrapper::IDirect3DSurface8::GetSurface(realD3D);
2014-08-17 18:53:49 +00:00
*ppBackBuffer = wrappedD3D;
return hr;
}
}
}