// luma.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import type {NumberArray3, NumberArray16} from '@math.gl/core'; import {ShaderModule} from '../../../lib/shader-module/shader-module'; const uniformBlock = /* glsl */ `\ layout(std140) uniform pbrProjectionUniforms { mat4 modelViewProjectionMatrix; mat4 modelMatrix; mat4 normalMatrix; vec3 camera; } pbrProjection; `; const wgslUniformBlock = /* wgsl */ `\ struct pbrProjectionUniforms { modelViewProjectionMatrix: mat4x4, modelMatrix: mat4x4, normalMatrix: mat4x4, camera: vec3 }; @group(0) @binding(auto) var pbrProjection: pbrProjectionUniforms; `; export type PBRProjectionProps = { modelViewProjectionMatrix: NumberArray16; modelMatrix: NumberArray16; normalMatrix: NumberArray16; camera: NumberArray3; }; export const pbrProjection: ShaderModule = { name: 'pbrProjection', bindingLayout: [{name: 'pbrProjection', group: 0}], source: wgslUniformBlock, vs: uniformBlock, fs: uniformBlock, // TODO why is this needed? getUniforms: props => props, uniformTypes: { modelViewProjectionMatrix: 'mat4x4', modelMatrix: 'mat4x4', normalMatrix: 'mat4x4', camera: 'vec3' } };