@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
34 lines (31 loc) • 1.32 kB
JavaScript
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';
const dummyUvs = [0, 1, 2, 3, 4, 5, 6, 7];
class ShaderGeneratorLit extends ShaderGenerator {
generateKey(options) {
const key = `lit${dummyUvs.map((dummy, index) => {
return options.usedUvs[index] ? '1' : '0';
}).join('')}${options.shaderChunk}${LitOptionsUtils.generateKey(options.litOptions)}`;
return key;
}
createShaderDefinition(device, options) {
const litShader = new LitShader(device, options.litOptions);
const decl = new ChunkBuilder();
const code = new ChunkBuilder();
const func = new ChunkBuilder();
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`;
const usedUvSets = options.usedUvs || [true];
const mapTransforms = [];
litShader.generateVertexShader(usedUvSets, usedUvSets, mapTransforms);
litShader.generateFragmentShader(decl.code, code.code, func.code, 'vUv0');
return litShader.getDefinition();
}
}
const lit = new ShaderGeneratorLit();
export { lit };