summaryrefslogtreecommitdiffstats
path: root/src/datavis3d/engine/scatter3drenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavis3d/engine/scatter3drenderer.cpp')
-rw-r--r--src/datavis3d/engine/scatter3drenderer.cpp41
1 files changed, 36 insertions, 5 deletions
diff --git a/src/datavis3d/engine/scatter3drenderer.cpp b/src/datavis3d/engine/scatter3drenderer.cpp
index bee1ee5c..8f28e050 100644
--- a/src/datavis3d/engine/scatter3drenderer.cpp
+++ b/src/datavis3d/engine/scatter3drenderer.cpp
@@ -71,7 +71,8 @@ Scatter3DRenderer::Scatter3DRenderer(Scatter3DController *controller)
m_depthFrameBuffer(0),
m_selectionFrameBuffer(0),
m_selectionDepthBuffer(0),
- m_shadowQualityToShader(33.3f),
+ m_shadowQualityToShader(100.0f),
+ m_shadowQualityMultiplier(3),
m_heightNormalizer(1.0f),
m_scaleFactor(0),
m_selection(selectionSkipColor),
@@ -294,8 +295,8 @@ void Scatter3DRenderer::drawScene(CameraHelper *camera,
// Set viewport for depth map rendering. Must match texture size. Larger values give smoother shadows.
glViewport(m_mainViewPort.x(), m_mainViewPort.y(),
- m_mainViewPort.width() * m_cachedShadowQuality,
- m_mainViewPort.height() * m_cachedShadowQuality);
+ m_mainViewPort.width() * m_shadowQualityMultiplier,
+ m_mainViewPort.height() * m_shadowQualityMultiplier);
// Enable drawing to framebuffer
glBindFramebuffer(GL_FRAMEBUFFER, m_depthFrameBuffer);
@@ -1403,20 +1404,35 @@ void Scatter3DRenderer::updateBackgroundEnabled(bool enable)
void Scatter3DRenderer::updateShadowQuality(QDataVis::ShadowQuality quality)
{
- qDebug() << __FUNCTION__ << quality;
m_cachedShadowQuality = quality;
switch (quality) {
case QDataVis::ShadowLow:
m_shadowQualityToShader = 33.3f;
+ m_shadowQualityMultiplier = 1;
break;
case QDataVis::ShadowMedium:
m_shadowQualityToShader = 100.0f;
+ m_shadowQualityMultiplier = 3;
break;
case QDataVis::ShadowHigh:
m_shadowQualityToShader = 200.0f;
+ m_shadowQualityMultiplier = 5;
+ break;
+ case QDataVis::ShadowSoftLow:
+ m_shadowQualityToShader = 5.0f;
+ m_shadowQualityMultiplier = 1;
+ break;
+ case QDataVis::ShadowSoftMedium:
+ m_shadowQualityToShader = 10.0f;
+ m_shadowQualityMultiplier = 3;
+ break;
+ case QDataVis::ShadowSoftHigh:
+ m_shadowQualityToShader = 15.0f;
+ m_shadowQualityMultiplier = 4;
break;
default:
m_shadowQualityToShader = 0.0f;
+ m_shadowQualityMultiplier = 1;
break;
}
@@ -1560,7 +1576,7 @@ void Scatter3DRenderer::updateDepthBuffer()
if (m_cachedShadowQuality > QDataVis::ShadowNone) {
m_depthTexture = m_textureHelper->createDepthTexture(m_mainViewPort.size(),
m_depthFrameBuffer,
- m_cachedShadowQuality);
+ m_shadowQualityMultiplier);
if (!m_depthTexture) {
switch (m_cachedShadowQuality) {
case QDataVis::ShadowHigh:
@@ -1578,6 +1594,21 @@ void Scatter3DRenderer::updateDepthBuffer()
(void)m_controller->setShadowQuality(QDataVis::ShadowNone);
updateShadowQuality(QDataVis::ShadowNone);
break;
+ case QDataVis::ShadowSoftHigh:
+ qWarning("Creating soft high quality shadows failed. Changing to soft medium quality.");
+ (void)m_controller->setShadowQuality(QDataVis::ShadowSoftMedium);
+ updateShadowQuality(QDataVis::ShadowSoftMedium);
+ break;
+ case QDataVis::ShadowSoftMedium:
+ qWarning("Creating soft medium quality shadows failed. Changing to soft low quality.");
+ (void)m_controller->setShadowQuality(QDataVis::ShadowSoftLow);
+ updateShadowQuality(QDataVis::ShadowSoftLow);
+ break;
+ case QDataVis::ShadowSoftLow:
+ qWarning("Creating soft low quality shadows failed. Switching shadows off.");
+ (void)m_controller->setShadowQuality(QDataVis::ShadowNone);
+ updateShadowQuality(QDataVis::ShadowNone);
+ break;
default:
// You'll never get here
break;