UNPKG

laya-coreui-es

Version:

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

105 lines (104 loc) 4.23 kB
import { Matrix } from "../../maths/Matrix"; import { SubmitBase } from "../submit/SubmitBase"; import { MeshQuadTexture } from "../utils/MeshQuadTexture"; import { MeshTexture } from "../utils/MeshTexture"; import { MeshVG } from "../utils/MeshVG"; export class WebGLCacheAsNormalCanvas { constructor(ctx, sp) { this.submitStartPos = 0; this.submitEndPos = 0; this.touches = []; this.submits = []; this.sprite = null; this.meshlist = []; this.cachedClipInfo = new Matrix(); this.oldTx = 0; this.oldTy = 0; this.invMat = new Matrix(); this.context = ctx; this.sprite = sp; ctx._globalClipMatrix.copyTo(this.cachedClipInfo); } startRec() { let context = this.context; if (context._charSubmitCache && context._charSubmitCache._enable) { context._charSubmitCache.enable(false, context); context._charSubmitCache.enable(true, context); } context._incache = true; this.touches.length = 0; context.touches = this.touches; context._globalClipMatrix.copyTo(this.cachedClipInfo); this.submits.length = 0; this.submitStartPos = context._submits._length; for (var i = 0, sz = this.meshlist.length; i < sz; i++) { var curm = this.meshlist[i]; curm.canReuse ? (curm.releaseMesh()) : (curm.destroy()); } this.meshlist.length = 0; this._mesh = MeshQuadTexture.getAMesh(false); this._pathMesh = MeshVG.getAMesh(false); this._triangleMesh = MeshTexture.getAMesh(false); this.meshlist.push(this._mesh); this.meshlist.push(this._pathMesh); this.meshlist.push(this._triangleMesh); context._curSubmit = SubmitBase.RENDERBASE; this._oldMesh = context._mesh; this._oldPathMesh = context._pathMesh; this._oldTriMesh = context._triangleMesh; this._oldMeshList = context.meshlist; context._mesh = this._mesh; context._pathMesh = this._pathMesh; context._triangleMesh = this._triangleMesh; context.meshlist = this.meshlist; this.oldTx = context._curMat.tx; this.oldTy = context._curMat.ty; context._curMat.tx = 0; context._curMat.ty = 0; context._curMat.copyTo(this.invMat); this.invMat.invert(); } endRec() { let context = this.context; if (context._charSubmitCache && context._charSubmitCache._enable) { context._charSubmitCache.enable(false, context); context._charSubmitCache.enable(true, context); } var parsubmits = context._submits; this.submitEndPos = parsubmits._length; var num = this.submitEndPos - this.submitStartPos; for (var i = 0; i < num; i++) { this.submits.push(parsubmits[this.submitStartPos + i]); } parsubmits._length -= num; context._mesh = this._oldMesh; context._pathMesh = this._oldPathMesh; context._triangleMesh = this._oldTriMesh; context.meshlist = this._oldMeshList; context._curSubmit = SubmitBase.RENDERBASE; context._curMat.tx = this.oldTx; context._curMat.ty = this.oldTy; context.touches = null; context._incache = false; } isCacheValid() { var curclip = this.context._globalClipMatrix; if (curclip.a != this.cachedClipInfo.a || curclip.b != this.cachedClipInfo.b || curclip.c != this.cachedClipInfo.c || curclip.d != this.cachedClipInfo.d || curclip.tx != this.cachedClipInfo.tx || curclip.ty != this.cachedClipInfo.ty) return false; return true; } flushsubmit() { var curSubmit = SubmitBase.RENDERBASE; this.submits.forEach(function (subm) { if (subm == SubmitBase.RENDERBASE) return; SubmitBase.preRender = curSubmit; curSubmit = subm; subm.renderSubmit(); }); } releaseMem() { } } WebGLCacheAsNormalCanvas.matI = new Matrix();