UNPKG

@luma.gl/shadertools

Version:

Shader module system for luma.gl

57 lines (47 loc) 1.71 kB
// luma.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors export const lightingUniformsWGSL = /* wgsl */ `\ // #if (defined(SHADER_TYPE_FRAGMENT) && defined(LIGHTING_FRAGMENT)) || (defined(SHADER_TYPE_VERTEX) && defined(LIGHTING_VERTEX)) struct AmbientLight { color: vec3<f32>, }; struct PointLight { color: vec3<f32>, position: vec3<f32>, attenuation: vec3<f32>, // 2nd order x:Constant-y:Linear-z:Exponential }; struct DirectionalLight { color: vec3<f32>, direction: vec3<f32>, }; struct lightingUniforms { enabled: i32, pointLightCount: i32, directionalLightCount: i32, ambientColor: vec3<f32>, // TODO - support multiple lights by uncommenting arrays below lightType: i32, lightColor: vec3<f32>, lightDirection: vec3<f32>, lightPosition: vec3<f32>, lightAttenuation: vec3<f32>, // AmbientLight ambientLight; // PointLight pointLight[MAX_LIGHTS]; // DirectionalLight directionalLight[MAX_LIGHTS]; }; // Binding 0:1 is reserved for lighting (Note: could go into separate bind group as it is stable across draw calls) @binding(1) @group(0) var<uniform> lighting : lightingUniforms; fn lighting_getPointLight(index: i32) -> PointLight { return PointLight(lighting.lightColor, lighting.lightPosition, lighting.lightAttenuation); } fn lighting_getDirectionalLight(index: i32) -> DirectionalLight { return DirectionalLight(lighting.lightColor, lighting.lightDirection); } fn getPointLightAttenuation(pointLight: PointLight, distance: f32) -> f32 { return pointLight.attenuation.x + pointLight.attenuation.y * distance + pointLight.attenuation.z * distance * distance; } `; //# sourceMappingURL=lighting-uniforms-wgsl.js.map