@@ -242,15 +242,21 @@ class GltfExporter extends CoreExporter {
242
242
243
243
// FIXME: don't create the function every time
244
244
const addBufferView = ( target , byteLength , byteOffset , byteStride ) => {
245
-
246
245
const bufferView = {
247
- target : target ,
248
246
buffer : 0 ,
249
247
byteLength : byteLength ,
250
- byteOffset : byteOffset ,
251
- byteStride : byteStride
248
+ byteOffset : byteOffset
252
249
} ;
253
250
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
+
254
260
return json . bufferViews . push ( bufferView ) - 1 ;
255
261
} ;
256
262
@@ -260,42 +266,31 @@ class GltfExporter extends CoreExporter {
260
266
261
267
const format = buffer . getFormat ( ) ;
262
268
if ( format . interleaved ) {
263
-
264
269
const bufferViewIndex = addBufferView ( ARRAY_BUFFER , arrayBuffer . byteLength , offset , format . size ) ;
265
270
resources . bufferViewMap . set ( buffer , [ bufferViewIndex ] ) ;
266
-
267
271
} else {
268
-
269
272
// generate buffer view per element
270
273
const bufferViewIndices = [ ] ;
271
274
for ( const element of format . elements ) {
272
-
273
275
const bufferViewIndex = addBufferView (
274
276
ARRAY_BUFFER ,
275
277
element . size * format . vertexCount ,
276
278
offset + element . offset ,
277
279
element . size
278
280
) ;
279
281
bufferViewIndices . push ( bufferViewIndex ) ;
280
-
281
282
}
282
-
283
283
resources . bufferViewMap . set ( buffer , bufferViewIndices ) ;
284
284
}
285
-
286
- } else if ( buffer instanceof IndexBuffer ) { // index buffer
285
+ } else if ( buffer instanceof IndexBuffer ) {
287
286
arrayBuffer = buffer . lock ( ) ;
288
-
289
- const bufferViewIndex = addBufferView ( ARRAY_BUFFER , arrayBuffer . byteLength , offset ) ;
287
+ const bufferViewIndex = addBufferView ( ELEMENT_ARRAY_BUFFER , arrayBuffer . byteLength , offset ) ;
290
288
resources . bufferViewMap . set ( buffer , [ bufferViewIndex ] ) ;
291
-
292
289
} else {
293
- // buffer is an array buffer
290
+ // buffer is an array buffer (for images)
294
291
arrayBuffer = buffer ;
295
-
296
- const bufferViewIndex = addBufferView ( ELEMENT_ARRAY_BUFFER , arrayBuffer . byteLength , offset ) ;
292
+ const bufferViewIndex = addBufferView ( undefined , arrayBuffer . byteLength , offset ) ;
297
293
resources . bufferViewMap . set ( buffer , [ bufferViewIndex ] ) ;
298
-
299
294
}
300
295
301
296
// increment buffer by the size of the array buffer to allocate buffer with enough space
0 commit comments