UNPKG

laya-coreui-es

Version:

laya核心库、ui库es版本,剔除了媒体、TTF等功能。基于 LayaAir-release_2.12.0 修改

122 lines (121 loc) 3.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Mesh2D = void 0; const LayaGL_1 = require("../../layagl/LayaGL"); const BufferState2D_1 = require("../BufferState2D"); const Config_1 = require("./../../../Config"); const IndexBuffer2D_1 = require("./IndexBuffer2D"); const VertexBuffer2D_1 = require("./VertexBuffer2D"); class Mesh2D { constructor(stride, vballoc, iballoc) { this._stride = 0; this.vertNum = 0; this.indexNum = 0; this._applied = false; this._quadNum = 0; this.canReuse = false; this._stride = stride; this._vb = new VertexBuffer2D_1.VertexBuffer2D(stride, LayaGL_1.LayaGL.instance.DYNAMIC_DRAW); if (vballoc) { this._vb._resizeBuffer(vballoc, false); } else { Config_1.Config.webGL2D_MeshAllocMaxMem && this._vb._resizeBuffer(64 * 1024 * stride, false); } this._ib = new IndexBuffer2D_1.IndexBuffer2D(); if (iballoc) { this._ib._resizeBuffer(iballoc, false); } } cloneWithNewVB() { var mesh = new Mesh2D(this._stride, 0, 0); mesh._ib = this._ib; mesh._quadNum = this._quadNum; mesh._attribInfo = this._attribInfo; return mesh; } cloneWithNewVBIB() { var mesh = new Mesh2D(this._stride, 0, 0); mesh._attribInfo = this._attribInfo; return mesh; } getVBW() { this._vb.setNeedUpload(); return this._vb; } getVBR() { return this._vb; } getIBR() { return this._ib; } getIBW() { this._ib.setNeedUpload(); return this._ib; } createQuadIB(QuadNum) { this._quadNum = QuadNum; this._ib._resizeBuffer(QuadNum * 6 * 2, false); this._ib.byteLength = this._ib.bufferLength; var bd = this._ib.getUint16Array(); var idx = 0; var curvert = 0; for (var i = 0; i < QuadNum; i++) { bd[idx++] = curvert; bd[idx++] = curvert + 2; bd[idx++] = curvert + 1; bd[idx++] = curvert; bd[idx++] = curvert + 3; bd[idx++] = curvert + 2; curvert += 4; } this._ib.setNeedUpload(); } setAttributes(attribs) { this._attribInfo = attribs; if (this._attribInfo.length % 3 != 0) { throw 'Mesh2D setAttributes error!'; } } configVAO(gl) { if (this._applied) return; this._applied = true; if (!this._vao) { this._vao = new BufferState2D_1.BufferState2D(); } this._vao.bind(); this._vb._bindForVAO(); this._ib.setNeedUpload(); this._ib._bind_uploadForVAO(); var attribNum = this._attribInfo.length / 3; var idx = 0; for (var i = 0; i < attribNum; i++) { var _size = this._attribInfo[idx + 1]; var _type = this._attribInfo[idx]; var _off = this._attribInfo[idx + 2]; gl.enableVertexAttribArray(i); gl.vertexAttribPointer(i, _size, _type, false, this._stride, _off); idx += 3; } this._vao.unBind(); } useMesh(gl) { this._applied || this.configVAO(gl); this._vao.bind(); this._vb.bind(); this._ib._bind_upload() || this._ib.bind(); this._vb._bind_upload() || this._vb.bind(); } getEleNum() { return this._ib.getBuffer().byteLength / 2; } releaseMesh() { } destroy() { } clearVB() { this._vb.clear(); } } exports.Mesh2D = Mesh2D; Mesh2D._gvaoid = 0;