ThreeJS getProgramCacheKey解析

501 阅读1分钟
  • 启用函数
initMaterial(){
    //
    const programCacheKey = programCache.getProgramCacheKey(parameters); //获取字符串
    //
}
  • 这些参数都拼接成一个字符串,然后在字典里面查找是否有对应的字符串
// 返回字符串组合的parameters的字符串
function getProgramCacheKey(parameters) {
        const array = [];
        
        //收集shaderid 片元/顶点
        if (parameters.shaderID) {
                array.push(parameters.shaderID);
        } else {
                array.push(parameters.fragmentShader);
                array.push(parameters.vertexShader);
        }

        //收集paramenters
        if (parameters.defines !== undefined) {
                for (const name in parameters.defines) {
                        array.push(name);
                        array.push(parameters.defines[name]);
                }
        }

        //判断是否为raw
        if (parameters.isRawShaderMaterial === undefined) {
                for (let i = 0; i < parameterNames.length; i++) {
                        array.push(parameters[parameterNames[i]]);
                }
                
                //还有outputendcoding
                array.push(renderer.outputEncoding);
                array.push(renderer.gammaFactor);
        }
        
        //customprogram
        array.push(parameters.customProgramCacheKey);

        return array.join();
}