Source: core/Shader.js

core/Shader.js

// 修改依赖库应对小程序环境
import { GLShader } from '../dependencies/pixi-gl-core/';
// import { GLShader } from 'pixi-gl-core';
import settings from './settings';
function checkPrecision(src, def)
{
    if (src instanceof Array)
    {
        if (src[0].substring(0, 9) !== 'precision')
        {
            const copy = src.slice(0);

            copy.unshift(`precision ${def} float;`);

            return copy;
        }
    }
    else if (src.trim().substring(0, 9) !== 'precision')
    {
        return `precision ${def} float;\n${src}`;
    }

    return src;
}

/**
 * Wrapper class, webGL Shader for Pixi.
 * Adds precision string if vertexSrc or fragmentSrc have no mention of it.
 *
 * @class
 * @extends GLShader
 * @memberof PIXI
 */
export default class Shader extends GLShader
{
    /**
     *
     * @param {WebGLRenderingContext} gl - The current WebGL rendering context
     * @param {string|string[]} vertexSrc - The vertex shader source as an array of strings.
     * @param {string|string[]} fragmentSrc - The fragment shader source as an array of strings.
     * @param {object} [attributeLocations] - A key value pair showing which location eact attribute should sit.
                       e.g. {position:0, uvs:1}.
     * @param {string} [precision] - The float precision of the shader. Options are 'lowp', 'mediump' or 'highp'.
     */
    constructor(gl, vertexSrc, fragmentSrc, attributeLocations, precision)
    {
        super(gl, checkPrecision(vertexSrc, precision || settings.PRECISION_VERTEX),
            checkPrecision(fragmentSrc, precision || settings.PRECISION_FRAGMENT), undefined, attributeLocations);
    }
}