UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

60 lines (57 loc) 2.35 kB
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 };