mirror of https://github.com/AxioDL/boo.git
Blit rectangle fixes
This commit is contained in:
parent
483de21103
commit
8296514a61
|
@ -902,9 +902,10 @@ struct D3D11CommandQueue : IGraphicsCommandQueue
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UINT y = tlOrigin ? rect.location[1] : (tex->m_height - rect.size[1] - rect.location[1]);
|
int y = tlOrigin ? rect.location[1] : (tex->m_height - rect.size[1] - rect.location[1]);
|
||||||
D3D11_BOX box = {UINT(rect.location[0]), y, 0, UINT(rect.location[0] + rect.size[0]), y + rect.size[1], 1};
|
D3D11_BOX box = {UINT(std::max(0, rect.location[0])), UINT(std::max(0, y)), 0,
|
||||||
m_deferredCtx->CopySubresourceRegion1(tex->m_colorBindTex.Get(), 0, rect.location[0], y, 0,
|
UINT(std::max(0, rect.location[0] + rect.size[0])), UINT(std::max(0, y + rect.size[1])), 1};
|
||||||
|
m_deferredCtx->CopySubresourceRegion1(tex->m_colorBindTex.Get(), 0, box.left, box.top, 0,
|
||||||
tex->m_colorTex.Get(), 0, &box, D3D11_COPY_DISCARD);
|
tex->m_colorTex.Get(), 0, &box, D3D11_COPY_DISCARD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1210,13 +1210,14 @@ struct D3D12CommandQueue : IGraphicsCommandQueue
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UINT y = tlOrigin ? rect.location[1] : (tex->m_height - rect.size[1] - rect.location[1]);
|
int y = tlOrigin ? rect.location[1] : (tex->m_height - rect.size[1] - rect.location[1]);
|
||||||
D3D12_BOX box = {UINT(rect.location[0]), y, 0, UINT(rect.location[0] + rect.size[0]), y + rect.size[1], 1};
|
D3D12_BOX box = {UINT(std::max(0, rect.location[0])), UINT(std::max(0, y)), 0,
|
||||||
|
UINT(std::max(0, rect.location[0] + rect.size[0])), UINT(std::max(0, y + rect.size[1])), 1};
|
||||||
D3D12_TEXTURE_COPY_LOCATION dst = {tex->m_colorBindTex.Get(), D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX};
|
D3D12_TEXTURE_COPY_LOCATION dst = {tex->m_colorBindTex.Get(), D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX};
|
||||||
dst.SubresourceIndex = 0;
|
dst.SubresourceIndex = 0;
|
||||||
D3D12_TEXTURE_COPY_LOCATION src = {tex->m_colorTex.Get(), D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX};
|
D3D12_TEXTURE_COPY_LOCATION src = {tex->m_colorTex.Get(), D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX};
|
||||||
src.SubresourceIndex = 0;
|
src.SubresourceIndex = 0;
|
||||||
m_cmdList->CopyTextureRegion(&dst, rect.location[0], y, 0, &src, &box);
|
m_cmdList->CopyTextureRegion(&dst, box.left, box.top, 0, &src, &box);
|
||||||
}
|
}
|
||||||
|
|
||||||
D3D12_RESOURCE_BARRIER copyTeardown[] =
|
D3D12_RESOURCE_BARRIER copyTeardown[] =
|
||||||
|
|
|
@ -1140,11 +1140,16 @@ struct GLCommandQueue : IGraphicsCommandQueue
|
||||||
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
|
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
|
||||||
cmds.emplace_back(Command::Op::ResolveBindTexture);
|
cmds.emplace_back(Command::Op::ResolveBindTexture);
|
||||||
cmds.back().resolveTex = texture;
|
cmds.back().resolveTex = texture;
|
||||||
cmds.back().rect = rect;
|
|
||||||
cmds.back().resolveColor = color;
|
cmds.back().resolveColor = color;
|
||||||
cmds.back().resolveDepth = depth;
|
cmds.back().resolveDepth = depth;
|
||||||
|
SWindowRect& targetRect = cmds.back().rect;
|
||||||
|
targetRect.location[0] = std::max(0, rect.location[0]);
|
||||||
if (tlOrigin)
|
if (tlOrigin)
|
||||||
cmds.back().rect.location[1] = static_cast<GLTextureR*>(texture)->m_height - rect.location[1] - rect.size[1];
|
targetRect.location[1] = std::max(0, int(static_cast<GLTextureR*>(texture)->m_height) - rect.location[1] - rect.size[1]);
|
||||||
|
else
|
||||||
|
targetRect.location[1] = std::max(0, rect.location[1]);
|
||||||
|
targetRect.size[0] = std::max(0, rect.size[0]);
|
||||||
|
targetRect.size[1] = std::max(0, rect.size[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void resolveDisplay(ITextureR* source)
|
void resolveDisplay(ITextureR* source)
|
||||||
|
|
Loading…
Reference in New Issue