Resolve active render target in D3D9 before switch

On D3D9 platforms that work on active render target instead of
a specified surface, the resovle of the previous RT must happen
before the new RT becomes active.
This commit is contained in:
Matthew Endsley 2014-08-20 15:55:30 -07:00
parent b5627dc1b5
commit dc9e29601d

View File

@ -939,6 +939,14 @@ namespace bgfx
void setFrameBuffer(FrameBufferHandle _fbh, bool _msaa = true)
{
if (isValid(m_fbh)
&& m_fbh.idx != _fbh.idx
&& m_rtMsaa)
{
FrameBufferD3D9& frameBuffer = m_frameBuffers[m_fbh.idx];
frameBuffer.resolve();
}
if (!isValid(_fbh) )
{
DX_CHECK(m_device->SetRenderTarget(0, m_backBufferColor) );
@ -970,14 +978,6 @@ namespace bgfx
DX_CHECK(m_device->SetDepthStencilSurface(NULL != depthStencil ? depthStencil : m_backBufferDepthStencil) );
}
if (isValid(m_fbh)
&& m_fbh.idx != _fbh.idx
&& m_rtMsaa)
{
FrameBufferD3D9& frameBuffer = m_frameBuffers[m_fbh.idx];
frameBuffer.resolve();
}
m_fbh = _fbh;
m_rtMsaa = _msaa;
}