diff --git a/qrenderdoc/Windows/BufferViewer.cpp b/qrenderdoc/Windows/BufferViewer.cpp index 6fa5c6f9e..6d8437be9 100644 --- a/qrenderdoc/Windows/BufferViewer.cpp +++ b/qrenderdoc/Windows/BufferViewer.cpp @@ -4632,8 +4632,9 @@ void BufferViewer::on_outputTabs_currentChanged(int index) ui->autofitCamera->setEnabled(!isCurrentRasterOut()); EnableCameraGuessControls(); - ui->axisMappingCombo->setEnabled(index != 1); - ui->axisMappingButton->setEnabled(index != 1 && ui->axisMappingCombo->currentIndex() == 4); + ui->axisMappingCombo->setEnabled(!isCurrentRasterOut()); + ui->axisMappingButton->setEnabled(!isCurrentRasterOut() && + ui->axisMappingCombo->currentIndex() == 4); UpdateCurrentMeshConfig(); diff --git a/renderdoc/driver/d3d11/d3d11_rendermesh.cpp b/renderdoc/driver/d3d11/d3d11_rendermesh.cpp index 9e60b8275..989fad1c6 100644 --- a/renderdoc/driver/d3d11/d3d11_rendermesh.cpp +++ b/renderdoc/driver/d3d11/d3d11_rendermesh.cpp @@ -50,9 +50,12 @@ void D3D11Replay::RenderMesh(uint32_t eventId, const rdcarray &secon Matrix4f projMat = Matrix4f::Perspective(90.0f, 0.1f, 100000.0f, m_OutputWidth / m_OutputHeight); Matrix4f camMat = cfg.cam ? ((Camera *)cfg.cam)->GetMatrix() : Matrix4f::Identity(); + + Matrix4f axisMapMat = Matrix4f(cfg.axisMapping); + Matrix4f guessProjInv; - vertexData.ModelViewProj = projMat.Mul(camMat); + vertexData.ModelViewProj = projMat.Mul(camMat.Mul(axisMapMat)); vertexData.SpriteSize = Vec2f(); vertexData.homogenousInput = cfg.position.unproject; @@ -325,7 +328,7 @@ void D3D11Replay::RenderMesh(uint32_t eventId, const rdcarray &secon // set up state for drawing helpers { - vertexData.ModelViewProj = projMat.Mul(camMat); + vertexData.ModelViewProj = projMat.Mul(camMat.Mul(axisMapMat)); GetDebugManager()->FillCBuffer(vsCBuf, &vertexData, sizeof(vertexData)); m_pImmediateContext->RSSetState(m_MeshRender.SolidRasterState); @@ -414,7 +417,7 @@ void D3D11Replay::RenderMesh(uint32_t eventId, const rdcarray &secon if(cfg.position.unproject) vertexData.ModelViewProj = projMat.Mul(camMat.Mul(guessProjInv)); else - vertexData.ModelViewProj = projMat.Mul(camMat); + vertexData.ModelViewProj = projMat.Mul(camMat.Mul(axisMapMat)); m_pImmediateContext->IASetInputLayout(m_MeshRender.GenericLayout); @@ -544,7 +547,7 @@ void D3D11Replay::RenderMesh(uint32_t eventId, const rdcarray &secon D3D11_MAPPED_SUBRESOURCE mapped; vertexData.SpriteSize = Vec2f(); - vertexData.ModelViewProj = projMat.Mul(camMat); + vertexData.ModelViewProj = projMat.Mul(camMat.Mul(axisMapMat)); GetDebugManager()->FillCBuffer(vsCBuf, &vertexData, sizeof(vertexData)); HRESULT hr = m_pImmediateContext->Map(m_MeshRender.TriHighlightHelper, 0, diff --git a/renderdoc/driver/d3d11/d3d11_replay.cpp b/renderdoc/driver/d3d11/d3d11_replay.cpp index 226b5c3af..b86ffc952 100644 --- a/renderdoc/driver/d3d11/d3d11_replay.cpp +++ b/renderdoc/driver/d3d11/d3d11_replay.cpp @@ -2925,6 +2925,10 @@ uint32_t D3D11Replay::PickVertex(uint32_t eventId, int32_t width, int32_t height Matrix4f camMat = cfg.cam ? ((Camera *)cfg.cam)->GetMatrix() : Matrix4f::Identity(); Matrix4f pickMVP = projMat.Mul(camMat); + if(!cfg.position.unproject) + { + pickMVP = pickMVP.Mul(Matrix4f(cfg.axisMapping)); + } bool reverseProjection = false; Matrix4f guessProj; diff --git a/renderdoc/driver/d3d12/d3d12_rendermesh.cpp b/renderdoc/driver/d3d12/d3d12_rendermesh.cpp index 2cf56e325..4c1291e27 100644 --- a/renderdoc/driver/d3d12/d3d12_rendermesh.cpp +++ b/renderdoc/driver/d3d12/d3d12_rendermesh.cpp @@ -263,9 +263,11 @@ void D3D12Replay::RenderMesh(uint32_t eventId, const rdcarray &secon Matrix4f camMat = cfg.cam ? ((Camera *)cfg.cam)->GetMatrix() : Matrix4f::Identity(); + Matrix4f axisMapMat = Matrix4f(cfg.axisMapping); + Matrix4f guessProjInv; - vertexData.ModelViewProj = projMat.Mul(camMat); + vertexData.ModelViewProj = projMat.Mul(camMat.Mul(axisMapMat)); vertexData.SpriteSize = Vec2f(); vertexData.homogenousInput = cfg.position.unproject; @@ -725,7 +727,7 @@ void D3D12Replay::RenderMesh(uint32_t eventId, const rdcarray &secon if(cfg.position.unproject) vertexData.ModelViewProj = projMat.Mul(camMat.Mul(guessProjInv)); else - vertexData.ModelViewProj = projMat.Mul(camMat); + vertexData.ModelViewProj = projMat.Mul(camMat.Mul(axisMapMat)); list->IASetPrimitiveTopology(MakeD3DPrimitiveTopology(helper.topology)); diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index f4983fc30..8ff537974 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -1931,6 +1931,10 @@ uint32_t D3D12Replay::PickVertex(uint32_t eventId, int32_t width, int32_t height Matrix4f camMat = cfg.cam ? ((Camera *)cfg.cam)->GetMatrix() : Matrix4f::Identity(); Matrix4f pickMVP = projMat.Mul(camMat); + if(!cfg.position.unproject) + { + pickMVP = pickMVP.Mul(Matrix4f(cfg.axisMapping)); + } bool reverseProjection = false; Matrix4f guessProj; diff --git a/renderdoc/driver/vulkan/vk_debug.cpp b/renderdoc/driver/vulkan/vk_debug.cpp index 82d396b17..f70475eb4 100644 --- a/renderdoc/driver/vulkan/vk_debug.cpp +++ b/renderdoc/driver/vulkan/vk_debug.cpp @@ -1028,6 +1028,10 @@ uint32_t VulkanReplay::PickVertex(uint32_t eventId, int32_t width, int32_t heigh Matrix4f camMat = cfg.cam ? ((Camera *)cfg.cam)->GetMatrix() : Matrix4f::Identity(); Matrix4f pickMVP = projMat.Mul(camMat); + if(!cfg.position.unproject) + { + pickMVP = pickMVP.Mul(Matrix4f(cfg.axisMapping)); + } bool reverseProjection = false; Matrix4f guessProj; diff --git a/renderdoc/driver/vulkan/vk_rendermesh.cpp b/renderdoc/driver/vulkan/vk_rendermesh.cpp index 26f80365e..463aea4b3 100644 --- a/renderdoc/driver/vulkan/vk_rendermesh.cpp +++ b/renderdoc/driver/vulkan/vk_rendermesh.cpp @@ -484,7 +484,9 @@ void VulkanReplay::RenderMesh(uint32_t eventId, const rdcarray &seco Matrix4f camMat = cfg.cam ? ((Camera *)cfg.cam)->GetMatrix() : Matrix4f::Identity(); - Matrix4f ModelViewProj = projMat.Mul(camMat); + Matrix4f axisMapMat = Matrix4f(cfg.axisMapping); + + Matrix4f ModelViewProj = projMat.Mul(camMat.Mul(axisMapMat)); Matrix4f guessProjInv; if(cfg.position.unproject) @@ -1025,7 +1027,7 @@ void VulkanReplay::RenderMesh(uint32_t eventId, const rdcarray &seco if(cfg.position.unproject) ModelViewProj = projMat.Mul(camMat.Mul(guessProjInv)); else - ModelViewProj = projMat.Mul(camMat); + ModelViewProj = projMat.Mul(camMat.Mul(axisMapMat)); MeshUBOData uniforms = {}; uniforms.mvp = ModelViewProj;