laya-coreui-es
Version:
laya核心库、ui库es版本,剔除了媒体、TTF等功能。基于 LayaAir-release_2.12.0 修改
81 lines (80 loc) • 3.56 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SubmitTexture = void 0;
const SubmitBase_1 = require("./SubmitBase");
const Stat_1 = require("../../utils/Stat");
const WebGLContext_1 = require("../WebGLContext");
const BlendMode_1 = require("../canvas/BlendMode");
const BaseShader_1 = require("../shader/BaseShader");
const ShaderDefines2D_1 = require("../shader/d2/ShaderDefines2D");
const CONST3D2D_1 = require("../utils/CONST3D2D");
class SubmitTexture extends SubmitBase_1.SubmitBase {
constructor(renderType = SubmitBase_1.SubmitBase.TYPE_2D) {
super(renderType);
}
releaseRender() {
if ((--this._ref) < 1) {
SubmitTexture.POOL[SubmitTexture._poolSize++] = this;
this.shaderValue.release();
this._mesh = null;
this._parent && (this._parent.releaseRender(), this._parent = null);
}
}
renderSubmit() {
if (this._numEle === 0)
return 1;
var tex = this.shaderValue.textureHost;
if (tex) {
var source = tex ? tex._getSource() : null;
if (!source)
return 1;
}
var gl = WebGLContext_1.WebGLContext.mainContext;
this._mesh.useMesh(gl);
var lastSubmit = SubmitBase_1.SubmitBase.preRender;
var prekey = SubmitBase_1.SubmitBase.preRender._key;
if (this._key.blendShader === 0 && (this._key.submitType === prekey.submitType && this._key.blendShader === prekey.blendShader) && BaseShader_1.BaseShader.activeShader &&
SubmitBase_1.SubmitBase.preRender.clipInfoID == this.clipInfoID &&
lastSubmit.shaderValue.defines._value === this.shaderValue.defines._value &&
(this.shaderValue.defines._value & ShaderDefines2D_1.ShaderDefines2D.NOOPTMASK) == 0
) {
BaseShader_1.BaseShader.activeShader.uploadTexture2D(source);
}
else {
if (BlendMode_1.BlendMode.activeBlendFunction !== this._blendFn) {
WebGLContext_1.WebGLContext.setBlend(gl, true);
this._blendFn(gl);
BlendMode_1.BlendMode.activeBlendFunction = this._blendFn;
}
this.shaderValue.texture = source;
this.shaderValue.upload();
}
gl.drawElements(gl.TRIANGLES, this._numEle, gl.UNSIGNED_SHORT, this._startIdx);
Stat_1.Stat.renderBatches++;
Stat_1.Stat.trianglesFaces += this._numEle / 3;
return 1;
}
static create(context, mesh, sv) {
var o = SubmitTexture._poolSize ? SubmitTexture.POOL[--SubmitTexture._poolSize] : new SubmitTexture(SubmitBase_1.SubmitBase.TYPE_TEXTURE);
o._mesh = mesh;
o._key.clear();
o._key.submitType = SubmitBase_1.SubmitBase.KEY_DRAWTEXTURE;
o._ref = 1;
o._startIdx = mesh.indexNum * CONST3D2D_1.CONST3D2D.BYTES_PIDX;
o._numEle = 0;
var blendType = context._nBlendType;
o._key.blendShader = blendType;
o._blendFn = context._targets ? BlendMode_1.BlendMode.targetFns[blendType] : BlendMode_1.BlendMode.fns[blendType];
o.shaderValue = sv;
if (context._colorFiler) {
var ft = context._colorFiler;
sv.defines.add(ft.type);
sv.colorMat = ft._mat;
sv.colorAlpha = ft._alpha;
}
return o;
}
}
exports.SubmitTexture = SubmitTexture;
SubmitTexture._poolSize = 0;
SubmitTexture.POOL = [];