diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-07-21 03:01:14 +0200 |
---|---|---|
committer | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2018-07-21 03:01:14 +0200 |
commit | 213f8951a12921870987626ec7522672b7bbfacb (patch) | |
tree | 0303859cc8f04d11b3979736237fe81cf8cb4ac6 /src/render/backend | |
parent | 825f99706f5a2d9f4ed1db9841a5a5ca9e4dee43 (diff) | |
parent | 9e20a1d578a44c6bdb98a9aacd7daf7aaf166e3e (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Change-Id: Ic7b387e96c7976772c6c1a5f88da52524d9b4010
Diffstat (limited to 'src/render/backend')
-rw-r--r-- | src/render/backend/buffervisitor_p.h | 85 |
1 files changed, 48 insertions, 37 deletions
diff --git a/src/render/backend/buffervisitor_p.h b/src/render/backend/buffervisitor_p.h index 6cb334e61..f3863f0a3 100644 --- a/src/render/backend/buffervisitor_p.h +++ b/src/render/backend/buffervisitor_p.h @@ -95,6 +95,31 @@ public: Q_UNUSED(ndx); Q_UNUSED(x); Q_UNUSED(y); Q_UNUSED(z); Q_UNUSED(w); } + template<typename VertexBufferType, typename IndexBufferType> + void traverseCoordinateIndexed(VertexBufferType *vertexBuffer, + IndexBufferType *indexBuffer, + int vertexByteStride, + int drawVertexCount, + bool primitiveRestartEnabled, + int primitiveRestartIndex) + { + switch (dataSize) { + case 1: traverseCoordinates1Indexed(vertexBuffer, vertexByteStride, indexBuffer, drawVertexCount, + primitiveRestartEnabled, primitiveRestartIndex); + break; + case 2: traverseCoordinates2Indexed(vertexBuffer, vertexByteStride, indexBuffer, drawVertexCount, + primitiveRestartEnabled, primitiveRestartIndex); + break; + case 3: traverseCoordinates3Indexed(vertexBuffer, vertexByteStride, indexBuffer, drawVertexCount, + primitiveRestartEnabled, primitiveRestartIndex); + break; + case 4: traverseCoordinates4Indexed(vertexBuffer, vertexByteStride, indexBuffer, drawVertexCount, + primitiveRestartEnabled, primitiveRestartIndex); + break; + default: Q_UNREACHABLE(); + } + } + bool apply(Qt3DRender::Render::Attribute *attribute, Qt3DRender::Render::Attribute *indexAttribute, int drawVertexCount, @@ -107,51 +132,37 @@ public: return false; auto data = m_manager->lookupResource<Buffer, BufferManager>(attribute->bufferId())->data(); - auto buffer = BufferTypeInfo::castToType<VertexBaseType>(data, attribute->byteOffset()); + auto vertexBuffer = BufferTypeInfo::castToType<VertexBaseType>(data, attribute->byteOffset()); if (indexAttribute) { auto indexData = m_manager->lookupResource<Buffer, BufferManager>(indexAttribute->bufferId())->data(); - if (indexAttribute->vertexBaseType() == QAttribute::UnsignedShort) { + switch (indexAttribute->vertexBaseType()) { + case QAttribute::UnsignedShort: { auto indexBuffer = BufferTypeInfo::castToType<QAttribute::UnsignedShort>(indexData, indexAttribute->byteOffset()); - switch (dataSize) { - case 1: traverseCoordinates1Indexed(buffer, attribute->byteStride(), indexBuffer, drawVertexCount, - primitiveRestartEnabled, primitiveRestartIndex); - break; - case 2: traverseCoordinates2Indexed(buffer, attribute->byteStride(), indexBuffer, drawVertexCount, - primitiveRestartEnabled, primitiveRestartIndex); - break; - case 3: traverseCoordinates3Indexed(buffer, attribute->byteStride(), indexBuffer, drawVertexCount, - primitiveRestartEnabled, primitiveRestartIndex); - break; - case 4: traverseCoordinates4Indexed(buffer, attribute->byteStride(), indexBuffer, drawVertexCount, - primitiveRestartEnabled, primitiveRestartIndex); - break; - default: Q_UNREACHABLE(); - } - } else { + traverseCoordinateIndexed(vertexBuffer, indexBuffer, attribute->byteStride(), drawVertexCount, + primitiveRestartEnabled, primitiveRestartIndex); + break; + } + case QAttribute::UnsignedInt: { auto indexBuffer = BufferTypeInfo::castToType<QAttribute::UnsignedInt>(indexData, indexAttribute->byteOffset()); - switch (dataSize) { - case 1: traverseCoordinates1Indexed(buffer, attribute->byteStride(), indexBuffer, drawVertexCount, - primitiveRestartEnabled, primitiveRestartIndex); - break; - case 2: traverseCoordinates2Indexed(buffer, attribute->byteStride(), indexBuffer, drawVertexCount, - primitiveRestartEnabled, primitiveRestartIndex); - break; - case 3: traverseCoordinates3Indexed(buffer, attribute->byteStride(), indexBuffer, drawVertexCount, - primitiveRestartEnabled, primitiveRestartIndex); - break; - case 4: traverseCoordinates4Indexed(buffer, attribute->byteStride(), indexBuffer, drawVertexCount, - primitiveRestartEnabled, primitiveRestartIndex); - break; - default: Q_UNREACHABLE(); - } + traverseCoordinateIndexed(vertexBuffer, indexBuffer, attribute->byteStride(), drawVertexCount, + primitiveRestartEnabled, primitiveRestartIndex); + break; + } + case QAttribute::UnsignedByte: { + auto indexBuffer = BufferTypeInfo::castToType<QAttribute::UnsignedByte>(indexData, indexAttribute->byteOffset()); + traverseCoordinateIndexed(vertexBuffer, indexBuffer, attribute->byteStride(), drawVertexCount, + primitiveRestartEnabled, primitiveRestartIndex); + break; + } + default: Q_UNREACHABLE(); } } else { switch (dataSize) { - case 1: traverseCoordinates1(buffer, attribute->byteStride(), drawVertexCount); break; - case 2: traverseCoordinates2(buffer, attribute->byteStride(), drawVertexCount); break; - case 3: traverseCoordinates3(buffer, attribute->byteStride(), drawVertexCount); break; - case 4: traverseCoordinates4(buffer, attribute->byteStride(), drawVertexCount); break; + case 1: traverseCoordinates1(vertexBuffer, attribute->byteStride(), drawVertexCount); break; + case 2: traverseCoordinates2(vertexBuffer, attribute->byteStride(), drawVertexCount); break; + case 3: traverseCoordinates3(vertexBuffer, attribute->byteStride(), drawVertexCount); break; + case 4: traverseCoordinates4(vertexBuffer, attribute->byteStride(), drawVertexCount); break; default: Q_UNREACHABLE(); } } |