Cesium Bug Bash - October 19–21

We just announced on the blog that we’re having our first Cesium bug bash in October: http://cesiumjs.org/2016/09/19/Cesium-Bug-Bash/
We’re super excited about it, and we want to hear your feedback on bugs you would like to see fixed. Please post your input in this thread.

Thanks!

-Hannah

Hi Cesium,

I posted this issue some time ago: https://groups.google.com/d/topic/cesium-dev/gH3dKl_fRHM/discussion and the problem still exists in the latest version.

We do not have this particular use case in our application anymore, but if it is a bug, it could be a candidate for the Bug Bash.

Thanks, Willem

Everything KML. Thanks!

Hanna,

-Better handling of the Gimbal lock. I checked in the World Wind map and there is no issue.
-redesign of the texture atlas to handle dynamic billboards. Right now each image update to the same billboard is appending as a new image in the texture atlas. After a while doing updates the map runs out of memory. Dynamic billboards are very useful for tactical applications.

Thanks,

Alberto

Thanks Alberto! Can you give me an example for using dynamic billboards?

-Hannah

I’ve posted about this topic in the past. See https://groups.google.com/d/topic/cesium-dev/jFsmh7LOiTs/discussion , https://groups.google.com/d/topic/cesium-dev/cF9Vt28Wk-4/discussion , and https://groups.google.com/d/topic/cesium-dev/tuQyixSKJuA/discussion .
The basic scenario would be a fixed-size billboard that displays info for an object that is moving over time, like current lat/lon/alt/speed. As the object moves around, you redraw the canvas with the current info and update the billboard. Unfortunately, the TextureAtlas currently does not support any overwriting behavior, so every time you do myBillboard.image = theCanvas, it inserts the image into a new section of the texture. That eventually runs out of space, and BOOM.
It would be fantastic if BillboardCollection/Billboard/TextureAtlas had a way to say “I want to reserve a space that is Width x Height pixels for this billboard, and every time I assign to its image, that pre-allocated space is overwritten with the new image contents”.

Hi Hanna,

Sorry for the late reply. Run following sample in SandCastle. First the map will render 400 green billboards. From the drop down select blue to render 400 blue ones. Then select the red billboards. In my computer when I try to render the red billboards it fails with the following Texture atlas error:

Error loading image for billboard: DeveloperError: Width must be less than or equal to the maximum texture size (16384). Check maximumTextureSize.
DeveloperError@http://cesiumjs.org/Cesium/Source/Core/DeveloperError.js:44:19
Texture@http://cesiumjs.org/Cesium/Source/Renderer/Texture.js:87:1
resizeAtlas@http://cesiumjs.org/Cesium/Source/Scene/TextureAtlas.js:200:30
addImage@http://cesiumjs.org/Cesium/Source/Scene/TextureAtlas.js:319:13
TextureAtlas.prototype.addImage/indexPromise<@http://cesiumjs.org/Cesium/Source/Scene/TextureAtlas.js:375:13
fulfilled/p<@http://cesiumjs.org/Cesium/Source/ThirdParty/when.js:196:34
when@http://cesiumjs.org/Cesium/Source/ThirdParty/when.js:59:10
TextureAtlas.prototype.addImage@http://cesiumjs.org/Cesium/Source/Scene/TextureAtlas.js:368:24
Billboard.prototype._loadImage@http://cesiumjs.org/Cesium/Source/Scene/Billboard.js:970:33
Billboard.prototype.setImage@http://cesiumjs.org/Cesium/Source/Scene/Billboard.js:1059:13
.image.set@http://cesiumjs.org/Cesium/Source/Scene/Billboard.js:821:21
BillboardVisualizer.prototype.update@http://cesiumjs.org/Cesium/Source/DataSources/BillboardVisualizer.js:152:17
DataSourceDisplay.prototype.update@http://cesiumjs.org/Cesium/Source/DataSources/DataSourceDisplay.js:269:22
Viewer.prototype._onTick@http://cesiumjs.org/Cesium/Source/Widgets/Viewer/Viewer.js:1478:25
Event.prototype.raiseEvent@http://cesiumjs.org/Cesium/Source/Core/Event.js:147:17
Clock.prototype.tick@http://cesiumjs.org/Cesium/Source/Core/Clock.js:309:9
CesiumWidget.prototype.render@http://cesiumjs.org/Cesium/Source/Widgets/CesiumWidget/CesiumWidget.js:682:31
render@http://cesiumjs.org/Cesium/Source/Widgets/CesiumWidget/CesiumWidget.js:72:25

