summaryrefslogtreecommitdiffstats
path: root/src/render/backend/visitorutils_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/backend/visitorutils_p.h')
-rw-r--r--src/render/backend/visitorutils_p.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/render/backend/visitorutils_p.h b/src/render/backend/visitorutils_p.h
index 476416ab1..364a8f069 100644
--- a/src/render/backend/visitorutils_p.h
+++ b/src/render/backend/visitorutils_p.h
@@ -111,6 +111,24 @@ void visitPrimitives(NodeManagers *manager, const GeometryProvider *renderer, Vi
Buffer *positionBuffer = nullptr;
Buffer *indexBuffer = nullptr;
+ auto updateStride = [](BufferInfo &info, int stride) {
+ if (stride) {
+ info.byteStride = stride;
+ return;
+ }
+ switch (info.type) {
+ case Qt3DCore::QAttribute::Byte: info.byteStride = sizeof(qint8) * info.dataSize; return;
+ case Qt3DCore::QAttribute::UnsignedByte: info.byteStride = sizeof(quint8) * info.dataSize; return;
+ case Qt3DCore::QAttribute::Short: info.byteStride = sizeof(qint16) * info.dataSize; return;
+ case Qt3DCore::QAttribute::UnsignedShort: info.byteStride = sizeof(quint16) * info.dataSize; return;
+ case Qt3DCore::QAttribute::Int: info.byteStride = sizeof(qint32) * info.dataSize; return;
+ case Qt3DCore::QAttribute::UnsignedInt: info.byteStride = sizeof(quint32) * info.dataSize; return;
+ case Qt3DCore::QAttribute::Float: info.byteStride = sizeof(float) * info.dataSize; return;
+ case Qt3DCore::QAttribute::Double: info.byteStride = sizeof(double) * info.dataSize; return;
+ default: return;
+ }
+ };
+
if (geom) {
positionAttribute = manager->lookupResource<Attribute, AttributeManager>(geom->boundingPositionAttribute());
@@ -137,9 +155,9 @@ void visitPrimitives(NodeManagers *manager, const GeometryProvider *renderer, Vi
vertexBufferInfo.data = positionBuffer->data();
vertexBufferInfo.type = positionAttribute->vertexBaseType();
vertexBufferInfo.byteOffset = positionAttribute->byteOffset();
- vertexBufferInfo.byteStride = positionAttribute->byteStride();
vertexBufferInfo.dataSize = positionAttribute->vertexSize();
vertexBufferInfo.count = positionAttribute->count();
+ updateStride(vertexBufferInfo, positionAttribute->byteStride());
if (indexBuffer) { // Indexed
@@ -147,10 +165,10 @@ void visitPrimitives(NodeManagers *manager, const GeometryProvider *renderer, Vi
indexBufferInfo.data = indexBuffer->data();
indexBufferInfo.type = indexAttribute->vertexBaseType();
indexBufferInfo.byteOffset = indexAttribute->byteOffset();
- indexBufferInfo.byteStride = indexAttribute->byteStride();
indexBufferInfo.count = indexAttribute->count();
indexBufferInfo.restartEnabled = renderer->primitiveRestartEnabled();
indexBufferInfo.restartIndexValue = renderer->restartIndexValue();
+ updateStride(indexBufferInfo, indexAttribute->byteStride());
IndexExecutor executor;
executor.m_vertexBufferInfo = vertexBufferInfo;