playcanvas
Version:
PlayCanvas WebGL game engine
76 lines (73 loc) • 2.78 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';
import { SHADERTAG_MATERIAL, SHADERLANGUAGE_GLSL } from '../../../platform/graphics/constants.js';
import { ShaderUtils } from '../../../platform/graphics/shader-utils.js';
function _extends() {
_extends = Object.assign || function(target) {
for(var i = 1; i < arguments.length; i++){
var source = arguments[i];
for(var key in source){
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
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;
}
createShaderDefinition(device, options) {
var litShader = new LitShader(device, options.litOptions);
var decl = new ChunkBuilder();
var code = new ChunkBuilder();
decl.append('uniform float textureBias;');
decl.append(litShader.chunks.litShaderArgsPS);
code.append(options.shaderChunk);
var definitionOptions = {
name: 'LitShader',
shaderLanguage: SHADERLANGUAGE_GLSL,
tag: litShader.shaderPassInfo.isForward ? SHADERTAG_MATERIAL : undefined
};
var usedUvSets = options.usedUvs || [
true
];
var mapTransforms = [];
litShader.generateVertexShader(usedUvSets, usedUvSets, mapTransforms);
litShader.generateFragmentShader(decl.code, code.code, 'vUv0');
var includes = new Map(Object.entries(_extends({}, Object.getPrototypeOf(litShader.chunks), litShader.chunks, options.litOptions.chunks)));
var vDefines = litShader.vDefines;
options.defines.forEach((value, key)=>vDefines.set(key, value));
var fDefines = litShader.fDefines;
options.defines.forEach((value, key)=>fDefines.set(key, value));
definitionOptions.attributes = litShader.attributes;
definitionOptions.vertexCode = litShader.vshader;
definitionOptions.vertexIncludes = includes;
definitionOptions.vertexDefines = vDefines;
definitionOptions.fragmentCode = litShader.fshader;
definitionOptions.fragmentIncludes = includes;
definitionOptions.fragmentDefines = fDefines;
return ShaderUtils.createDefinition(device, definitionOptions);
}
}
var lit = new ShaderGeneratorLit();
export { lit };