If it doesn’t generate the error, keep selecting from the drop down until you see the error.

This error is indicating that the texture atlas ran out of space.

Sample:

var viewer = new Cesium.Viewer(‘cesiumContainer’, {
infoBox : false,
selectionIndicator : false
});

function createImage(color) {
viewer.entities.removeAll();

for (var index = 0; index <400;index++)
{
    var position = Cesium.Cartesian3.fromDegrees(-123.0744619 + index, 44.0503706, 0);
    var entity = viewer.entities.add({
        name : color,
        position : position,
        billboard: {
           image: drawImage(color)
        }
    });
}

}

function drawImage(color) {
// create and draw an image using a canvas
var canvas = document.createElement(‘canvas’);
var context = canvas.getContext(‘2d’);

            context.fillStyle = color;
            context.fillRect(10, 20, 100, 50);

            context.strokeStyle = '#fa00ff';
            context.lineWidth = 5;
            context.lineCap = 'round';
            context.arc(50, 50, 20, 0, Math.PI, false);
            context.stroke();
            // ... draw image
            return canvas;
        }

var options = [{
text : ‘Green’,
onselect : function() {
createImage(“green”);
}
}, {
text : ‘Blue’,
onselect : function() {
createImage(“blue”);
}
}, {
text : ‘Red’,
onselect : function() {
createImage(“red”);
}
}, {
text : ‘Yellow’,
onselect : function() {
createImage(“yellow”);
}
}];

Sandcastle.addToolbarMenu(options);

Thanks,

Alberto

Hanna,

-Image material flashes white

  #1640
The solution proposed by Matthew Amato would be great:

“initially we could not show anything until the first image is loaded and then if the image is changed, we can keep the old image until the new one is loaded.”

  • Continue adding more KML rendering capabilities.

Thanks,

Alberto

Thanks Mark, Alberto!

For dynamic billboards, I think it might be a little to big of a project for us to tackle during the bug bash. Since it has been requested multiple times, I created an issue for us to look into it here: https://github.com/AnalyticalGraphicsInc/cesium/issues/4413

We do have the ‘Image material flashes white’ bug tagged for the bug bash, and we should be able to get to a number of KML fixes as well.

Best,

Hannah

We’re off and running with the bug bash this morning! We’re starting off with 3 issues closed and expect many more to come: https://github.com/AnalyticalGraphicsInc/cesium/issues?q=is%3Aopen+is%3Aissue+label%3A"bug+bash"
Keep an eye on this thread and our twitter for updates: https://twitter.com/cesiumjs

-Hannah

The first day of the bug bash was off to a great start! We had 15 new PRs open, 10 of which have already been merged. Highlights include a few small fixes to GeoJson loading and a KML fix for placemarks with duplicate IDs.
So far we have 11 closed bug bash issues, and I expect that number will grow significantly tomorrow.

Thanks for all the great work!

-Hannah

Bug Bash day #2 is off to a good start with 2 pull requests merged already!
We added a usability improvement to the geocoder and merged a PR from kaktus40 that adds a HeadingPitchRoll helper class.

More to come.

-Hannah

Another successful day! We had 18 new pull requests come in today and closed 13 bringing our merge count to 23. Our closed issue count is up to 18, and there are a few pull requests right on the edge of being merged that should fix a number of issues when we get back to it tomorrow. The featured fix of the day is from Tom Fili, adding support for kml timespans for network links.
One more day! Looking forward to some high impact changes coming in tomorrow.

-Hannah

Thanks to everyone who participated! The bug bash was a huge success. In total we had 42 new pull requests and closed 33 issues. The fixed will be included in the Cesium 1.27 release available on November 1st.
See this blog post for highlights: http://cesiumjs.org/2016/10/25/Bug-Bash-Results/

Best,

Hannah