update(frameState) {
if (!this._show) {
return;
}
let context = frameState.context;
let vertexArray = this.createVertexArray(context);
this._shaderProgram = Cesium.ShaderProgram.replaceCache({
context: context,
shaderProgram: this._shaderProgram,
vertexShaderSource: `
attribute vec3 position;
void main() {
gl_Position = czm_modelViewProjection * vec4(position, 1.0);
}
`,
fragmentShaderSource: `
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}`
});
this._renderState = Cesium.RenderState.fromCache({
cull: {
enabled: true,
face: Cesium.CullFace.FRONT
},
depthTest: {
enabled: false
},
depthMask: true,
blending: undefined
});
this._drawCommand.modelMatrix = this._computedModelMatrix;
this._drawCommand.renderState = this._renderState;
this._drawCommand.shaderProgram = this._shaderProgram;
this._drawCommand.vertexArray = vertexArray;
this._drawCommand.pass = Cesium.Pass.OVERLAY;
let commandList = frameState.commandList;
commandList.push(this._drawCommand);
}
private createVertexArray(context: any) {
var vertexBuffer = Cesium.Buffer.createVertexBuffer({
context: context,
typedArray:new Float32Array([3648448.5117112226, 997327.3223067619, 5118713.136337872, 0.0332181295, 0.284035355, 0.431658396]),
usage: Cesium.BufferUsage.STATIC_DRAW
});
var indexBuffer = Cesium.Buffer.createIndexBuffer({
context: context,
typedArray: new Uint16Array([0,1]),
usage: Cesium.BufferUsage.STATIC_DRAW,
indexDatatype: Cesium.IndexDatatype.UNSIGNED_SHORT
});
let attributes = [
{
index: 0,
enabled: true,
vertexBuffer: vertexBuffer,
componentsPerAttribute: 3,
componentDatatype : Cesium.ComponentDatatype.FLOAT,
normalize: false,
offsetInBytes: 0,
strideInBytes: 0
}
];
return new Cesium.VertexArray({context:context, attributes:attributes, indexBuffer:indexBuffer});
}
var viewer = new Cesium.Viewer('cesiumContainer');var scene = viewer.scene;scene.primitives.add(new MyPrimitive());
function MyPrimitive() { this.drawCommand = undefined;}
MyPrimitive.prototype.update = function(frameState) { if (Cesium.defined(this.drawCommand)) { frameState.commandList.push(this.drawCommand); } var context = frameState.context;
var vertexBuffer = Cesium.Buffer.createVertexBuffer({ context: context, typedArray:new Float32Array([3648448.5117112226, 997327.3223067619, 5118713.136337872, 0.0332181295, 0.284035355, 0.431658396]), usage: Cesium.BufferUsage.STATIC_DRAW });
var indexBuffer = Cesium.Buffer.createIndexBuffer({ context: context, typedArray: new Uint16Array([0,1]), usage: Cesium.BufferUsage.STATIC_DRAW, indexDatatype: Cesium.IndexDatatype.UNSIGNED_SHORT });
var attributes = [{
index: 0, enabled: true, vertexBuffer: vertexBuffer, componentsPerAttribute: 3, componentDatatype : Cesium.ComponentDatatype.FLOAT, normalize: false, offsetInBytes: 0, strideInBytes: 0 }];
var vs = "attribute vec3 position; \n" + "void main() { \n" + " gl_Position = czm_modelViewProjection * vec4(position, 1.0); \n" + "} \n"; var fs = "void main() { \n" + " gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); \n" + "} \n"; var shaderProgram = Cesium.ShaderProgram.fromCache({ context: context, vertexShaderSource: vs, fragmentShaderSource: fs });
var vertexArray = new Cesium.VertexArray({
context : context, attributes : attributes, indexBuffer : indexBuffer });
var renderState = Cesium.RenderState.fromCache({
cull: { enabled: true, face: Cesium.CullFace.FRONT }, depthTest: { enabled: false }, depthMask: true, blending: undefined });
var drawCommand = new Cesium.DrawCommand({ vertexArray : vertexArray, shaderProgram : shaderProgram, modelMatrix : Cesium.Matrix4.IDENTITY, cull : false, primitiveType : Cesium.PrimitiveType.LINES, pass : Cesium.Pass.OPAQUE }); this.drawCommand = drawCommand;};
Here is my updated code: (or in the attached file)
my update function :
update(frameState) {
if (!this._show) {
return;
}
let context = frameState.context;
this.vertexArray = (this._dirty || !this.vertexArray) ? this.createVertexArray(context) : this.vertexArray;
this.setupShaderProgram(context);
this.setupRenderState();
this.setupDrawCommand();
frameState.commandList.push(this._drawCommand);
}
private setupShaderProgram(context: any) {
EllipsePrimitive._shaderProgram = EllipsePrimitive._shaderProgram || Cesium.ShaderProgram.replaceCache({
context: context,
shaderProgram: EllipsePrimitive._shaderProgram,
vertexShaderSource: `
attribute vec3 position;
void main() {
gl_Position = czm_modelViewProjection * vec4(position, 1.0);
}
`,
fragmentShaderSource: `
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}`
});
}
private createVertexArray(context: any) {
this._dirty = false;
var vertexBuffer = Cesium.Buffer.createVertexBuffer({
context: context,
typedArray:new Float32Array(this._points.outerPositions),
usage: Cesium.BufferUsage.STATIC_DRAW
});
let attributes = [
{
index: 0,
enabled: true,
vertexBuffer: vertexBuffer,
componentsPerAttribute: 3,
componentDatatype : Cesium.ComponentDatatype.FLOAT,
normalize: false,
offsetInBytes: 0,
strideInBytes: 0
}
];
return new Cesium.VertexArray({context:context, attributes:attributes, indexBuffer:this.createIndexBuffer(context)});
}