diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/extras/shaders/rhi/default_pos_norm.vert | 2 | ||||
-rw-r--r-- | src/extras/shaders/rhi/default_pos_norm_tex_tan.vert | 2 | ||||
-rw-r--r-- | src/extras/shaders/rhi/default_pos_tex.vert | 2 | ||||
-rw-r--r-- | src/extras/shaders/rhi/defaultuniforms.inc | 2 | ||||
-rw-r--r-- | src/extras/shaders/rhi/gooch.frag | 2 | ||||
-rw-r--r-- | src/extras/shaders/rhi/pervertexcolor.frag | 2 | ||||
-rw-r--r-- | src/extras/shaders/rhi/skybox.frag | 2 | ||||
-rw-r--r-- | src/extras/shaders/rhi/skybox.vert | 2 | ||||
-rw-r--r-- | src/extras/shaders/rhi/unlittexture.vert | 2 | ||||
-rw-r--r-- | src/plugins/renderers/rhi/renderer/renderview.cpp | 16 | ||||
-rw-r--r-- | src/plugins/renderers/rhi/renderer/renderview_p.h | 8 |
11 files changed, 29 insertions, 13 deletions
diff --git a/src/extras/shaders/rhi/default_pos_norm.vert b/src/extras/shaders/rhi/default_pos_norm.vert index 52f14fbdc..0d352123e 100644 --- a/src/extras/shaders/rhi/default_pos_norm.vert +++ b/src/extras/shaders/rhi/default_pos_norm.vert @@ -59,6 +59,8 @@ layout(location = 1) out vec3 worldNormal; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/extras/shaders/rhi/default_pos_norm_tex_tan.vert b/src/extras/shaders/rhi/default_pos_norm_tex_tan.vert index 5679d8681..80ca6e55c 100644 --- a/src/extras/shaders/rhi/default_pos_norm_tex_tan.vert +++ b/src/extras/shaders/rhi/default_pos_norm_tex_tan.vert @@ -63,6 +63,8 @@ layout(location = 3) out vec2 texCoord; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/extras/shaders/rhi/default_pos_tex.vert b/src/extras/shaders/rhi/default_pos_tex.vert index 44176ef35..d9d9cd512 100644 --- a/src/extras/shaders/rhi/default_pos_tex.vert +++ b/src/extras/shaders/rhi/default_pos_tex.vert @@ -59,6 +59,8 @@ layout(location = 3) out vec2 texCoord; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/extras/shaders/rhi/defaultuniforms.inc b/src/extras/shaders/rhi/defaultuniforms.inc index df01c3eeb..f0ee8cfd9 100644 --- a/src/extras/shaders/rhi/defaultuniforms.inc +++ b/src/extras/shaders/rhi/defaultuniforms.inc @@ -1,6 +1,8 @@ layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/extras/shaders/rhi/gooch.frag b/src/extras/shaders/rhi/gooch.frag index 8a0a32f18..cfa40a17a 100644 --- a/src/extras/shaders/rhi/gooch.frag +++ b/src/extras/shaders/rhi/gooch.frag @@ -8,6 +8,8 @@ layout(location = 0) out vec4 fragColor; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/extras/shaders/rhi/pervertexcolor.frag b/src/extras/shaders/rhi/pervertexcolor.frag index da3ea149e..156c595fd 100644 --- a/src/extras/shaders/rhi/pervertexcolor.frag +++ b/src/extras/shaders/rhi/pervertexcolor.frag @@ -9,6 +9,8 @@ layout(location = 0) out vec4 fragColor; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/extras/shaders/rhi/skybox.frag b/src/extras/shaders/rhi/skybox.frag index 649894b15..eedf80231 100644 --- a/src/extras/shaders/rhi/skybox.frag +++ b/src/extras/shaders/rhi/skybox.frag @@ -9,6 +9,8 @@ layout(location = 0) out vec4 fragColor; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/extras/shaders/rhi/skybox.vert b/src/extras/shaders/rhi/skybox.vert index 8f3de6f62..61383f730 100644 --- a/src/extras/shaders/rhi/skybox.vert +++ b/src/extras/shaders/rhi/skybox.vert @@ -6,6 +6,8 @@ layout(location = 0) out vec3 texCoord0; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/extras/shaders/rhi/unlittexture.vert b/src/extras/shaders/rhi/unlittexture.vert index 08f06e817..e343f45b7 100644 --- a/src/extras/shaders/rhi/unlittexture.vert +++ b/src/extras/shaders/rhi/unlittexture.vert @@ -9,6 +9,8 @@ layout(location = 1) out vec2 texCoord; layout(std140, binding = 0) uniform qt3d_render_view_uniforms { mat4 viewMatrix; mat4 projectionMatrix; + mat4 uncorrectedProjectionMatrix; + mat4 clipCorrectionMatrix; mat4 viewProjectionMatrix; mat4 inverseViewMatrix; mat4 inverseProjectionMatrix; diff --git a/src/plugins/renderers/rhi/renderer/renderview.cpp b/src/plugins/renderers/rhi/renderer/renderview.cpp index 073c7fb04..bed1ef641 100644 --- a/src/plugins/renderers/rhi/renderer/renderview.cpp +++ b/src/plugins/renderers/rhi/renderer/renderview.cpp @@ -142,18 +142,11 @@ static QRectF resolveViewport(const QRectF &fractionalViewport, const QSize &sur fractionalViewport.height() * surfaceSize.height()); } -static Matrix4x4 getProjectionMatrix(const CameraLens *lens, bool yIsUp) +static Matrix4x4 getProjectionMatrix(const CameraLens *lens) { Matrix4x4 m; if (lens) m = lens->projection(); - if (!yIsUp) { - const Matrix4x4 rev { 1, 0, 0, 0, - 0, -1, 0, 0, - 0, 0, 0.5, 0.5, - 0, 0, 0, 1 }; - return rev * m; - } return m; } @@ -1083,7 +1076,10 @@ void RenderView::updateRenderCommand(const EntityRenderCommandDataSubView &subVi { // Update RenderViewUBO (Qt3D standard uniforms) const bool yIsUp = m_renderer->submissionContext()->rhi()->isYUpInNDC(); - const Matrix4x4 projectionMatrix = getProjectionMatrix(m_renderCameraLens, yIsUp); + + const Matrix4x4 clipCorrectionMatrix = Matrix4x4(m_renderer->submissionContext()->rhi()->clipSpaceCorrMatrix()); + const Matrix4x4 unCorrectedProjectionMatrix = getProjectionMatrix(m_renderCameraLens); + const Matrix4x4 projectionMatrix = clipCorrectionMatrix * unCorrectedProjectionMatrix; const Matrix4x4 inverseViewMatrix = m_viewMatrix.inverted(); const Matrix4x4 inversedProjectionMatrix = projectionMatrix.inverted(); const Matrix4x4 viewProjectionMatrix = (projectionMatrix * m_viewMatrix); @@ -1091,6 +1087,8 @@ void RenderView::updateRenderCommand(const EntityRenderCommandDataSubView &subVi { memcpy(&m_renderViewUBO.viewMatrix, &m_viewMatrix, sizeof(Matrix4x4)); memcpy(&m_renderViewUBO.projectionMatrix, &projectionMatrix, sizeof(Matrix4x4)); + memcpy(&m_renderViewUBO.clipCorrectionMatrix, &clipCorrectionMatrix, sizeof(Matrix4x4)); + memcpy(&m_renderViewUBO.uncorrectedProjectionMatrix, &unCorrectedProjectionMatrix, sizeof(Matrix4x4)); memcpy(&m_renderViewUBO.viewProjectionMatrix, &viewProjectionMatrix, sizeof(Matrix4x4)); memcpy(&m_renderViewUBO.inverseViewMatrix, &inverseViewMatrix, sizeof(Matrix4x4)); memcpy(&m_renderViewUBO.inverseProjectionMatrix, &inversedProjectionMatrix, diff --git a/src/plugins/renderers/rhi/renderer/renderview_p.h b/src/plugins/renderers/rhi/renderer/renderview_p.h index df5fe0438..dad66d2d5 100644 --- a/src/plugins/renderers/rhi/renderer/renderview_p.h +++ b/src/plugins/renderers/rhi/renderer/renderview_p.h @@ -125,13 +125,12 @@ struct Q_AUTOTEST_EXPORT BlitFramebufferInfo QBlitFramebuffer::InterpolationMethod interpolationMethod; }; -// This class is kind of analogous to RenderBin but I want to avoid trampling -// on that until we get this working - struct RenderViewUBO { float viewMatrix[16]; float projectionMatrix[16]; + float uncorrectedProjectionMatrix[16]; + float clipCorrectionMatrix[16]; float viewProjectionMatrix[16]; float inverseViewMatrix[16]; float inverseProjectionMatrix[16]; @@ -147,7 +146,7 @@ struct RenderViewUBO float yUpInNDC; float yUpInFBO; }; -static_assert(sizeof(RenderViewUBO) == sizeof(float) * (8 * 16 + 1 * 4 + 1 * 3 + 6 * 1), +static_assert(sizeof(RenderViewUBO) == sizeof(float) * (10 * 16 + 1 * 4 + 1 * 3 + 6 * 1), "UBO doesn't match std140"); class Q_AUTOTEST_EXPORT RenderView @@ -348,6 +347,7 @@ private: Qt3DCore::QNodeIdVector m_layerFilterIds; Matrix4x4 m_viewMatrix; Matrix4x4 m_viewProjectionMatrix; + Matrix4x4 m_clipCorrectionMatrix; Vector3D m_eyePos; Vector3D m_eyeViewDir; |