Source: \core\graphics\webgl\WebGLGraphicsData.js
import glCore from 'pixi-gl-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
* @param {object} attribsState - The state for the VAO
*/
constructor(gl, shader, attribsState)
{
/**
* 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 = glCore.GLBuffer.createVertexBuffer(gl);
/**
* The index buffer
* @member {WebGLBuffer}
*/
this.indexBuffer = glCore.GLBuffer.createIndexBuffer(gl);
/**
* Whether this graphics is dirty or not
* @member {boolean}
*/
this.dirty = true;
this.glPoints = null;
this.glIndices = null;
/**
*
* @member {PIXI.Shader}
*/
this.shader = shader;
this.vao = new glCore.VertexArrayObject(gl, attribsState)
.addIndex(this.indexBuffer)
.addAttribute(this.buffer, shader.attributes.aVertexPosition, gl.FLOAT, false, 4 * 6, 0)
.addAttribute(this.buffer, shader.attributes.aColor, gl.FLOAT, false, 4 * 6, 2 * 4);
}
/**
* 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.upload(this.glPoints);
this.glIndices = new Uint16Array(this.indices);
this.indexBuffer.upload(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;
}
}