-
Notifications
You must be signed in to change notification settings - Fork 251
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #41 from AnalyticalGraphicsInc/addPipelineExtras
Added addPipelineExtras stage
- Loading branch information
Showing
46 changed files
with
5,676 additions
and
425 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,3 +9,4 @@ Thumbs.db | |
.gitconfig | ||
.idea/workspace.xml | ||
.idea/tasks.xml | ||
.bash_history |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
'use strict'; | ||
var Cesium = require('cesium'); | ||
var defined = Cesium.defined; | ||
var defaultValue = Cesium.defaultValue; | ||
|
||
module.exports = addPipelineExtras; | ||
|
||
//Add the pipeline extras object to each glTF object. | ||
function addPipelineExtras(gltf) { | ||
var reference = { | ||
"accessors": { "accessorObject": { "addPipelineExtra": true } }, | ||
"animations": { | ||
"animationObject": { | ||
"channels": [ | ||
{ | ||
"target": { "addPipelineExtra": true }, | ||
"addPipelineExtra": true | ||
} | ||
], | ||
"samplers": { "samplerObject": { "addPipelineExtra": true } }, | ||
"addPipelineExtra": true | ||
} | ||
}, | ||
"asset": { | ||
"profile": { "addPipelineExtra": true }, | ||
"addPipelineExtra": true | ||
}, | ||
"buffers": { "bufferObject": { "addPipelineExtra": true } }, | ||
"bufferViews": { "bufferViewObject": { "addPipelineExtra": true } }, | ||
"cameras": { | ||
"cameraObject": { | ||
"orthographic": { "addPipelineExtra": true }, | ||
"perspective": { "addPipelineExtra": true }, | ||
"addPipelineExtra": true | ||
} | ||
}, | ||
"images": { "imageObject": { "addPipelineExtra": true } }, | ||
"materials": { "materialObject": { "addPipelineExtra": true } }, | ||
"meshes": { | ||
"meshObject": { | ||
"primitives": [ | ||
{ "addPipelineExtra": true } | ||
], | ||
"addPipelineExtra": true | ||
} | ||
}, | ||
"nodes": { "nodeObject": { "addPipelineExtra": true } }, | ||
"programs": { "programObject": { "addPipelineExtra": true } }, | ||
"samplers": { "samplerObject": { "addPipelineExtra": true } }, | ||
"scenes": { "sceneObject": { "addPipelineExtra": true } }, | ||
"shaders": { "shaderObject": { "addPipelineExtra": true } }, | ||
"skins": { "skinObject": { "addPipelineExtra": true } }, | ||
"techniques": { | ||
"techniqueObject": { | ||
"parameters": { "parameterObject": { "addPipelineExtra": true } }, | ||
"states": { | ||
"functions": { "addPipelineExtra": true }, | ||
"addPipelineExtra": true | ||
}, | ||
"addPipelineExtra": true | ||
} | ||
}, | ||
"textures": { "textureObject": { "addPipelineExtra": true } }, | ||
"addPipelineExtra": true | ||
}; | ||
|
||
addPipelineExtra(gltf, reference); | ||
|
||
return gltf; | ||
} | ||
|
||
function addPipelineExtra(object, reference) { | ||
if (defined(reference) && defined(object) && typeof object === 'object') { | ||
if (defined(reference.addPipelineExtra)) { | ||
if (defined(object.extras)) { | ||
object.extras._pipeline = { | ||
"deleteExtras": false | ||
}; | ||
} | ||
else { | ||
object.extras = { | ||
"_pipeline": { | ||
"deleteExtras": true | ||
} | ||
}; | ||
} | ||
} | ||
|
||
for (var propertyId in object) { | ||
if (object.hasOwnProperty(propertyId) && propertyId !== 'extras') { | ||
var property = object[propertyId]; | ||
|
||
if (reference.hasOwnProperty(propertyId)) { | ||
addPipelineExtra(property, reference[propertyId]); | ||
} | ||
else { | ||
for (var referencePropertyId in reference) { | ||
if (reference.hasOwnProperty(referencePropertyId)) { | ||
var referenceProperty = reference[referencePropertyId]; | ||
if (typeof referenceProperty === 'object') { | ||
addPipelineExtra(property, referenceProperty); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
return object; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/*jshint loopfunc: true */ | ||
'use strict'; | ||
var Cesium = require('cesium'); | ||
var defined = Cesium.defined; | ||
var defaultValue = Cesium.defaultValue; | ||
var objectValues = require('object-values'); | ||
|
||
module.exports = mergeBuffers; | ||
|
||
//Merge all buffers into one buffer | ||
function mergeBuffers(gltf, bufferName) { | ||
var buffers = gltf.buffers; | ||
var bufferViews = gltf.bufferViews; | ||
|
||
if (defined(buffers)) { | ||
var currentOffset = 0; | ||
var source = new Buffer(0); | ||
|
||
for (var bufferId in buffers) { | ||
if (buffers.hasOwnProperty(bufferId)) { | ||
//Add the buffer to the merged source | ||
var buffer = buffers[bufferId]; | ||
source = Buffer.concat([source, buffer.extras._pipeline.source]); | ||
|
||
if (defined(bufferViews)) { | ||
//Update the offset for each accessing bufferView | ||
var accessingBufferViews = objectValues(bufferViews); | ||
accessingBufferViews = accessingBufferViews.filter(function(bufferView) { | ||
return bufferView.buffer === bufferId; | ||
}); | ||
var maxEndOffset = 0; | ||
for (var i = 0; i < accessingBufferViews.length; i++) { | ||
var currentView = accessingBufferViews[i]; | ||
maxEndOffset = Math.max(maxEndOffset, currentView.byteOffset + currentView.byteLength); | ||
currentView.buffer = bufferName; | ||
currentView.byteOffset += currentOffset; | ||
} | ||
currentOffset += maxEndOffset; | ||
} | ||
} | ||
} | ||
|
||
//Replace existing buffer with new merged buffer | ||
gltf.buffers = {}; | ||
gltf.buffers[bufferName] = { | ||
"type": "arraybuffer", | ||
"byteLength": source.length, | ||
"uri": "data:,", | ||
"extras": { | ||
"_pipeline": { | ||
"source": source, | ||
"deleteExtras": true | ||
} | ||
} | ||
}; | ||
} | ||
|
||
return gltf; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,29 @@ | ||
'use strict'; | ||
var Cesium = require('cesium'); | ||
var defined = Cesium.defined; | ||
var defaultValue = Cesium.defaultValue; | ||
|
||
module.exports = removePipelineExtras; | ||
|
||
function removePipelineExtras(gltf) { | ||
//Iterate through the objects within each glTF object and delete their pipeline extras object | ||
if (defined(gltf)) { | ||
for (var gltfObjectId in gltf) { | ||
if (gltf.hasOwnProperty(gltfObjectId)) { | ||
var gltfObject = gltf[gltfObjectId]; | ||
for (var objectId in gltfObject) { | ||
if (gltfObject.hasOwnProperty(objectId)) { | ||
var object = gltfObject[objectId]; | ||
if (defined(object.extras)) { | ||
if (defined(object.extras._pipeline)) { | ||
delete object.extras._pipeline; | ||
} | ||
//Also delete extras if extras._pipeline is the only extras object | ||
if (Object.keys(object.extras).length === 0) { | ||
delete object.extras; | ||
} | ||
} | ||
} | ||
} | ||
//Iterate through the objects within each glTF object and delete their pipeline extras object | ||
function removePipelineExtras(object) { | ||
if (defined(object) && typeof object === 'object') { | ||
if (defined(object.extras) && defined(object.extras._pipeline)) { | ||
var deleteExtras = defaultValue(object.extras._pipeline.deleteExtras, true); | ||
delete object.extras._pipeline; | ||
//Also delete extras if extras._pipeline is the only extras object | ||
if (deleteExtras && Object.keys(object.extras).length === 0) { | ||
delete object.extras; | ||
} | ||
} | ||
|
||
//Recursively check subproperties for extras | ||
for (var propertyId in object) { | ||
if (object.hasOwnProperty(propertyId)) { | ||
removePipelineExtras(object[propertyId]); | ||
} | ||
} | ||
} | ||
|
||
return gltf; | ||
return object; | ||
} |
Oops, something went wrong.