From cf95478ea842cd42a8888b0b74de3d0d0d0233ea Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 18 Aug 2014 14:05:47 +0300 Subject: Make volume shading sample once per texture layer. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ia3a13e2cb8d7dcf744a55dcb827f5cb436a043c4 Reviewed-by: Mika Salmela Reviewed-by: Tomi Korpipää --- src/datavisualization/engine/abstract3drenderer.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/datavisualization/engine/abstract3drenderer.cpp') 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 -- cgit v1.2.3