diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-08-04 08:11:00 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-08-08 21:23:36 +0000 |
commit | 04a8dd84be40deab6ab6ae2958db79925e03cbb9 (patch) | |
tree | 61d5a7dd177fd38ac0dea55fbe3787552bb4c164 /src/render/backend/renderview.cpp | |
parent | c3e3f8ccf6f5a2f4439b0d083cf38df8423425bf (diff) |
Set the viewProjection and its inverse as uniforms if used
These are useful for performing ray marching in the fragment shader and
for mapping from screenspace or NDC to world space in general.
Change-Id: I1f273f16c85cdf6c46c03a63f80a6202305c7eaa
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/backend/renderview.cpp')
-rw-r--r-- | src/render/backend/renderview.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp index 8d40f2882..0c45366c4 100644 --- a/src/render/backend/renderview.cpp +++ b/src/render/backend/renderview.cpp @@ -114,12 +114,14 @@ RenderView::StandardUniformsPFuncsHash RenderView::initializeStandardUniformSett setters.insert(StringToInt::lookupId(QLatin1String("viewMatrix")), &RenderView::viewMatrix); setters.insert(StringToInt::lookupId(QLatin1String("projectionMatrix")), &RenderView::projectionMatrix); setters.insert(StringToInt::lookupId(QLatin1String("modelView")), &RenderView::modelViewMatrix); + setters.insert(StringToInt::lookupId(QLatin1String("viewProjectionMatrix")), &RenderView::viewProjectionMatrix); setters.insert(StringToInt::lookupId(QLatin1String("modelViewProjection")), &RenderView::modelViewProjectionMatrix); setters.insert(StringToInt::lookupId(QLatin1String("mvp")), &RenderView::modelViewProjectionMatrix); setters.insert(StringToInt::lookupId(QLatin1String("inverseModelMatrix")), &RenderView::inverseModelMatrix); setters.insert(StringToInt::lookupId(QLatin1String("inverseViewMatrix")), &RenderView::inverseViewMatrix); setters.insert(StringToInt::lookupId(QLatin1String("inverseProjectionMatrix")), &RenderView::inverseProjectionMatrix); setters.insert(StringToInt::lookupId(QLatin1String("inverseModelView")), &RenderView::inverseModelViewMatrix); + setters.insert(StringToInt::lookupId(QLatin1String("inverseViewProjectionMatrix")), &RenderView::inverseViewProjectionMatrix); setters.insert(StringToInt::lookupId(QLatin1String("inverseModelViewProjection")), &RenderView::inverseModelViewProjectionMatrix); setters.insert(StringToInt::lookupId(QLatin1String("modelNormalMatrix")), &RenderView::modelNormalMatrix); setters.insert(StringToInt::lookupId(QLatin1String("modelViewNormal")), &RenderView::modelViewNormalMatrix); @@ -151,6 +153,12 @@ QUniformValue RenderView::modelViewMatrix(const QMatrix4x4 &model) const return QUniformValue(QVariant::fromValue(m_data.m_viewMatrix * model)); } +QUniformValue RenderView::viewProjectionMatrix(const QMatrix4x4 &model) const +{ + Q_UNUSED(model); + return QUniformValue(QVariant::fromValue(m_data.m_renderCameraLens->projection() * m_data.m_viewMatrix)); +} + QUniformValue RenderView::modelViewProjectionMatrix(const QMatrix4x4 &model) const { return QUniformValue(QVariant::fromValue(m_data.m_viewProjectionMatrix * model)); @@ -179,6 +187,13 @@ QUniformValue RenderView::inverseModelViewMatrix(const QMatrix4x4 &model) const return QUniformValue(QVariant::fromValue((m_data.m_viewMatrix * model).inverted())); } +QUniformValue RenderView::inverseViewProjectionMatrix(const QMatrix4x4 &model) const +{ + Q_UNUSED(model); + const auto viewProjectionMatrix = m_data.m_renderCameraLens->projection() * m_data.m_viewMatrix; + return QUniformValue(QVariant::fromValue(viewProjectionMatrix.inverted())); +} + QUniformValue RenderView::inverseModelViewProjectionMatrix(const QMatrix4x4 &model) const { return QUniformValue(QVariant::fromValue((m_data.m_viewProjectionMatrix * model).inverted(0))); |