import Attribute from './Attribute'; import Buffer from './Buffer'; import GeometryStyle from './GeometryStyle'; import GeometryData from './GeometryData'; var UID = 0; class Geometry { constructor(data, style) { this.style = style || new GeometryStyle(); this.data = data || new GeometryData(); this.glVertexArrayObjects = []; this.id = UID++; } addAttribute(id, buffer, size = 2, stride = 0, start = 0, normalised = false) { // check if this is a buffer! if (!buffer.data) { // its an array! if(buffer instanceof Array) { buffer = new Float32Array(buffer); } buffer = new Buffer(buffer); } this.style.addAttribute(id, new Attribute(buffer.id, size, stride, start, normalised)); this.data.add(buffer.id, buffer); return this; } getAttribute(id) { return this.data[this.style.attributes[id].buffer]; } addIndex(buffer) { if (!buffer.data) { // its an array! if(buffer instanceof Array) { buffer = new Uint16Array(buffer); } buffer = new Buffer(buffer); } this.data.addIndex(buffer); return this; } getIndex() { return this.data.indexBuffer; } destroy() { //TODO - this is wrong! for (let i = 0; i < this.buffers.length; i++) { this.buffers[i].destroy(); } this.buffers = null; this.attributes = null; for (let i = 0; i < this.glVertexArrayObjects.length; i++) { this.glVertexArrayObjects[i].destroy(); } this.glVertexArrayObjects = null; this.indexBuffer.destroy(); this.indexBuffer = null; } } export default Geometry;