playcanvas
Version:
PlayCanvas WebGL game engine
60 lines (57 loc) • 2.35 kB
JavaScript
import { SEMANTIC_POSITION } from '../../../platform/graphics/constants.js';
import { shaderChunks } from '../chunks/chunks.js';
import { ChunkUtils } from '../chunk-utils.js';
import { ShaderUtils } from '../../../platform/graphics/shader-utils.js';
import { ShaderGenerator } from './shader-generator.js';
import { tonemapNames, SKYTYPE_INFINITE } from '../../constants.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);
}
class ShaderGeneratorSkybox extends ShaderGenerator {
generateKey(options) {
var definesHash = ShaderGenerator.definesHash(options.defines);
var sharedKey = "skybox-" + options.type + "-" + options.encoding + "-" + options.gamma + "-" + options.toneMapping + "-" + options.skymesh + "_" + definesHash;
return sharedKey + (options.type === 'cubemap' ? "-" + options.mip : '');
}
createShaderDefinition(device, options) {
var defines = new Map();
defines.set('TONEMAP', tonemapNames[options.toneMapping]);
defines.set('SKYBOX_DECODE_FNC', ChunkUtils.decodeFunc(options.encoding));
if (options.skymesh !== SKYTYPE_INFINITE) defines.set('SKYMESH', '');
if (options.type === 'cubemap') {
defines.set('SKY_CUBEMAP', '');
}
var includes = new Map(Object.entries(_extends({}, shaderChunks, options.chunks)));
includes.set('decodePS', shaderChunks.decodePS);
includes.set('gamma', ShaderGenerator.gammaCode(options.gamma));
includes.set('envMultiplyPS', shaderChunks.envMultiplyPS);
if (options.type !== 'cubemap') {
includes.set('sphericalPS', shaderChunks.sphericalPS);
includes.set('envAtlasPS', shaderChunks.envAtlasPS);
}
return ShaderUtils.createDefinition(device, {
name: 'SkyboxShader',
attributes: {
aPosition: SEMANTIC_POSITION
},
vertexCode: shaderChunks.skyboxVS,
vertexDefines: defines,
fragmentCode: shaderChunks.skyboxPS,
fragmentDefines: defines,
fragmentIncludes: includes
});
}
}
var skybox = new ShaderGeneratorSkybox();
export { skybox };