depth range part of setViewport now

This commit is contained in:
Jack Andersen 2016-04-04 15:49:08 -10:00
parent 23f49fcc19
commit 4cec163804
3 changed files with 14 additions and 7 deletions

View File

@ -18,7 +18,7 @@ struct IGraphicsCommandQueue
virtual void setShaderDataBinding(IShaderDataBinding* binding)=0; virtual void setShaderDataBinding(IShaderDataBinding* binding)=0;
virtual void setRenderTarget(ITextureR* target)=0; virtual void setRenderTarget(ITextureR* target)=0;
virtual void setViewport(const SWindowRect& rect)=0; virtual void setViewport(const SWindowRect& rect, float znear=0.f, float zfar=1.f)=0;
virtual void setScissor(const SWindowRect& rect)=0; virtual void setScissor(const SWindowRect& rect)=0;
virtual void resizeRenderTexture(ITextureR* tex, size_t width, size_t height)=0; virtual void resizeRenderTexture(ITextureR* tex, size_t width, size_t height)=0;

View File

@ -784,7 +784,11 @@ struct GLCommandQueue : IGraphicsCommandQueue
const IShaderDataBinding* binding; const IShaderDataBinding* binding;
const ITextureR* target; const ITextureR* target;
const ITextureR* source; const ITextureR* source;
struct
{
SWindowRect rect; SWindowRect rect;
float znear, zfar;
};
float rgba[4]; float rgba[4];
GLbitfield flags; GLbitfield flags;
struct struct
@ -983,6 +987,7 @@ struct GLCommandQueue : IGraphicsCommandQueue
case Command::Op::SetViewport: case Command::Op::SetViewport:
glViewport(cmd.rect.location[0], cmd.rect.location[1], glViewport(cmd.rect.location[0], cmd.rect.location[1],
cmd.rect.size[0], cmd.rect.size[1]); cmd.rect.size[0], cmd.rect.size[1]);
glDepthRange(cmd.znear, cmd.zfar);
break; break;
case Command::Op::SetScissor: case Command::Op::SetScissor:
if (cmd.rect.size[0] == 0 && cmd.rect.size[1] == 0) if (cmd.rect.size[0] == 0 && cmd.rect.size[1] == 0)
@ -1093,11 +1098,13 @@ struct GLCommandQueue : IGraphicsCommandQueue
cmds.back().target = target; cmds.back().target = target;
} }
void setViewport(const SWindowRect& rect) void setViewport(const SWindowRect& rect, float znear, float zfar)
{ {
std::vector<Command>& cmds = m_cmdBufs[m_fillBuf]; std::vector<Command>& cmds = m_cmdBufs[m_fillBuf];
cmds.emplace_back(Command::Op::SetViewport); cmds.emplace_back(Command::Op::SetViewport);
cmds.back().rect = rect; cmds.back().rect = rect;
cmds.back().znear = znear;
cmds.back().zfar = zfar;
} }
void setScissor(const SWindowRect& rect) void setScissor(const SWindowRect& rect)

View File

@ -2393,12 +2393,12 @@ struct VulkanCommandQueue : IGraphicsCommandQueue
m_boundTarget = ctarget; m_boundTarget = ctarget;
} }
void setViewport(const SWindowRect& rect) void setViewport(const SWindowRect& rect, float znear, float zfar)
{ {
if (m_boundTarget) if (m_boundTarget)
{ {
VkViewport vp = {float(rect.location[0]), float(m_boundTarget->m_height - rect.location[1]), VkViewport vp = {float(rect.location[0]), float(m_boundTarget->m_height - rect.location[1] - rect.size[1]),
float(rect.size[0]), float(rect.size[1]), 0.0f, 1.0f}; float(rect.size[0]), float(rect.size[1]), znear, zfar};
vkCmdSetViewport(m_cmdBufs[m_fillBuf], 0, 1, &vp); vkCmdSetViewport(m_cmdBufs[m_fillBuf], 0, 1, &vp);
} }
} }
@ -2409,7 +2409,7 @@ struct VulkanCommandQueue : IGraphicsCommandQueue
{ {
VkRect2D vkrect = VkRect2D vkrect =
{ {
{int32_t(rect.location[0]), int32_t(m_boundTarget->m_height) - int32_t(rect.location[1])}, {int32_t(rect.location[0]), int32_t(m_boundTarget->m_height - rect.location[1] - rect.size[1])},
{uint32_t(rect.size[0]), uint32_t(rect.size[1])} {uint32_t(rect.size[0]), uint32_t(rect.size[1])}
}; };
vkCmdSetScissor(m_cmdBufs[m_fillBuf], 0, 1, &vkrect); vkCmdSetScissor(m_cmdBufs[m_fillBuf], 0, 1, &vkrect);