summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2020-07-21 09:48:48 +0100
committerMike Krus <mike.krus@kdab.com>2020-07-27 11:29:54 +0100
commit394213a9817e2876d976489c4bb859a569363cc7 (patch)
tree58be52823ea0156c4f6f2cb4245cd9a1c02c8881 /src/core
parente73b431baa752cef4387cf9e204c27ee476f9acf (diff)
Update buffer visitor
Optimize iteration in non-primitive-restart case; remove code duplication. Change-Id: Ie459485c1cefc51956029e56e266a98c17d5b038 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/geometry/buffervisitor_p.h45
1 files changed, 36 insertions, 9 deletions
diff --git a/src/core/geometry/buffervisitor_p.h b/src/core/geometry/buffervisitor_p.h
index b1166555b..d6e730626 100644
--- a/src/core/geometry/buffervisitor_p.h
+++ b/src/core/geometry/buffervisitor_p.h
@@ -178,8 +178,15 @@ protected:
int primitiveRestartIndex)
{
const uint stride = byteStride / sizeof(Coordinate);
- for (uint i = 0; i < count; ++i) {
- if (!primitiveRestartEnabled || static_cast<int>(indices[i]) != primitiveRestartIndex) {
+ if (primitiveRestartEnabled) {
+ for (uint i = 0; i < count; ++i) {
+ if (static_cast<int>(indices[i]) != primitiveRestartIndex) {
+ const uint n = stride * indices[i];
+ visit(i, coordinates[n]);
+ }
+ }
+ } else {
+ for (uint i = 0; i < count; ++i) {
const uint n = stride * indices[i];
visit(i, coordinates[n]);
}
@@ -198,7 +205,6 @@ protected:
}
}
-
template <typename Coordinate, typename IndexElem>
void traverseCoordinates2Indexed(Coordinate *coordinates,
const uint byteStride,
@@ -208,8 +214,15 @@ protected:
int primitiveRestartIndex)
{
const uint stride = byteStride ? byteStride / sizeof(Coordinate) : 2;
- for (uint i = 0; i < count; ++i) {
- if (!primitiveRestartEnabled || static_cast<int>(indices[i]) != primitiveRestartIndex) {
+ if (primitiveRestartEnabled) {
+ for (uint i = 0; i < count; ++i) {
+ if (static_cast<int>(indices[i]) != primitiveRestartIndex) {
+ const uint n = stride * indices[i];
+ visit(i, coordinates[n], coordinates[n + 1]);
+ }
+ }
+ } else {
+ for (uint i = 0; i < count; ++i) {
const uint n = stride * indices[i];
visit(i, coordinates[n], coordinates[n + 1]);
}
@@ -237,8 +250,15 @@ protected:
int primitiveRestartIndex)
{
const uint stride = byteStride ? byteStride / sizeof(Coordinate) : 3;
- for (uint i = 0; i < count; ++i) {
- if (!primitiveRestartEnabled || static_cast<int>(indices[i]) != primitiveRestartIndex) {
+ if (primitiveRestartEnabled) {
+ for (uint i = 0; i < count; ++i) {
+ if (static_cast<int>(indices[i]) != primitiveRestartIndex) {
+ const uint n = stride * indices[i];
+ visit(i, coordinates[n], coordinates[n + 1], coordinates[n + 2]);
+ }
+ }
+ } else {
+ for (uint i = 0; i < count; ++i) {
const uint n = stride * indices[i];
visit(i, coordinates[n], coordinates[n + 1], coordinates[n + 2]);
}
@@ -266,8 +286,15 @@ protected:
int primitiveRestartIndex)
{
const uint stride = byteStride ? byteStride / sizeof(Coordinate) : 4;
- for (uint i = 0; i < count; ++i) {
- if (!primitiveRestartEnabled || static_cast<int>(indices[i]) != primitiveRestartIndex) {
+ if (primitiveRestartEnabled) {
+ for (uint i = 0; i < count; ++i) {
+ if (static_cast<int>(indices[i]) != primitiveRestartIndex) {
+ const uint n = stride * indices[i];
+ visit(i, coordinates[n], coordinates[n + 1], coordinates[n + 2], coordinates[n + 3]);
+ }
+ }
+ } else {
+ for (uint i = 0; i < count; ++i) {
const uint n = stride * indices[i];
visit(i, coordinates[n], coordinates[n + 1], coordinates[n + 2], coordinates[n + 3]);
}