Cesium Conical Primitive not getting visible in 1.49, that was visible in 1.42

1. A concise explanation of the problem you're experiencing.

I had created a cone with primitive in version 1.42, using below code, but that has stopped working in 1.49


An error occurred while rendering. Rendering has stopped.
DeveloperError: Appearance/Geometry mismatch. The appearance requires vertex shader attribute input 'color', which was not computed as part of the Geometry. Use the appearance's vertexFormat property when constructing the geometry.
    at new DeveloperError (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:540:19)
    at validateShaderMatching (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:107620:27)
    at createShaderProgram (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:108127:9)
    at Primitive.update (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:108482:13)
    at PrimitiveCollection.update (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:140218:27)
    at updateAndRenderPrimitives (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:239403:27)
    at executeCommandsInViewport (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:239260:13)
    at updateAndExecuteCommands (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:239123:13)
    at render (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:239694:9)
    at tryAndCatchError (https://cesiumjs.org/Cesium/Build/CesiumUnminified/Cesium.js:239714:13)

2. A minimal code example. If you've found a bug, this helps us reproduce and repair it.

var viewer = new Cesium.Viewer('cesiumContainer');

var cone = new Cesium.CylinderGeometry({
    length: 200,
    topRadius: 0.0,
    bottomRadius: 50,
    vertexFormat: Cesium.PerInstanceColorAppearance.VERTEX_FORMAT

//var geometry = Cesium.CylinderGeometry.createGeometry(cone);

var conicalInstance = new Cesium.GeometryInstance({
    modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
    Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),
    attribute : {
      color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.YELLOW.withAlpha(0.6))

var visibility = new Cesium.Primitive({
             geometryInstances : conicalInstance,
             asynchronous : false,
    appearance : new Cesium.PerInstanceColorAppearance({
        //flat : true,
        translucent : true})


3. Context. Why do you need to do this? We might know a better way to accomplish your goal.

4. The Cesium version you're using, your operating system and browser.

The cesium support is contradictive

As per the code,
PerInstanceColorAppearance.VERTEX_FORMAT = VertexFormat.POSITION_AND_NORMAL;

here position = true and normal = true

but support says, for PerInstanceColorAppearance.VERTEX_FORMAT

The VertexFormat that all PerInstanceColorAppearance instances are compatible with. This requires only position and st attributes.

VertexFormat.POSITION_AND_NORMAL = freezeObject(new VertexFormat({
        position : true,
        normal : true

VertexFormat.POSITION_AND_ST = freezeObject(new VertexFormat({
        position : true,
        st : true

I think you might just need to replace attribute with attributes (note the s). Here’s a full example for reference:


Let me know if that fixes it.