Skip to content

Commit b6561d9

Browse files
Merge pull request #188 from SebastianPFernandez/combine-index-bug-patch
Fixed indexing bug in MeshGeometry.combine
2 parents 88218c4 + 10fcd15 commit b6561d9

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

lib/src/vector_math_geometry/mesh_geometry.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,14 +213,16 @@ class MeshGeometry {
213213
// Copy over the buffer data:
214214
int bufferOffset = 0;
215215
int indexOffset = 0;
216+
int vertexOffset = 0;
216217
for (int i = 0; i < meshes.length; ++i) {
217218
final MeshGeometry srcMesh = meshes[i];
218219
mesh.buffer.setAll(bufferOffset, srcMesh.buffer);
219220

220221
if (totalIndices > 0) {
221222
for (int j = 0; j < srcMesh.indices.length; ++j) {
222-
mesh.indices[j + indexOffset] = srcMesh.indices[j] + bufferOffset;
223+
mesh.indices[j + indexOffset] = srcMesh.indices[j] + vertexOffset;
223224
}
225+
vertexOffset += srcMesh.length;
224226
indexOffset += srcMesh.indices.length;
225227
}
226228

test/geometry_test.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,25 @@ void testColorFilter() {
122122
}
123123
}
124124

125+
void testCombineIndices() {
126+
// Combining two meshes should generate indices that are not out of range.
127+
SphereGenerator sphereGenerator = new SphereGenerator();
128+
129+
MeshGeometry sphere0 = sphereGenerator.createSphere(10.0,
130+
latSegments: 8, lonSegments: 8);
131+
MeshGeometry sphere1 = sphereGenerator.createSphere(10.0,
132+
latSegments: 8, lonSegments: 8);
133+
134+
MeshGeometry combined = new MeshGeometry.combine([sphere0, sphere1]);
135+
expect(combined.indices, everyElement(lessThan(combined.length)));
136+
}
137+
125138
void main() {
126139
group('Geometry', () {
127140
group('Generators', () {
128141
test('normal generation', testGenerateNormals);
129142
test('tangent generation', testGenerateTangents);
143+
test('geometry combination', testCombineIndices);
130144
});
131145
group('Filters', () {
132146
test('transform filter', testTransformFilter);

0 commit comments

Comments
 (0)