import { Geometry, Buffer } from '@pixi/core'; /** * An object containing WebGL specific properties to be used by the WebGL renderer * * @class * @private * @memberof PIXI */ export default class WebGLGraphicsData { /** * @param {WebGLRenderingContext} gl - The current WebGL drawing context * @param {PIXI.Shader} shader - The shader */ constructor(gl, shader) { /** * The current WebGL drawing context * * @member {WebGLRenderingContext} */ this.gl = gl; // TODO does this need to be split before uploading?? /** * An array of color components (r,g,b) * @member {number[]} */ this.color = [0, 0, 0]; // color split! /** * An array of points to draw * @member {PIXI.Point[]} */ this.points = []; /** * The indices of the vertices * @member {number[]} */ this.indices = []; /** * The main buffer * @member {WebGLBuffer} */ this.buffer = new Buffer(); /** * The index buffer * @member {WebGLBuffer} */ this.indexBuffer = new Buffer(); /** * Whether this graphics is dirty or not * @member {boolean} */ this.dirty = true; /** * Whether this graphics is nativeLines or not * @member {boolean} */ this.nativeLines = false; this.glPoints = null; this.glIndices = null; /** * * @member {PIXI.Shader} */ this.shader = shader; this.geometry = new Geometry() .addAttribute('aVertexPosition|aColor', this.buffer) .addIndex(this.indexBuffer); } /** * Resets the vertices and the indices */ reset() { this.points.length = 0; this.indices.length = 0; } /** * Binds the buffers and uploads the data */ upload() { this.glPoints = new Float32Array(this.points); this.buffer.update(this.glPoints); this.glIndices = new Uint16Array(this.indices); this.indexBuffer.update(this.glIndices); // console.log("UPKOADING,.",this.glPoints,this.glIndices) this.dirty = false; } /** * Empties all the data */ destroy() { this.color = null; this.points = null; this.indices = null; this.vao.destroy(); this.buffer.destroy(); this.indexBuffer.destroy(); this.gl = null; this.buffer = null; this.indexBuffer = null; this.glPoints = null; this.glIndices = null; } }