Better buffer handling

This commit is contained in:
Sean Lilley 2017-03-14 14:40:33 -04:00
parent 998dcfe649
commit cf27c8b69d
1 changed files with 12 additions and 12 deletions

View File

@ -144,9 +144,9 @@ function createGltf(objData) {
} }
var vertexBuffers = []; var vertexBuffers = [];
var vertexByteOffset = 0; var vertexBufferByteOffset = 0;
var indexBuffers = []; var indexBuffers = [];
var indexBuffersByteOffset = 0; var indexBufferByteOffset = 0;
var accessorCount = 0; var accessorCount = 0;
function addVertexAttribute(array, components) { function addVertexAttribute(array, components) {
@ -157,7 +157,7 @@ function createGltf(objData) {
var type = (components === 3 ? 'VEC3' : 'VEC2'); var type = (components === 3 ? 'VEC3' : 'VEC2');
var accessor = { var accessor = {
bufferView : vertexBufferViewId, bufferView : vertexBufferViewId,
byteOffset : vertexByteOffset, byteOffset : vertexBufferByteOffset,
byteStride : 0, byteStride : 0,
componentType : WebGLConstants.FLOAT, componentType : WebGLConstants.FLOAT,
count : count, count : count,
@ -166,7 +166,7 @@ function createGltf(objData) {
type : type type : type
}; };
vertexByteOffset += buffer.length; vertexBufferByteOffset += buffer.length;
vertexBuffers.push(buffer); vertexBuffers.push(buffer);
var accessorId = 'accessor_' + accessorCount++; var accessorId = 'accessor_' + accessorCount++;
gltf.accessors[accessorId] = accessor; gltf.accessors[accessorId] = accessor;
@ -180,7 +180,7 @@ function createGltf(objData) {
var minMax = array.getMinMax(1); var minMax = array.getMinMax(1);
var accessor = { var accessor = {
bufferView : indexBufferViewId, bufferView : indexBufferViewId,
byteOffset : indexBuffersByteOffset, byteOffset : indexBufferByteOffset,
byteStride : 0, byteStride : 0,
componentType : componentType, componentType : componentType,
count : length, count : length,
@ -189,7 +189,7 @@ function createGltf(objData) {
type : 'SCALAR' type : 'SCALAR'
}; };
indexBuffersByteOffset += buffer.length; indexBufferByteOffset += buffer.length;
indexBuffers.push(buffer); indexBuffers.push(buffer);
var accessorId = 'accessor_' + accessorCount++; var accessorId = 'accessor_' + accessorCount++;
@ -300,9 +300,9 @@ function createGltf(objData) {
} }
} }
var vertexBuffer = Buffer.concat(vertexBuffers); var buffers = [];
var indexBuffer = Buffer.concat(indexBuffers); buffers = buffers.concat(vertexBuffers, indexBuffers);
var buffer = Buffer.concat([vertexBuffer, indexBuffer]); var buffer = Buffer.concat(buffers);
// Buffers larger than ~192MB cannot be base64 encoded due to a NodeJS limitation. Source: https://github.com/nodejs/node/issues/4266 // Buffers larger than ~192MB cannot be base64 encoded due to a NodeJS limitation. Source: https://github.com/nodejs/node/issues/4266
var bufferUri; var bufferUri;
@ -317,15 +317,15 @@ function createGltf(objData) {
gltf.bufferViews[vertexBufferViewId] = { gltf.bufferViews[vertexBufferViewId] = {
buffer : bufferId, buffer : bufferId,
byteLength : vertexBuffer.length, byteLength : vertexBufferByteOffset,
byteOffset : 0, byteOffset : 0,
target : WebGLConstants.ARRAY_BUFFER target : WebGLConstants.ARRAY_BUFFER
}; };
gltf.bufferViews[indexBufferViewId] = { gltf.bufferViews[indexBufferViewId] = {
buffer : bufferId, buffer : bufferId,
byteLength : indexBuffer.length, byteLength : indexBufferByteOffset,
byteOffset : vertexBuffer.length, byteOffset : vertexBufferByteOffset,
target : WebGLConstants.ELEMENT_ARRAY_BUFFER target : WebGLConstants.ELEMENT_ARRAY_BUFFER
}; };