Skip to content

Commit

Permalink
Use resource id instead
Browse files Browse the repository at this point in the history
  • Loading branch information
lilleyse committed Mar 3, 2020
1 parent e6786bc commit 67f8e54
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 20 deletions.
25 changes: 16 additions & 9 deletions lib/readResources.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,27 +64,27 @@ function readResources(gltf, options) {
}

function readBuffer(gltf, buffer, options) {
return readResource(gltf, buffer, options)
return readResource(gltf, buffer, false, options)
.then(function(data) {
buffer.extras._pipeline.source = data;
});
}

function readImage(gltf, image, options) {
return readResource(gltf, image, options)
return readResource(gltf, image, true, options)
.then(function(data) {
image.extras._pipeline.source = data;
});
}

function readShader(gltf, shader, options) {
return readResource(gltf, shader, options)
return readResource(gltf, shader, true, options)
.then(function(data) {
shader.extras._pipeline.source = data.toString();
});
}

function readResource(gltf, object, options) {
function readResource(gltf, object, saveResourceId, options) {
const uri = object.uri;
delete object.uri; // Don't hold onto the uri, its contents will be stored in extras._pipeline.source

Expand All @@ -98,27 +98,30 @@ function readResource(gltf, object, options) {
if (defined(extensions)) {
const khrBinaryGltf = extensions.KHR_binary_glTF;
if (defined(khrBinaryGltf)) {
return Promise.resolve(readBufferView(gltf, khrBinaryGltf.bufferView));
return Promise.resolve(readBufferView(gltf, khrBinaryGltf.bufferView, object, saveResourceId));
}
}
if (defined(object.bufferView)) {
return Promise.resolve(readBufferView(gltf, object.bufferView));
return Promise.resolve(readBufferView(gltf, object.bufferView, object, saveResourceId));
}
if (isDataUri(uri)) {
return Promise.resolve(dataUriToBuffer(uri));
}
return readFile(object, uri, options);
return readFile(object, uri, saveResourceId, options);
}

function readBufferView(gltf, bufferViewId) {
function readBufferView(gltf, bufferViewId, object, saveResourceId) {
if (saveResourceId) {
object.extras._pipeline.resourceId = bufferViewId;
}
const bufferView = gltf.bufferViews[bufferViewId];
const buffer = gltf.buffers[bufferView.buffer];
const source = buffer.extras._pipeline.source;
const byteOffset = defaultValue(bufferView.byteOffset, 0);
return source.slice(byteOffset, byteOffset + bufferView.byteLength);
}

function readFile(object, uri, options) {
function readFile(object, uri, saveResourceId, options) {
const resourceDirectory = options.resourceDirectory;
const hasResourceDirectory = defined(resourceDirectory);

Expand All @@ -140,6 +143,10 @@ function readFile(object, uri, options) {
object.name = path.basename(relativePath, extension);
}

if (saveResourceId) {
object.extras._pipeline.resourceId = absolutePath;
}

object.extras._pipeline.absolutePath = absolutePath;
object.extras._pipeline.relativePath = relativePath;
return fsExtra.readFile(absolutePath);
Expand Down
21 changes: 10 additions & 11 deletions lib/writeResources.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,9 @@ function writeBufferView(gltf, object, writtenResourceMap) {
delete object.uri;

// If we've written this resource before, re-use the bufferView
const originalPathOrBufferView = defaultValue(object.extras._pipeline.absolutePath, object.bufferView);
if (defined(originalPathOrBufferView) && defined(writtenResourceMap[originalPathOrBufferView])) {
object.bufferView = writtenResourceMap[originalPathOrBufferView];
const resourceId = object.extras._pipeline.resourceId;
if (defined(resourceId) && defined(writtenResourceMap[resourceId])) {
object.bufferView = writtenResourceMap[resourceId];
return;
}

Expand All @@ -132,8 +132,8 @@ function writeBufferView(gltf, object, writtenResourceMap) {
object.bufferView = addBuffer(gltf, source);

// Save the bufferView so we can re-use it later
if (defined(originalPathOrBufferView)) {
writtenResourceMap[originalPathOrBufferView] = object.bufferView;
if (defined(resourceId)) {
writtenResourceMap[resourceId] = object.bufferView;
}
}

Expand Down Expand Up @@ -200,13 +200,12 @@ function getRelativePath(gltf, object, index, extension, options) {
}

function writeFile(gltf, object, index, extension, writtenResourceMap, options) {
const bufferView = object.bufferView;
delete object.bufferView;

// If we've written this resource before, re-use the uri
const originalPathOrBufferView = defaultValue(object.extras._pipeline.absolutePath, bufferView);
if (defined(originalPathOrBufferView) && defined(writtenResourceMap[originalPathOrBufferView])) {
object.uri = writtenResourceMap[originalPathOrBufferView];
const resourceId = object.extras._pipeline.resourceId;
if (defined(resourceId) && defined(writtenResourceMap[resourceId])) {
object.uri = writtenResourceMap[resourceId];
return;
}

Expand All @@ -218,7 +217,7 @@ function writeFile(gltf, object, index, extension, writtenResourceMap, options)
}

// Save the uri so we can re-use it later
if (defined(originalPathOrBufferView)) {
writtenResourceMap[originalPathOrBufferView] = object.uri;
if (defined(resourceId)) {
writtenResourceMap[resourceId] = object.uri;
}
}

0 comments on commit 67f8e54

Please sign in to comment.