summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-08-04 12:05:38 +0300
committerMika Salmela <mika.salmela@digia.com>2014-08-04 12:34:23 +0300
commit73f127d8ef1937aa77ba0ec0be63f0bfd6cf92ab (patch)
treea1c982cc4f17477137c384b9725b3af90a67e475 /src
parent4ca6b07cf1a48b9d545c2a1aa7bc6801f93e07e6 (diff)
Reduce the size of surface selection texture
Now four times more vertices are supported. Task-number: QTRD-3244 Change-Id: I80594f4c4f80f485d94dbc2f73892251bb20c521 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com> Reviewed-by: Titta Heikkala <titta.heikkala@digia.com> Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp35
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h2
2 files changed, 13 insertions, 24 deletions
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index b718cb14..83b5c7fb 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -2389,11 +2389,12 @@ void Surface3DRenderer::updateSelectionTextures()
void Surface3DRenderer::createSelectionTexture(SurfaceSeriesRenderCache *cache,
uint &lastSelectionId)
{
- // Create the selection ID image. Each grid corner gets 2x2 pixel area of
- // ID color so that each vertex (data point) has 4x4 pixel area of ID color
+ // Create the selection ID image. Each grid corner gets 1 pixel area of
+ // ID color so that each vertex (data point) has 2x2 pixel area of ID color,
+ // except the vertices on the edges.
const QRect &sampleSpace = cache->sampleSpace();
- int idImageWidth = (sampleSpace.width() - 1) * 4;
- int idImageHeight = (sampleSpace.height() - 1) * 4;
+ int idImageWidth = (sampleSpace.width() - 1) * 2;
+ int idImageHeight = (sampleSpace.height() - 1) * 2;
if (idImageHeight <= 0 || idImageWidth <= 0) {
cache->setSelectionIdRange(-1, -1);
@@ -2405,21 +2406,21 @@ void Surface3DRenderer::createSelectionTexture(SurfaceSeriesRenderCache *cache,
uint idStart = lastSelectionId;
uchar *bits = new uchar[idImageWidth * idImageHeight * 4 * sizeof(uchar)];
- for (int i = 0; i < idImageHeight; i += 4) {
- for (int j = 0; j < idImageWidth; j += 4) {
+ for (int i = 0; i < idImageHeight; i += 2) {
+ for (int j = 0; j < idImageWidth; j += 2) {
int p = (i * idImageWidth + j) * 4;
uchar r, g, b, a;
idToRGBA(lastSelectionId, &r, &g, &b, &a);
- fillIdCorner(&bits[p], r, g, b, a, stride);
+ fillIdCorner(&bits[p], r, g, b, a);
idToRGBA(lastSelectionId + 1, &r, &g, &b, &a);
- fillIdCorner(&bits[p + 8], r, g, b, a, stride);
+ fillIdCorner(&bits[p + 4], r, g, b, a);
idToRGBA(lastSelectionId + sampleSpace.width(), &r, &g, &b, &a);
- fillIdCorner(&bits[p + 2 * stride], r, g, b, a, stride);
+ fillIdCorner(&bits[p + stride], r, g, b, a);
idToRGBA(lastSelectionId + sampleSpace.width() + 1, &r, &g, &b, &a);
- fillIdCorner(&bits[p + 2 * stride + 8], r, g, b, a, stride);
+ fillIdCorner(&bits[p + stride + 4], r, g, b, a);
lastSelectionId++;
}
@@ -2447,24 +2448,12 @@ void Surface3DRenderer::initSelectionBuffer()
m_selectionDepthBuffer);
}
-void Surface3DRenderer::fillIdCorner(uchar *p, uchar r, uchar g, uchar b, uchar a, int stride)
+void Surface3DRenderer::fillIdCorner(uchar *p, uchar r, uchar g, uchar b, uchar a)
{
p[0] = r;
p[1] = g;
p[2] = b;
p[3] = a;
- p[4] = r;
- p[5] = g;
- p[6] = b;
- p[7] = a;
- p[stride + 0] = r;
- p[stride + 1] = g;
- p[stride + 2] = b;
- p[stride + 3] = a;
- p[stride + 4] = r;
- p[stride + 5] = g;
- p[stride + 6] = b;
- p[stride + 7] = a;
}
void Surface3DRenderer::idToRGBA(uint id, uchar *r, uchar *g, uchar *b, uchar *a)
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index c276c1f9..f34a927a 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -144,7 +144,7 @@ private:
void updateSelectionTextures();
void createSelectionTexture(SurfaceSeriesRenderCache *cache, uint &lastSelectionId);
void idToRGBA(uint id, uchar *r, uchar *g, uchar *b, uchar *a);
- void fillIdCorner(uchar *p, uchar r, uchar g, uchar b, uchar a, int stride);
+ void fillIdCorner(uchar *p, uchar r, uchar g, uchar b, uchar a);
void surfacePointSelected(const QPoint &point);
void updateSelectionPoint(SurfaceSeriesRenderCache *cache, const QPoint &point, bool label);
QPoint selectionIdToSurfacePoint(uint id);