summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3drenderer.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-08-18 14:05:47 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-08-19 08:12:06 +0300
commitcf95478ea842cd42a8888b0b74de3d0d0d0233ea (patch)
tree689e38c48cf39ab3907ef46015f8bf26c4040d16 /src/datavisualization/engine/abstract3drenderer.cpp
parent169a4d638c6c1b6634ffcfd19c4fe3cb94cf27d5 (diff)
Make volume shading sample once per texture layer.
Change-Id: Ia3a13e2cb8d7dcf744a55dcb827f5cb436a043c4 Reviewed-by: Mika Salmela <mika.salmela@digia.com> Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index cbb90af0..8eb1d2ce 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -1300,6 +1300,18 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state,
(float(item->sliceIndexZ()) + 0.5f)
/ float(item->textureDepth()) * 2.0 - 1.0);
shader->setUniformValue(shader->volumeSliceIndices(), slices);
+ } else {
+ // Precalculate texture dimensions so we can optimize
+ // ray stepping to hit every texture layer.
+ QVector3D textureDimensions(float(item->textureWidth()),
+ float(item->textureHeight()),
+ float(item->textureDepth()));
+ shader->setUniformValue(shader->textureDimensions(), textureDimensions);
+
+ int sampleCount = qMax(item->textureWidth(), item->textureHeight());
+ sampleCount = qMax(sampleCount, item->textureDepth());
+ shader->setUniformValue(shader->sampleCount(), sampleCount);
+
}
m_drawer->drawObject(shader, item->mesh(), 0, 0, item->texture());
} else