UNPKG

laya-coreui-es

Version:

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

159 lines (158 loc) 7.01 kB
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;