diff options
author | Antti Määttä <antti.maatta@qt.io> | 2016-11-16 15:49:19 +0200 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2016-12-10 16:31:51 +0000 |
commit | 629de0e31253d9c8b388f6f549aa3ad6abf3c630 (patch) | |
tree | bd7969cef93126729b7164813b36ce8886001871 | |
parent | c713ba7a34e170937b0cead152b0f68b9aa3e223 (diff) |
Also fix other problems with the trianglevisitor
Indexed triangle strips have wrong index passed to visit. Triangle fans do
not set the first index and traverse incorrectly.
Change-Id: I75971d485edaf1660dd1531d733702283f673e9b
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/render/backend/trianglesvisitor.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/render/backend/trianglesvisitor.cpp b/src/render/backend/trianglesvisitor.cpp index 372d7c6cb..35cdecc29 100644 --- a/src/render/backend/trianglesvisitor.cpp +++ b/src/render/backend/trianglesvisitor.cpp @@ -199,7 +199,7 @@ void traverseTriangleStrip(vertex *vertices, uint ndx[3]; QVector3D abc[3]; - while (i < vertexInfo.count) { + while (i < vertexInfo.count - 2) { for (uint u = 0; u < 3; ++u) { ndx[u] = (i + u); uint idx = ndx[u] * verticesStride; @@ -207,7 +207,7 @@ void traverseTriangleStrip(vertex *vertices, abc[u][j] = vertices[idx + j]; } } - visitor->visit(ndx[2], abc[2], ndx[1], abc[1], ndx[2], abc[0]); + visitor->visit(ndx[2], abc[2], ndx[1], abc[1], ndx[0], abc[0]); ++i; } } @@ -229,18 +229,18 @@ void traverseTriangleFanIndexed(index *indices, for (uint j = 0; j < maxVerticesDataSize; ++j) { abc[0][j] = vertices[static_cast<int>(indices[0]) * verticesStride + j]; } - + ndx[0] = indices[0]; uint i = 1; - while (i < indexInfo.count) { + while (i < indexInfo.count - 1) { for (uint u = 0; u < 2; ++u) { - ndx[i] = indices[i + u]; - uint idx = ndx[i] * verticesStride; + ndx[u + 1] = indices[i + u]; + uint idx = ndx[u + 1] * verticesStride; for (uint j = 0; j < maxVerticesDataSize; ++j) { abc[u + 1][j] = vertices[idx + j]; } } visitor->visit(ndx[2], abc[2], ndx[1], abc[1], ndx[0], abc[0]); - i += 2; + i += 1; } } @@ -259,18 +259,19 @@ void traverseTriangleFan(vertex *vertices, for (uint j = 0; j < maxVerticesDataSize; ++j) { abc[0][j] = vertices[j]; } + ndx[0] = 0; uint i = 1; - while (i < vertexInfo.count) { + while (i < vertexInfo.count - 1) { for (uint u = 0; u < 2; ++u) { - ndx[u] = (i + u); - uint idx = ndx[u] * verticesStride; + ndx[u + 1] = (i + u); + uint idx = ndx[u + 1] * verticesStride; for (uint j = 0; j < maxVerticesDataSize; ++j) { abc[u + 1][j] = vertices[idx + j]; } } visitor->visit(ndx[2], abc[2], ndx[1], abc[1], ndx[0], abc[0]); - i += 2; + i += 1; } } |