laya-coreui-es
Version:
laya核心库、ui库es版本,剔除了媒体、TTF等功能。基于 LayaAir-release_2.12.0 修改
159 lines (158 loc) • 7.01 kB
JavaScript
import { ILaya } from "../../ILaya";
import { LayaGL } from "../layagl/LayaGL";
var _sFactor = 1;
var _dFactor = 0;
export class WebGLContext {
static __init__() {
var gl = LayaGL.instance;
WebGLContext._depthFunc = gl.LESS;
WebGLContext._blendEquation = gl.FUNC_ADD;
WebGLContext._blendEquationRGB = gl.FUNC_ADD;
WebGLContext._blendEquationAlpha = gl.FUNC_ADD;
_sFactor = gl.ONE;
_dFactor = gl.ZERO;
WebGLContext._sFactorAlpha = gl.ONE;
WebGLContext._dFactorAlpha = gl.ZERO;
WebGLContext._activedTextureID = gl.TEXTURE0;
var maxTexturenum = gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);
WebGLContext._activeTextures = new Array(maxTexturenum);
WebGLContext._glTextureIDs = [gl.TEXTURE0, gl.TEXTURE1, gl.TEXTURE2, gl.TEXTURE3, gl.TEXTURE4, gl.TEXTURE5, gl.TEXTURE6, gl.TEXTURE7, gl.TEXTURE8, gl.TEXTURE9, gl.TEXTURE10, gl.TEXTURE11, gl.TEXTURE12, gl.TEXTURE13, gl.TEXTURE14, gl.TEXTURE15, gl.TEXTURE16, gl.TEXTURE17, gl.TEXTURE18, gl.TEXTURE19, gl.TEXTURE20, gl.TEXTURE21, gl.TEXTURE22, gl.TEXTURE23, gl.TEXTURE24, gl.TEXTURE25, gl.TEXTURE26, gl.TEXTURE27, gl.TEXTURE28, gl.TEXTURE29, gl.TEXTURE30, gl.TEXTURE31];
var maxVertexUniform = gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);
var maxFragUniform = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);
WebGLContext._maxUniformFragmentVectors = Math.min(maxVertexUniform, maxFragUniform);
}
static useProgram(gl, program) {
if (WebGLContext._useProgram === program)
return false;
gl.useProgram(program);
WebGLContext._useProgram = program;
return true;
}
static setDepthTest(gl, value) {
value !== WebGLContext._depthTest && (WebGLContext._depthTest = value, value ? gl.enable(gl.DEPTH_TEST) : gl.disable(gl.DEPTH_TEST));
}
static setDepthMask(gl, value) {
value !== WebGLContext._depthMask && (WebGLContext._depthMask = value, gl.depthMask(value));
}
static setDepthFunc(gl, value) {
value !== WebGLContext._depthFunc && (WebGLContext._depthFunc = value, gl.depthFunc(value));
}
static setBlend(gl, value) {
value !== WebGLContext._blend && (WebGLContext._blend = value, value ? gl.enable(gl.BLEND) : gl.disable(gl.BLEND));
}
static setBlendEquation(gl, blendEquation) {
if (blendEquation !== WebGLContext._blendEquation) {
WebGLContext._blendEquation = blendEquation;
WebGLContext._blendEquationRGB = WebGLContext._blendEquationAlpha = null;
gl.blendEquation(blendEquation);
}
}
static setBlendEquationSeparate(gl, blendEquationRGB, blendEquationAlpha) {
if (blendEquationRGB !== WebGLContext._blendEquationRGB || blendEquationAlpha !== WebGLContext._blendEquationAlpha) {
WebGLContext._blendEquationRGB = blendEquationRGB;
WebGLContext._blendEquationAlpha = blendEquationAlpha;
WebGLContext._blendEquation = null;
gl.blendEquationSeparate(blendEquationRGB, blendEquationAlpha);
}
}
static setBlendFunc(gl, sFactor, dFactor, force = false) {
if (force || sFactor !== _sFactor || dFactor !== _dFactor) {
_sFactor = sFactor;
_dFactor = dFactor;
WebGLContext._sFactorRGB = null;
WebGLContext._dFactorRGB = null;
WebGLContext._sFactorAlpha = null;
WebGLContext._dFactorAlpha = null;
gl.blendFunc(sFactor, dFactor);
}
}
static setBlendFuncSeperate(gl, srcRGB, dstRGB, srcAlpha, dstAlpha) {
if (srcRGB !== WebGLContext._sFactorRGB || dstRGB !== WebGLContext._dFactorRGB || srcAlpha !== WebGLContext._sFactorAlpha || dstAlpha !== WebGLContext._dFactorAlpha) {
WebGLContext._sFactorRGB = srcRGB;
WebGLContext._dFactorRGB = dstRGB;
WebGLContext._sFactorAlpha = srcAlpha;
WebGLContext._dFactorAlpha = dstAlpha;
_sFactor = null;
_dFactor = null;
gl.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
}
}
static setCullFace(gl, value) {
value !== WebGLContext._cullFace && (WebGLContext._cullFace = value, value ? gl.enable(gl.CULL_FACE) : gl.disable(gl.CULL_FACE));
}
static setFrontFace(gl, value) {
value !== WebGLContext._frontFace && (WebGLContext._frontFace = value, gl.frontFace(value));
}
static activeTexture(gl, textureID) {
if (WebGLContext._activedTextureID !== textureID) {
gl.activeTexture(textureID);
WebGLContext._activedTextureID = textureID;
}
}
static bindTexture(gl, target, texture) {
if (WebGLContext._activeTextures[WebGLContext._activedTextureID - gl.TEXTURE0] !== texture) {
gl.bindTexture(target, texture);
WebGLContext._activeTextures[WebGLContext._activedTextureID - gl.TEXTURE0] = texture;
}
}
static __init_native() {
if (!ILaya.Render.supportWebGLPlusRendering)
return;
var webGLContext = WebGLContext;
webGLContext.activeTexture = webGLContext.activeTextureForNative;
webGLContext.bindTexture = webGLContext.bindTextureForNative;
}
static useProgramForNative(gl, program) {
gl.useProgram(program);
return true;
}
static setDepthTestForNative(gl, value) {
if (value)
gl.enable(gl.DEPTH_TEST);
else
gl.disable(gl.DEPTH_TEST);
}
static setDepthMaskForNative(gl, value) {
gl.depthMask(value);
}
static setDepthFuncForNative(gl, value) {
gl.depthFunc(value);
}
static setBlendForNative(gl, value) {
if (value)
gl.enable(gl.BLEND);
else
gl.disable(gl.BLEND);
}
static setBlendFuncForNative(gl, sFactor, dFactor) {
gl.blendFunc(sFactor, dFactor);
}
static setCullFaceForNative(gl, value) {
if (value)
gl.enable(gl.CULL_FACE);
else
gl.disable(gl.CULL_FACE);
}
static setFrontFaceForNative(gl, value) {
gl.frontFace(value);
}
static activeTextureForNative(gl, textureID) {
gl.activeTexture(textureID);
}
static bindTextureForNative(gl, target, texture) {
gl.bindTexture(target, texture);
}
static bindVertexArrayForNative(gl, vertexArray) {
gl.bindVertexArray(vertexArray);
}
static getUniformMaxVector() {
return WebGLContext._maxUniformFragmentVectors;
}
}
WebGLContext._activeTextures = new Array(1);
WebGLContext._useProgram = null;
WebGLContext._depthTest = true;
WebGLContext._depthMask = true;
WebGLContext._blend = false;
WebGLContext._cullFace = false;
WebGLContext.mainContext = null;