Skip to content

Commit 8376de2

Browse files
authored
Fix buffer view target overrides in glTF exporter (#7152)
1 parent c869024 commit 8376de2

File tree

1 file changed

+14
-19
lines changed

1 file changed

+14
-19
lines changed

src/extras/exporters/gltf-exporter.js

+14-19
Original file line numberDiff line numberDiff line change
@@ -242,15 +242,21 @@ class GltfExporter extends CoreExporter {
242242

243243
// FIXME: don't create the function every time
244244
const addBufferView = (target, byteLength, byteOffset, byteStride) => {
245-
246245
const bufferView = {
247-
target: target,
248246
buffer: 0,
249247
byteLength: byteLength,
250-
byteOffset: byteOffset,
251-
byteStride: byteStride
248+
byteOffset: byteOffset
252249
};
253250

251+
// Only add target if it's a vertex or index buffer
252+
if (target === ARRAY_BUFFER || target === ELEMENT_ARRAY_BUFFER) {
253+
bufferView.target = target;
254+
}
255+
256+
if (byteStride !== undefined) {
257+
bufferView.byteStride = byteStride;
258+
}
259+
254260
return json.bufferViews.push(bufferView) - 1;
255261
};
256262

@@ -260,42 +266,31 @@ class GltfExporter extends CoreExporter {
260266

261267
const format = buffer.getFormat();
262268
if (format.interleaved) {
263-
264269
const bufferViewIndex = addBufferView(ARRAY_BUFFER, arrayBuffer.byteLength, offset, format.size);
265270
resources.bufferViewMap.set(buffer, [bufferViewIndex]);
266-
267271
} else {
268-
269272
// generate buffer view per element
270273
const bufferViewIndices = [];
271274
for (const element of format.elements) {
272-
273275
const bufferViewIndex = addBufferView(
274276
ARRAY_BUFFER,
275277
element.size * format.vertexCount,
276278
offset + element.offset,
277279
element.size
278280
);
279281
bufferViewIndices.push(bufferViewIndex);
280-
281282
}
282-
283283
resources.bufferViewMap.set(buffer, bufferViewIndices);
284284
}
285-
286-
} else if (buffer instanceof IndexBuffer) { // index buffer
285+
} else if (buffer instanceof IndexBuffer) {
287286
arrayBuffer = buffer.lock();
288-
289-
const bufferViewIndex = addBufferView(ARRAY_BUFFER, arrayBuffer.byteLength, offset);
287+
const bufferViewIndex = addBufferView(ELEMENT_ARRAY_BUFFER, arrayBuffer.byteLength, offset);
290288
resources.bufferViewMap.set(buffer, [bufferViewIndex]);
291-
292289
} else {
293-
// buffer is an array buffer
290+
// buffer is an array buffer (for images)
294291
arrayBuffer = buffer;
295-
296-
const bufferViewIndex = addBufferView(ELEMENT_ARRAY_BUFFER, arrayBuffer.byteLength, offset);
292+
const bufferViewIndex = addBufferView(undefined, arrayBuffer.byteLength, offset);
297293
resources.bufferViewMap.set(buffer, [bufferViewIndex]);
298-
299294
}
300295

301296
// increment buffer by the size of the array buffer to allocate buffer with enough space

0 commit comments

Comments
 (0)