Merge pull request #188 from SebastianPFernandez/combine-index-bug-patch
Fixed indexing bug in MeshGeometry.combine
diff --git a/lib/src/vector_math_geometry/mesh_geometry.dart b/lib/src/vector_math_geometry/mesh_geometry.dart
index 254d496..3080a9a 100644
--- a/lib/src/vector_math_geometry/mesh_geometry.dart
+++ b/lib/src/vector_math_geometry/mesh_geometry.dart
@@ -213,14 +213,16 @@
// Copy over the buffer data:
int bufferOffset = 0;
int indexOffset = 0;
+ int vertexOffset = 0;
for (int i = 0; i < meshes.length; ++i) {
final MeshGeometry srcMesh = meshes[i];
mesh.buffer.setAll(bufferOffset, srcMesh.buffer);
if (totalIndices > 0) {
for (int j = 0; j < srcMesh.indices.length; ++j) {
- mesh.indices[j + indexOffset] = srcMesh.indices[j] + bufferOffset;
+ mesh.indices[j + indexOffset] = srcMesh.indices[j] + vertexOffset;
}
+ vertexOffset += srcMesh.length;
indexOffset += srcMesh.indices.length;
}
diff --git a/test/geometry_test.dart b/test/geometry_test.dart
index 15f6990..368ee3a 100644
--- a/test/geometry_test.dart
+++ b/test/geometry_test.dart
@@ -122,11 +122,25 @@
}
}
+void testCombineIndices() {
+ // Combining two meshes should generate indices that are not out of range.
+ SphereGenerator sphereGenerator = new SphereGenerator();
+
+ MeshGeometry sphere0 = sphereGenerator.createSphere(10.0,
+ latSegments: 8, lonSegments: 8);
+ MeshGeometry sphere1 = sphereGenerator.createSphere(10.0,
+ latSegments: 8, lonSegments: 8);
+
+ MeshGeometry combined = new MeshGeometry.combine([sphere0, sphere1]);
+ expect(combined.indices, everyElement(lessThan(combined.length)));
+}
+
void main() {
group('Geometry', () {
group('Generators', () {
test('normal generation', testGenerateNormals);
test('tangent generation', testGenerateTangents);
+ test('geometry combination', testCombineIndices);
});
group('Filters', () {
test('transform filter', testTransformFilter);