@luma.gl/shadertools
Version:
Shader module system for luma.gl
57 lines (47 loc) • 1.71 kB
JavaScript
// 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