Skip to content

Commit

Permalink
Fix for #2 - handle non-partial answers correclty
Browse files Browse the repository at this point in the history
Detect when the whole file was returned instead of a partial answer and handle this correctly
  • Loading branch information
bhaettasch committed Nov 18, 2016
1 parent e957024 commit 9fbaf0e
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 7 deletions.
17 changes: 14 additions & 3 deletions viewer/script/drawer.js
Original file line number Diff line number Diff line change
Expand Up @@ -372,9 +372,20 @@ Drawer.prototype.setUniforms = function() {
* @param interleavedData ArrayBuffer vertices New vertices data to fill buffer with
* @param level level currently loaded
*/
Drawer.prototype.setData = function(interleavedData, level) {
var offset = (level == 1) ? 0 : model.levels[level-2];
var levelsize = (level == 1) ? model.levels[0] : (model.levels[level-1] - model.levels[level-2]);
Drawer.prototype.setData = function(interleavedData, partial, level) {
var offset;
var levelsize;

if(partial)
{
offset = (level == 1) ? 0 : model.levels[level-2];
levelsize = (level == 1) ? model.levels[0] : (model.levels[level-1] - model.levels[level-2]);
}
else
{
offset = 0;
levelsize = model.levels[model.levelCount-1];
}

// Append data to buffer...
this.interleavedArray.set(
Expand Down
23 changes: 19 additions & 4 deletions viewer/script/loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,18 +49,33 @@ loader.loadLevel = function () {
{
var begin = (loader.currentlyLoaded == 0) ? 0 : model.levels[loader.currentlyLoaded-1];
var end = model.levels[loader.currentlyLoaded];
var byteCount = 8;

loader.loadBinary(
loader.path+model.data,
function(arrayBuffer){
loader.currentlyLoaded++;
drawer.setData(new Uint16Array(arrayBuffer), loader.currentlyLoaded);
loader.loadLevel();
// Does the answer contain only the requested range of bytes?
if(arrayBuffer.byteLength == (end-begin)*byteCount)
{
loader.currentlyLoaded++;

// Add this data to the data to display...
drawer.setData(new Uint16Array(arrayBuffer), true, loader.currentlyLoaded);
// ...and load the next level
loader.loadLevel();
}
// Otherwise:
else
{
loader.currentlyLoaded = model.levelCount;
// Set all the data at once and finish loading
drawer.setData(new Uint16Array(arrayBuffer), false, -1);
}
},
true,
begin,
end,
8
byteCount
);
}
};
Expand Down

0 comments on commit 9fbaf0e

Please sign in to comment.