UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

53 lines (50 loc) 1.94 kB
import { ChunkBuilder } from '../chunk-builder.js'; import { LitShader } from './lit-shader.js'; import { LitOptionsUtils } from './lit-options-utils.js'; import { ShaderGenerator } from './shader-generator.js'; /** * @import { GraphicsDevice } from '../../../platform/graphics/graphics-device.js' */ var dummyUvs = [ 0, 1, 2, 3, 4, 5, 6, 7 ]; class ShaderGeneratorLit extends ShaderGenerator { generateKey(options) { var definesHash = ShaderGenerator.definesHash(options.defines); var key = "lit_" + definesHash + "_" + dummyUvs.map((dummy, index)=>{ return options.usedUvs[index] ? '1' : '0'; }).join('') + options.shaderChunk + LitOptionsUtils.generateKey(options.litOptions); return key; } /** * @param {GraphicsDevice} device - The graphics device. * @param {object} options - The options to be passed to the backend. * @returns {object} Returns the created shader definition. */ createShaderDefinition(device, options) { var litShader = new LitShader(device, options.litOptions); var decl = new ChunkBuilder(); var code = new ChunkBuilder(); var func = new ChunkBuilder(); // global texture bias for standard textures decl.append('uniform float textureBias;'); decl.append(litShader.chunks.litShaderArgsPS); code.append(options.shaderChunk); func.code = 'evaluateFrontend();'; func.code = "\n" + func.code.split('\n').map((l)=>" " + l).join('\n') + "\n\n"; var usedUvSets = options.usedUvs || [ true ]; var mapTransforms = []; litShader.generateVertexShader(usedUvSets, usedUvSets, mapTransforms); litShader.generateFragmentShader(decl.code, code.code, func.code, 'vUv0'); return litShader.getDefinition(options); } } var lit = new ShaderGeneratorLit(); export { lit };