diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-08-18 14:05:47 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-08-19 08:12:06 +0300 |
commit | cf95478ea842cd42a8888b0b74de3d0d0d0233ea (patch) | |
tree | 689e38c48cf39ab3907ef46015f8bf26c4040d16 /src/datavisualization/engine/abstract3drenderer.cpp | |
parent | 169a4d638c6c1b6634ffcfd19c4fe3cb94cf27d5 (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.cpp | 12 |
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 |