laya-coreui-es
Version:
laya核心库、ui库es版本,剔除了媒体、TTF等功能。基于 LayaAir-release_2.12.0 修改
79 lines (78 loc) • 3.14 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Submit = void 0;
const Stat_1 = require("../../utils/Stat");
const BlendMode_1 = require("../canvas/BlendMode");
const CONST3D2D_1 = require("../utils/CONST3D2D");
const WebGLContext_1 = require("../WebGLContext");
const SubmitBase_1 = require("./SubmitBase");
class Submit extends SubmitBase_1.SubmitBase {
constructor(renderType = SubmitBase_1.SubmitBase.TYPE_2D) {
super(renderType);
}
renderSubmit() {
if (this._numEle === 0 || !this._mesh || this._numEle == 0)
return 1;
var _tex = this.shaderValue.textureHost;
if (_tex) {
var source = _tex._getSource();
if (!source)
return 1;
this.shaderValue.texture = source;
}
var gl = WebGLContext_1.WebGLContext.mainContext;
this._mesh.useMesh(gl);
this.shaderValue.upload();
if (BlendMode_1.BlendMode.activeBlendFunction !== this._blendFn) {
WebGLContext_1.WebGLContext.setBlend(gl, true);
this._blendFn(gl);
BlendMode_1.BlendMode.activeBlendFunction = this._blendFn;
}
gl.drawElements(gl.TRIANGLES, this._numEle, gl.UNSIGNED_SHORT, this._startIdx);
Stat_1.Stat.renderBatches++;
Stat_1.Stat.trianglesFaces += this._numEle / 3;
return 1;
}
releaseRender() {
if (SubmitBase_1.SubmitBase.RENDERBASE == this)
return;
if ((--this._ref) < 1) {
Submit.POOL[Submit._poolSize++] = this;
this.shaderValue.release();
this.shaderValue = null;
this._mesh = null;
this._parent && (this._parent.releaseRender(), this._parent = null);
}
}
static create(context, mesh, sv) {
var o = Submit._poolSize ? Submit.POOL[--Submit._poolSize] : new Submit();
o._ref = 1;
o._mesh = mesh;
o._key.clear();
o._startIdx = mesh.indexNum * CONST3D2D_1.CONST3D2D.BYTES_PIDX;
o._numEle = 0;
var blendType = context._nBlendType;
o._blendFn = context._targets ? BlendMode_1.BlendMode.targetFns[blendType] : BlendMode_1.BlendMode.fns[blendType];
o.shaderValue = sv;
o.shaderValue.setValue(context._shader2D);
var filters = context._shader2D.filters;
filters && o.shaderValue.setFilters(filters);
return o;
}
static createShape(ctx, mesh, numEle, sv) {
var o = Submit._poolSize ? Submit.POOL[--Submit._poolSize] : (new Submit());
o._mesh = mesh;
o._numEle = numEle;
o._startIdx = mesh.indexNum * 2;
o._ref = 1;
o.shaderValue = sv;
o.shaderValue.setValue(ctx._shader2D);
var blendType = ctx._nBlendType;
o._key.blendShader = blendType;
o._blendFn = ctx._targets ? BlendMode_1.BlendMode.targetFns[blendType] : BlendMode_1.BlendMode.fns[blendType];
return o;
}
}
exports.Submit = Submit;
Submit._poolSize = 0;
Submit.POOL = [];