From c6c03b5548de4e635796f0b8840c68b60d5f057d Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Mon, 19 Aug 2024 14:13:56 +0200 Subject: [PATCH 01/10] Swap PBR module --- .../scenegraph-layer-fragment.glsl.ts | 6 ++--- .../scenegraph-layer-vertex.glsl.ts | 12 +++++----- .../src/scenegraph-layer/scenegraph-layer.ts | 24 ++++++++++--------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts index e9198db308f..3707ca168d6 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts @@ -8,8 +8,8 @@ in vec4 vColor; out vec4 fragColor; -// MODULE_PBR contains all the varying definitions needed -#ifndef MODULE_PBR +// MODULE_PBRMATERIAL contains all the varying definitions needed +#ifndef MODULE_PBRMATERIAL #if defined(HAS_UV) && defined(HAS_BASECOLORMAP) in vec2 vTEXCOORD_0; uniform sampler2D u_BaseColorSampler; @@ -17,7 +17,7 @@ out vec4 fragColor; #endif void main(void) { - #ifdef MODULE_PBR + #ifdef MODULE_PBRMATERIAL fragColor = vColor * pbr_filterColor(vec4(0)); geometry.uv = pbr_vUV; #else diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts index b93bc5a6a6c..6119f6b071f 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts @@ -18,7 +18,7 @@ in vec3 positions; #ifdef HAS_UV in vec2 texCoords; #endif -#ifdef MODULE_PBR +#ifdef MODULE_PBRMATERIAL #ifdef HAS_NORMALS in vec3 normals; #endif @@ -27,8 +27,8 @@ in vec3 positions; // Varying out vec4 vColor; -// MODULE_PBR contains all the varying definitions needed -#ifndef MODULE_PBR +// MODULE_PBRMATERIAL contains all the varying definitions needed +#ifndef MODULE_PBRMATERIAL #ifdef HAS_UV out vec2 vTEXCOORD_0; #endif @@ -36,7 +36,7 @@ out vec4 vColor; // Main void main(void) { - #if defined(HAS_UV) && !defined(MODULE_PBR) + #if defined(HAS_UV) && !defined(MODULE_PBRMATERIAL) vTEXCOORD_0 = texCoords; geometry.uv = texCoords; #endif @@ -47,7 +47,7 @@ void main(void) { mat3 instanceModelMatrix = mat3(instanceModelMatrixCol0, instanceModelMatrixCol1, instanceModelMatrixCol2); vec3 normal = vec3(0.0, 0.0, 1.0); - #ifdef MODULE_PBR + #ifdef MODULE_PBRMATERIAL #ifdef HAS_NORMALS normal = instanceModelMatrix * (scenegraph.sceneModelMatrix * vec4(normals, 0.0)).xyz; #endif @@ -74,7 +74,7 @@ void main(void) { } DECKGL_FILTER_GL_POSITION(gl_Position, geometry); - #ifdef MODULE_PBR + #ifdef MODULE_PBRMATERIAL // set PBR data pbr_vPosition = geometry.position.xyz; #ifdef HAS_NORMALS diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts index b7d0580e309..16e2c19f952 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts @@ -20,7 +20,7 @@ import {Layer, project32, picking, log} from '@deck.gl/core'; import type {Device} from '@luma.gl/core'; -import {pbr} from '@luma.gl/shadertools'; +import {pbrMaterial, PBRProjectionProps} from '@luma.gl/shadertools'; import {ScenegraphNode, GroupNode, ModelNode, Model} from '@luma.gl/engine'; import {GLTFAnimator, PBREnvironment, createScenegraphsFromGLTF} from '@luma.gl/gltf'; import {GLTFLoader, postProcessGLTF} from '@loaders.gl/gltf'; @@ -188,10 +188,10 @@ export default class ScenegraphLayer e }; getShaders() { - const modules = [project32, picking, scenegraphUniforms]; + const modules = [project32, picking, scenegraphUniforms, pbrMaterial]; if (this.props._lighting === 'pbr') { - modules.push(pbr); + modules.push(pbrMaterial); } return super.getShaders({vs, fs, modules}); @@ -368,6 +368,12 @@ export default class ScenegraphLayer e if (node instanceof ModelNode) { const {model} = node; model.setInstanceCount(numInstances); + + const pbrProjectionProps: PBRProjectionProps = { + // Needed for PBR (TODO: find better way to get it) + // eslint-disable-next-line camelcase + u_Camera: model.uniforms.cameraPosition as [number, number, number] + }; const scenegraphProps: ScenegraphProps = { sizeScale, sizeMinPixels, @@ -375,15 +381,11 @@ export default class ScenegraphLayer e composeModelMatrix: shouldComposeModelMatrix(viewport, coordinateSystem), sceneModelMatrix: worldMatrix }; - // TODO replace with shaderInputs.setProps({pbr: u_Camera}) once - // luma pbr module ported to UBO - model.setUniforms({ - // Needed for PBR (TODO: find better way to get it) - // eslint-disable-next-line camelcase - u_Camera: model.uniforms.cameraPosition - }); - model.shaderInputs.setProps({scenegraph: scenegraphProps}); + model.shaderInputs.setProps({ + pbrProjection: pbrProjectionProps, + scenegraph: scenegraphProps + }); model.draw(renderPass); } }); From 11b4a038a4367f233a30b10683a27063ade0e1ac Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Mon, 19 Aug 2024 14:34:40 +0200 Subject: [PATCH 02/10] Dummy PBR module --- .../scenegraph-layer-fragment.glsl.ts | 6 +++--- .../scenegraph-layer/scenegraph-layer-vertex.glsl.ts | 12 ++++++------ .../src/scenegraph-layer/scenegraph-layer.ts | 12 ++++++++++-- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts index 3707ca168d6..c048e544da3 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts @@ -8,8 +8,8 @@ in vec4 vColor; out vec4 fragColor; -// MODULE_PBRMATERIAL contains all the varying definitions needed -#ifndef MODULE_PBRMATERIAL +// pbrMaterial contains all the varying definitions needed +#ifndef LIGHTING_PBR #if defined(HAS_UV) && defined(HAS_BASECOLORMAP) in vec2 vTEXCOORD_0; uniform sampler2D u_BaseColorSampler; @@ -17,7 +17,7 @@ out vec4 fragColor; #endif void main(void) { - #ifdef MODULE_PBRMATERIAL + #ifdef LIGHTING_PBR fragColor = vColor * pbr_filterColor(vec4(0)); geometry.uv = pbr_vUV; #else diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts index 6119f6b071f..730ba2d6244 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-vertex.glsl.ts @@ -18,7 +18,7 @@ in vec3 positions; #ifdef HAS_UV in vec2 texCoords; #endif -#ifdef MODULE_PBRMATERIAL +#ifdef LIGHTING_PBR #ifdef HAS_NORMALS in vec3 normals; #endif @@ -27,8 +27,8 @@ in vec3 positions; // Varying out vec4 vColor; -// MODULE_PBRMATERIAL contains all the varying definitions needed -#ifndef MODULE_PBRMATERIAL +// pbrMaterial contains all the varying definitions needed +#ifndef LIGHTING_PBR #ifdef HAS_UV out vec2 vTEXCOORD_0; #endif @@ -36,7 +36,7 @@ out vec4 vColor; // Main void main(void) { - #if defined(HAS_UV) && !defined(MODULE_PBRMATERIAL) + #if defined(HAS_UV) && !defined(LIGHTING_PBR) vTEXCOORD_0 = texCoords; geometry.uv = texCoords; #endif @@ -47,7 +47,7 @@ void main(void) { mat3 instanceModelMatrix = mat3(instanceModelMatrixCol0, instanceModelMatrixCol1, instanceModelMatrixCol2); vec3 normal = vec3(0.0, 0.0, 1.0); - #ifdef MODULE_PBRMATERIAL + #ifdef LIGHTING_PBR #ifdef HAS_NORMALS normal = instanceModelMatrix * (scenegraph.sceneModelMatrix * vec4(normals, 0.0)).xyz; #endif @@ -74,7 +74,7 @@ void main(void) { } DECKGL_FILTER_GL_POSITION(gl_Position, geometry); - #ifdef MODULE_PBRMATERIAL + #ifdef LIGHTING_PBR // set PBR data pbr_vPosition = geometry.position.xyz; #ifdef HAS_NORMALS diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts index 16e2c19f952..eded56dfe08 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts @@ -188,13 +188,21 @@ export default class ScenegraphLayer e }; getShaders() { - const modules = [project32, picking, scenegraphUniforms, pbrMaterial]; + const modules = [project32, picking, scenegraphUniforms]; + const defines: {LIGHTING_PBR?: 1} = {}; if (this.props._lighting === 'pbr') { + // @ts-ignore modules.push(pbrMaterial); + defines.LIGHTING_PBR = 1; + } else { + // Dummy shader module needed to handle + // pbrMaterial.u_BaseColorSampler binding + const dummyPbrMaterial = {name: 'pbrMaterial'}; + modules.push(dummyPbrMaterial); } - return super.getShaders({vs, fs, modules}); + return super.getShaders({defines, vs, fs, modules}); } initializeState() { From 9b016427dd8c62a3a0c2785f2593bc0f8705bd62 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Mon, 19 Aug 2024 16:02:26 +0200 Subject: [PATCH 03/10] Fix MeshLayer --- .../mesh-layer/mesh-layer-fragment.glsl.ts | 4 +- .../src/mesh-layer/mesh-layer-vertex.glsl.ts | 2 +- .../geo-layers/src/mesh-layer/mesh-layer.ts | 46 ++++++++++++------- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/modules/geo-layers/src/mesh-layer/mesh-layer-fragment.glsl.ts b/modules/geo-layers/src/mesh-layer/mesh-layer-fragment.glsl.ts index 9893b6233c4..af024fcfc63 100644 --- a/modules/geo-layers/src/mesh-layer/mesh-layer-fragment.glsl.ts +++ b/modules/geo-layers/src/mesh-layer/mesh-layer-fragment.glsl.ts @@ -15,7 +15,7 @@ out vec4 fragColor; void main(void) { -#ifdef MODULE_PBR +#ifdef MODULE_PBRMATERIAL fragColor = vColor * pbr_filterColor(vec4(0)); geometry.uv = pbr_vUV; @@ -35,7 +35,7 @@ void main(void) { vec4 color = simpleMesh.hasTexture ? texture(sampler, vTexCoord) : vColor; vec3 lightColor = lighting_getLightColor(color.rgb, cameraPosition, position_commonspace.xyz, normal); - fragColor = vec4(lightColor, color.a * opacity); + fragColor = vec4(lightColor, color.a * layer.opacity); #endif diff --git a/modules/geo-layers/src/mesh-layer/mesh-layer-vertex.glsl.ts b/modules/geo-layers/src/mesh-layer/mesh-layer-vertex.glsl.ts index c96a27b907d..0ce60274c00 100644 --- a/modules/geo-layers/src/mesh-layer/mesh-layer-vertex.glsl.ts +++ b/modules/geo-layers/src/mesh-layer/mesh-layer-vertex.glsl.ts @@ -59,7 +59,7 @@ void main(void) { DECKGL_FILTER_GL_POSITION(gl_Position, geometry); - #ifdef MODULE_PBR + #ifdef MODULE_PBRMATERIAL // set PBR data pbr_vPosition = geometry.position.xyz; #ifdef HAS_NORMALS diff --git a/modules/geo-layers/src/mesh-layer/mesh-layer.ts b/modules/geo-layers/src/mesh-layer/mesh-layer.ts index 9178ca6b70a..3808fb2bc16 100644 --- a/modules/geo-layers/src/mesh-layer/mesh-layer.ts +++ b/modules/geo-layers/src/mesh-layer/mesh-layer.ts @@ -1,6 +1,6 @@ import type {NumericArray} from '@math.gl/core'; import {parsePBRMaterial, ParsedPBRMaterial} from '@luma.gl/gltf'; -import {pbr} from '@luma.gl/shadertools'; +import {pbrMaterial, PBRProjectionProps} from '@luma.gl/shadertools'; import {Model} from '@luma.gl/engine'; import type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema'; import type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core'; @@ -59,7 +59,7 @@ export default class MeshLayer extends getShaders() { const shaders = super.getShaders(); const modules = shaders.modules; - modules.push(pbr, meshUniforms); + modules.push(pbrMaterial, meshUniforms); return {...shaders, vs, fs}; } @@ -100,20 +100,22 @@ export default class MeshLayer extends const meshProps: MeshProps = { pickFeatureIds: Boolean(featureIds) }; - // TODO replace with shaderInputs.setProps({pbr: u_Camera}) once - // luma pbr module ported to UBO - model.setUniforms({ + const pbrProjectionProps: PBRProjectionProps = { // Needed for PBR (TODO: find better way to get it) - u_Camera: model.uniforms.cameraPosition + // eslint-disable-next-line camelcase + u_Camera: model.uniforms.cameraPosition as [number, number, number] + }; + model.shaderInputs.setProps({ + pbrProjection: pbrProjectionProps, + mesh: meshProps }); - model.shaderInputs.setProps({mesh: meshProps}); super.draw(opts); } protected getModel(mesh: Mesh): Model { - const {id, pbrMaterial} = this.props; - const parsedPBRMaterial = this.parseMaterial(pbrMaterial, mesh); + const {id} = this.props; + const parsedPBRMaterial = this.parseMaterial(this.props.pbrMaterial, mesh); // Keep material to explicitly remove textures this.setState({parsedPBRMaterial}); const shaders = this.getShaders(); @@ -135,26 +137,38 @@ export default class MeshLayer extends return model; } - updatePbrMaterialUniforms(pbrMaterial) { + updatePbrMaterialUniforms(material) { const {model} = this.state; if (model) { const {mesh} = this.props; - const parsedPBRMaterial = this.parseMaterial(pbrMaterial, mesh as Mesh); + const parsedPBRMaterial = this.parseMaterial(material, mesh as Mesh); // Keep material to explicitly remove textures this.setState({parsedPBRMaterial}); - model.setBindings(parsedPBRMaterial.bindings); - model.setUniforms(parsedPBRMaterial.uniforms); + + const {u_BaseColorSampler} = parsedPBRMaterial.bindings; + if (u_BaseColorSampler) { + model.shaderInputs.setProps({ + simpleMesh: { + sampler: u_BaseColorSampler, + hasTexture: true + }, + pbrMaterial: { + ...parsedPBRMaterial.bindings, + ...parsedPBRMaterial.uniforms + } + }); + } } } - parseMaterial(pbrMaterial, mesh: Mesh): ParsedPBRMaterial { + parseMaterial(material, mesh: Mesh): ParsedPBRMaterial { const unlit = Boolean( - pbrMaterial.pbrMetallicRoughness && pbrMaterial.pbrMetallicRoughness.baseColorTexture + material.pbrMetallicRoughness && material.pbrMetallicRoughness.baseColorTexture ); return parsePBRMaterial( this.context.device, - {unlit, ...pbrMaterial}, + {unlit, ...material}, {NORMAL: mesh.attributes.normals, TEXCOORD_0: mesh.attributes.texCoords}, { pbrDebug: false, From 3eb2becc0324da8f4f2b5efa1ea37b1d9b6a4c0b Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Mon, 19 Aug 2024 16:42:37 +0200 Subject: [PATCH 04/10] Type --- modules/geo-layers/src/mesh-layer/mesh-layer.ts | 2 +- modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/geo-layers/src/mesh-layer/mesh-layer.ts b/modules/geo-layers/src/mesh-layer/mesh-layer.ts index 3808fb2bc16..f5c93d164af 100644 --- a/modules/geo-layers/src/mesh-layer/mesh-layer.ts +++ b/modules/geo-layers/src/mesh-layer/mesh-layer.ts @@ -100,7 +100,7 @@ export default class MeshLayer extends const meshProps: MeshProps = { pickFeatureIds: Boolean(featureIds) }; - const pbrProjectionProps: PBRProjectionProps = { + const pbrProjectionProps: Partial = { // Needed for PBR (TODO: find better way to get it) // eslint-disable-next-line camelcase u_Camera: model.uniforms.cameraPosition as [number, number, number] diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts index eded56dfe08..1157f6c99d1 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts @@ -377,7 +377,7 @@ export default class ScenegraphLayer e const {model} = node; model.setInstanceCount(numInstances); - const pbrProjectionProps: PBRProjectionProps = { + const pbrProjectionProps: Partial = { // Needed for PBR (TODO: find better way to get it) // eslint-disable-next-line camelcase u_Camera: model.uniforms.cameraPosition as [number, number, number] From e4d510897643cd6d91561f8e87a60ff75a6d0868 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Mon, 19 Aug 2024 16:51:02 +0200 Subject: [PATCH 05/10] Tidy --- .../geo-layers/src/mesh-layer/mesh-layer.ts | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/modules/geo-layers/src/mesh-layer/mesh-layer.ts b/modules/geo-layers/src/mesh-layer/mesh-layer.ts index f5c93d164af..eba10f33fba 100644 --- a/modules/geo-layers/src/mesh-layer/mesh-layer.ts +++ b/modules/geo-layers/src/mesh-layer/mesh-layer.ts @@ -146,18 +146,16 @@ export default class MeshLayer extends this.setState({parsedPBRMaterial}); const {u_BaseColorSampler} = parsedPBRMaterial.bindings; - if (u_BaseColorSampler) { - model.shaderInputs.setProps({ - simpleMesh: { - sampler: u_BaseColorSampler, - hasTexture: true - }, - pbrMaterial: { - ...parsedPBRMaterial.bindings, - ...parsedPBRMaterial.uniforms - } - }); - } + const {emptyTexture} = this.state; + const simpleMeshProps = { + sampler: u_BaseColorSampler || emptyTexture, + hasTexture: Boolean(u_BaseColorSampler) + }; + const pbrMaterialProps = { + ...parsedPBRMaterial.bindings, + ...parsedPBRMaterial.uniforms + }; + model.shaderInputs.setProps({simpleMesh: simpleMeshProps, pbrMaterial: pbrMaterialProps}); } } From 4b76c09ad36ff705b7dbc33c8f78e53c0a8b6da9 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 20 Aug 2024 10:56:21 +0200 Subject: [PATCH 06/10] Update uniform names --- modules/geo-layers/src/mesh-layer/mesh-layer.ts | 14 +++++++------- .../scenegraph-layer-fragment.glsl.ts | 4 ++-- .../src/scenegraph-layer/scenegraph-layer.ts | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/geo-layers/src/mesh-layer/mesh-layer.ts b/modules/geo-layers/src/mesh-layer/mesh-layer.ts index eba10f33fba..b7e5b3e19a7 100644 --- a/modules/geo-layers/src/mesh-layer/mesh-layer.ts +++ b/modules/geo-layers/src/mesh-layer/mesh-layer.ts @@ -1,6 +1,6 @@ import type {NumericArray} from '@math.gl/core'; import {parsePBRMaterial, ParsedPBRMaterial} from '@luma.gl/gltf'; -import {pbrMaterial, PBRProjectionProps} from '@luma.gl/shadertools'; +import {pbrMaterial} from '@luma.gl/shadertools'; import {Model} from '@luma.gl/engine'; import type {MeshAttribute, MeshAttributes} from '@loaders.gl/schema'; import type {UpdateParameters, DefaultProps, LayerContext} from '@deck.gl/core'; @@ -100,10 +100,10 @@ export default class MeshLayer extends const meshProps: MeshProps = { pickFeatureIds: Boolean(featureIds) }; - const pbrProjectionProps: Partial = { + const pbrProjectionProps = { // Needed for PBR (TODO: find better way to get it) // eslint-disable-next-line camelcase - u_Camera: model.uniforms.cameraPosition as [number, number, number] + camera: model.uniforms.cameraPosition as [number, number, number] }; model.shaderInputs.setProps({ pbrProjection: pbrProjectionProps, @@ -145,13 +145,13 @@ export default class MeshLayer extends // Keep material to explicitly remove textures this.setState({parsedPBRMaterial}); - const {u_BaseColorSampler} = parsedPBRMaterial.bindings; + const {pbr_baseColorSampler} = parsedPBRMaterial.bindings; const {emptyTexture} = this.state; const simpleMeshProps = { - sampler: u_BaseColorSampler || emptyTexture, - hasTexture: Boolean(u_BaseColorSampler) + sampler: pbr_baseColorSampler || emptyTexture, + hasTexture: Boolean(pbr_baseColorSampler) }; - const pbrMaterialProps = { + const {camera, ...pbrMaterialProps} = { ...parsedPBRMaterial.bindings, ...parsedPBRMaterial.uniforms }; diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts index c048e544da3..a0b8373a7dd 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer-fragment.glsl.ts @@ -12,7 +12,7 @@ out vec4 fragColor; #ifndef LIGHTING_PBR #if defined(HAS_UV) && defined(HAS_BASECOLORMAP) in vec2 vTEXCOORD_0; - uniform sampler2D u_BaseColorSampler; + uniform sampler2D pbr_baseColorSampler; #endif #endif @@ -22,7 +22,7 @@ void main(void) { geometry.uv = pbr_vUV; #else #if defined(HAS_UV) && defined(HAS_BASECOLORMAP) - fragColor = vColor * texture(u_BaseColorSampler, vTEXCOORD_0); + fragColor = vColor * texture(pbr_baseColorSampler, vTEXCOORD_0); geometry.uv = vTEXCOORD_0; #else fragColor = vColor; diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts index 1157f6c99d1..a5b93c68902 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts @@ -20,7 +20,7 @@ import {Layer, project32, picking, log} from '@deck.gl/core'; import type {Device} from '@luma.gl/core'; -import {pbrMaterial, PBRProjectionProps} from '@luma.gl/shadertools'; +import {pbrMaterial} from '@luma.gl/shadertools'; import {ScenegraphNode, GroupNode, ModelNode, Model} from '@luma.gl/engine'; import {GLTFAnimator, PBREnvironment, createScenegraphsFromGLTF} from '@luma.gl/gltf'; import {GLTFLoader, postProcessGLTF} from '@loaders.gl/gltf'; @@ -197,7 +197,7 @@ export default class ScenegraphLayer e defines.LIGHTING_PBR = 1; } else { // Dummy shader module needed to handle - // pbrMaterial.u_BaseColorSampler binding + // pbrMaterial.pbr_baseColorSampler binding const dummyPbrMaterial = {name: 'pbrMaterial'}; modules.push(dummyPbrMaterial); } @@ -377,10 +377,10 @@ export default class ScenegraphLayer e const {model} = node; model.setInstanceCount(numInstances); - const pbrProjectionProps: Partial = { + const pbrProjectionProps = { // Needed for PBR (TODO: find better way to get it) // eslint-disable-next-line camelcase - u_Camera: model.uniforms.cameraPosition as [number, number, number] + camera: model.uniforms.cameraPosition as [number, number, number] }; const scenegraphProps: ScenegraphProps = { sizeScale, From 35d9c892ff7b2e204fe25d0ea52235071dc16907 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 20 Aug 2024 11:43:27 +0200 Subject: [PATCH 07/10] Fix i3s example --- examples/website/i3s/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/website/i3s/package.json b/examples/website/i3s/package.json index c9d172fee2c..a38a5904cce 100644 --- a/examples/website/i3s/package.json +++ b/examples/website/i3s/package.json @@ -10,6 +10,8 @@ }, "dependencies": { "@loaders.gl/i3s": "^4.2.0", + "maplibre-gl": "^3.0.0", + "react-map-gl": "^7.1.0", "deck.gl": "^9.0.0" }, "devDependencies": { From db00d4b05c650039283a197173f578e6e17ad927 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 20 Aug 2024 11:47:10 +0200 Subject: [PATCH 08/10] Bump luma --- modules/aggregation-layers/package.json | 4 +- modules/arcgis/package.json | 2 +- modules/carto/package.json | 4 +- modules/core/package.json | 10 ++-- modules/extensions/package.json | 4 +- modules/geo-layers/package.json | 4 +- modules/google-maps/package.json | 2 +- modules/jupyter-widget/package.json | 2 +- modules/main/package.json | 4 +- modules/mapbox/package.json | 2 +- modules/mesh-layers/package.json | 4 +- modules/test-utils/package.json | 2 +- package.json | 2 +- yarn.lock | 70 ++++++++++++------------- 14 files changed, 58 insertions(+), 58 deletions(-) diff --git a/modules/aggregation-layers/package.json b/modules/aggregation-layers/package.json index beb0a9b0ff6..833d78141c9 100644 --- a/modules/aggregation-layers/package.json +++ b/modules/aggregation-layers/package.json @@ -38,8 +38,8 @@ "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev" }, "dependencies": { - "@luma.gl/constants": "^9.0.23", - "@luma.gl/shadertools": "^9.0.23", + "@luma.gl/constants": "^9.0.24", + "@luma.gl/shadertools": "^9.0.24", "@math.gl/web-mercator": "^4.0.0", "d3-hexbin": "^0.2.1" }, diff --git a/modules/arcgis/package.json b/modules/arcgis/package.json index 9a9a6d9ff04..0c2b4ddc091 100644 --- a/modules/arcgis/package.json +++ b/modules/arcgis/package.json @@ -36,7 +36,7 @@ "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev" }, "dependencies": { - "@luma.gl/constants": "^9.0.23", + "@luma.gl/constants": "^9.0.24", "esri-loader": "^3.7.0" }, "peerDependencies": { diff --git a/modules/carto/package.json b/modules/carto/package.json index 40df9f3f17e..eec221e93d9 100644 --- a/modules/carto/package.json +++ b/modules/carto/package.json @@ -47,8 +47,8 @@ "@loaders.gl/mvt": "^4.2.0", "@loaders.gl/schema": "^4.2.0", "@loaders.gl/tiles": "^4.2.0", - "@luma.gl/core": "^9.0.23", - "@luma.gl/shadertools": "^9.0.23", + "@luma.gl/core": "^9.0.24", + "@luma.gl/shadertools": "^9.0.24", "@math.gl/web-mercator": "^4.0.0", "@types/d3-array": "^3.0.2", "@types/d3-color": "^1.4.2", diff --git a/modules/core/package.json b/modules/core/package.json index f47adb59ef5..38c2b5d2efb 100644 --- a/modules/core/package.json +++ b/modules/core/package.json @@ -42,11 +42,11 @@ "dependencies": { "@loaders.gl/core": "^4.2.0", "@loaders.gl/images": "^4.2.0", - "@luma.gl/constants": "^9.0.23", - "@luma.gl/core": "^9.0.23", - "@luma.gl/engine": "^9.0.23", - "@luma.gl/shadertools": "^9.0.23", - "@luma.gl/webgl": "^9.0.23", + "@luma.gl/constants": "^9.0.24", + "@luma.gl/core": "^9.0.24", + "@luma.gl/engine": "^9.0.24", + "@luma.gl/shadertools": "^9.0.24", + "@luma.gl/webgl": "^9.0.24", "@math.gl/core": "^4.0.0", "@math.gl/sun": "^4.0.0", "@math.gl/web-mercator": "^4.0.0", diff --git a/modules/extensions/package.json b/modules/extensions/package.json index 7ac678753f6..d09507e5351 100644 --- a/modules/extensions/package.json +++ b/modules/extensions/package.json @@ -38,8 +38,8 @@ "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev" }, "dependencies": { - "@luma.gl/constants": "^9.0.23", - "@luma.gl/shadertools": "^9.0.23", + "@luma.gl/constants": "^9.0.24", + "@luma.gl/shadertools": "^9.0.24", "@math.gl/core": "^4.0.0" }, "peerDependencies": { diff --git a/modules/geo-layers/package.json b/modules/geo-layers/package.json index 7e8301c64e4..76b663ba8df 100644 --- a/modules/geo-layers/package.json +++ b/modules/geo-layers/package.json @@ -46,8 +46,8 @@ "@loaders.gl/terrain": "^4.2.0", "@loaders.gl/tiles": "^4.2.0", "@loaders.gl/wms": "^4.2.0", - "@luma.gl/gltf": "^9.0.23", - "@luma.gl/shadertools": "^9.0.23", + "@luma.gl/gltf": "^9.0.24", + "@luma.gl/shadertools": "^9.0.24", "@math.gl/core": "^4.0.0", "@math.gl/culling": "^4.0.0", "@math.gl/web-mercator": "^4.0.0", diff --git a/modules/google-maps/package.json b/modules/google-maps/package.json index 7b53bbab4ae..ad19fdd1309 100644 --- a/modules/google-maps/package.json +++ b/modules/google-maps/package.json @@ -38,7 +38,7 @@ "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev" }, "dependencies": { - "@luma.gl/constants": "^9.0.23", + "@luma.gl/constants": "^9.0.24", "@math.gl/core": "^4.0.0", "@types/google.maps": "^3.48.6" }, diff --git a/modules/jupyter-widget/package.json b/modules/jupyter-widget/package.json index a04045b8b96..e842ced2886 100644 --- a/modules/jupyter-widget/package.json +++ b/modules/jupyter-widget/package.json @@ -39,7 +39,7 @@ "@loaders.gl/3d-tiles": "^4.2.0", "@loaders.gl/core": "^4.2.0", "@loaders.gl/csv": "^4.2.0", - "@luma.gl/core": "^9.0.23", + "@luma.gl/core": "^9.0.24", "d3-dsv": "^1.0.8", "mapbox-gl": "^1.13.2" }, diff --git a/modules/main/package.json b/modules/main/package.json index 6ef9c3398f3..e5068b98e22 100644 --- a/modules/main/package.json +++ b/modules/main/package.json @@ -53,8 +53,8 @@ "@deck.gl/react": "9.0.0-beta.11", "@deck.gl/widgets": "9.0.0-beta.11", "@loaders.gl/core": "^4.2.0", - "@luma.gl/core": "^9.0.23", - "@luma.gl/engine": "^9.0.23" + "@luma.gl/core": "^9.0.24", + "@luma.gl/engine": "^9.0.24" }, "peerDependencies": { "@arcgis/core": "^4.0.0", diff --git a/modules/mapbox/package.json b/modules/mapbox/package.json index 03cf83466fd..8c75b74610a 100644 --- a/modules/mapbox/package.json +++ b/modules/mapbox/package.json @@ -38,7 +38,7 @@ "prepublishOnly": "npm run build-bundle && npm run build-bundle -- --env=dev" }, "dependencies": { - "@luma.gl/constants": "^9.0.23", + "@luma.gl/constants": "^9.0.24", "@math.gl/web-mercator": "^4.0.0" }, "peerDependencies": { diff --git a/modules/mesh-layers/package.json b/modules/mesh-layers/package.json index 9654908585c..077eb0f245a 100644 --- a/modules/mesh-layers/package.json +++ b/modules/mesh-layers/package.json @@ -39,8 +39,8 @@ }, "dependencies": { "@loaders.gl/gltf": "^4.2.0", - "@luma.gl/gltf": "^9.0.23", - "@luma.gl/shadertools": "^9.0.23" + "@luma.gl/gltf": "^9.0.24", + "@luma.gl/shadertools": "^9.0.24" }, "peerDependencies": { "@deck.gl/core": "^9.0.0", diff --git a/modules/test-utils/package.json b/modules/test-utils/package.json index 7fd24175f32..87f36e84089 100644 --- a/modules/test-utils/package.json +++ b/modules/test-utils/package.json @@ -32,7 +32,7 @@ "src" ], "dependencies": { - "@luma.gl/test-utils": "^9.0.23" + "@luma.gl/test-utils": "^9.0.24" }, "peerDependencies": { "@deck.gl/core": "^9.0.0", diff --git a/package.json b/package.json index 822d6bf17cc..94fa1628805 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "devDependencies": { "@loaders.gl/csv": "^4.2.0", "@loaders.gl/polyfills": "^4.2.0", - "@luma.gl/webgpu": "^9.0.23", + "@luma.gl/webgpu": "^9.0.24", "@math.gl/proj4": "^4.0.0", "@probe.gl/bench": "^4.0.9", "jsdom": "^20.0.0", diff --git a/yarn.lock b/yarn.lock index bb867ab90e8..39dd701b0f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1922,15 +1922,15 @@ jszip "^3.1.5" md5 "^2.3.0" -"@luma.gl/constants@9.0.21", "@luma.gl/constants@^9.0.21": - version "9.0.21" - resolved "https://registry.yarnpkg.com/@luma.gl/constants/-/constants-9.0.21.tgz#79a5de0cb177ece8c38a3f7656f7fae1fade99f1" - integrity sha512-qkPy4JWpvT8FrpULbAAcjB8YrcwhLZ+Zz+8tB5P7QVQ66HhzuQCA/gtnTsLmYiwZdD90Zg+z8xW6ieVccUNtfQ== +"@luma.gl/constants@9.0.24", "@luma.gl/constants@^9.0.24": + version "9.0.24" + resolved "https://registry.yarnpkg.com/@luma.gl/constants/-/constants-9.0.24.tgz#1804f1495d7e5d2226dbac77cd55578c6d1324cb" + integrity sha512-lq8irv1r6g9We/+Hufuw2aFbSo/ulUJ6awhpKKCgYTUr4AuPd/t13+GaNqyHfge9SOhhqaErbkKNoW1C59IPow== -"@luma.gl/core@^9.0.21": - version "9.0.21" - resolved "https://registry.yarnpkg.com/@luma.gl/core/-/core-9.0.21.tgz#ef895f084557c35fb6ec3e501131a0bdc31b523e" - integrity sha512-sKvImgT83gbop7ckApA2w9h2LmuSV3rjgdPpQbNAZUPyuKG8vtIXjzbZ6uE3BITAHpwKzCUfS5FtgvyAp3EJzA== +"@luma.gl/core@^9.0.24": + version "9.0.24" + resolved "https://registry.yarnpkg.com/@luma.gl/core/-/core-9.0.24.tgz#53d3be10a782c2c71c725003a26d01f22e80105a" + integrity sha512-zUJTInY/1dfl61K+oiSy8a9wOv7R6OJUsVfiZYFOHDjMQx6vHY1CYL9r+Wr0jdn2doEsSN2jCCGuBLLX+z4Y6Q== dependencies: "@math.gl/types" "^4.0.0" "@probe.gl/env" "^4.0.2" @@ -1938,54 +1938,54 @@ "@probe.gl/stats" "^4.0.2" "@types/offscreencanvas" "^2019.6.4" -"@luma.gl/engine@^9.0.21": - version "9.0.21" - resolved "https://registry.yarnpkg.com/@luma.gl/engine/-/engine-9.0.21.tgz#02cceb2b0c5deb2e5d86c33c8f1f74aab812eb42" - integrity sha512-ddGmLQ3VBMZW8dTmOPWthQsMan9XOFQjkUUYI4ch+BcPVa+c8ismGuERzJba+tjUOHm+2fmMSth30HymbTQphA== +"@luma.gl/engine@^9.0.24": + version "9.0.24" + resolved "https://registry.yarnpkg.com/@luma.gl/engine/-/engine-9.0.24.tgz#39fdca5a96437db1522cca3fc3e940f35e22304d" + integrity sha512-tnYaabQAUHIg4gNidX4tzHOrwy7yHZcekIo43un1BeD4396JvqdojU4Q3W9Rhy/h1ViLYo7LOJ6aEFgoFgEuew== dependencies: - "@luma.gl/shadertools" "9.0.21" + "@luma.gl/shadertools" "9.0.24" "@math.gl/core" "^4.0.0" "@probe.gl/log" "^4.0.2" "@probe.gl/stats" "^4.0.2" -"@luma.gl/gltf@^9.0.21": - version "9.0.21" - resolved "https://registry.yarnpkg.com/@luma.gl/gltf/-/gltf-9.0.21.tgz#97d419296740917f912e248de1316d05d572f668" - integrity sha512-XOQB+mYG+5t+35HsHIPrjYiGhz2+vjcSxzQD/S2GikOqYs6UCu131mmqCwVg3WsY8k1qHdnO/Wkh8hbS9jiGYA== +"@luma.gl/gltf@^9.0.24": + version "9.0.24" + resolved "https://registry.yarnpkg.com/@luma.gl/gltf/-/gltf-9.0.24.tgz#c9f811727bcb4d0afb106ffe30a9f818feaee329" + integrity sha512-BGVF3Oatsjod2d2Q6Aoc7To9rHfEINyWnel1lYu/DDe0G0zcJHFXVbK0KZ7J+ibd4d6vL1U6NdFTJ+FRhQ5/uQ== dependencies: "@loaders.gl/textures" "^4.2.0" - "@luma.gl/shadertools" "9.0.21" + "@luma.gl/shadertools" "9.0.24" "@math.gl/core" "^4.0.0" -"@luma.gl/shadertools@9.0.21", "@luma.gl/shadertools@^9.0.21": - version "9.0.21" - resolved "https://registry.yarnpkg.com/@luma.gl/shadertools/-/shadertools-9.0.21.tgz#6c28d60d1fe3fff5a863826005e46e09c21ef714" - integrity sha512-pLGMYMoVZJs3QlPu5P/5Ti0op/9/XgokR8xEckkPyM35z1jSmLIM45lrU7lv+mvceKOS2nm+LkTM8zgSJIrZ8w== +"@luma.gl/shadertools@9.0.24", "@luma.gl/shadertools@^9.0.24": + version "9.0.24" + resolved "https://registry.yarnpkg.com/@luma.gl/shadertools/-/shadertools-9.0.24.tgz#20a0743be5f9025a460929abe9e2b8c87fda9836" + integrity sha512-qdzHFlfELx7OCKwyq7OKZ9sVYDN6GJPcrquqLmqEIthiRxHRn9f7y3eZUJeIviSMiQmNrZcFx+c+YlIlDBfFVA== dependencies: "@math.gl/core" "^4.0.0" "@math.gl/types" "^4.0.0" wgsl_reflect "^1.0.1" -"@luma.gl/test-utils@^9.0.21": - version "9.0.21" - resolved "https://registry.yarnpkg.com/@luma.gl/test-utils/-/test-utils-9.0.21.tgz#254e67d0d1b986a64fbf45db7201bc91a4aafbda" - integrity sha512-84ZnFa+qNWzQP5vZGEcBqhi4YUYsZL+27iPeOcVsAIy9WIH9McUadDRL3Qe2p8b5GXsM2kvN3dte1GBg3VOCiQ== +"@luma.gl/test-utils@^9.0.24": + version "9.0.24" + resolved "https://registry.yarnpkg.com/@luma.gl/test-utils/-/test-utils-9.0.24.tgz#c2f95ecb83fcf753e57dd9f742e2100ac5b6073b" + integrity sha512-On3Jt/EuV4ioN5Wv9ADkqtRb14bmHw2GDwXuZEsLPQSfrWTGERR2jJG1wGinZaKmBjaCYq+axVSYr9E0aGUKWg== dependencies: "@probe.gl/env" "^4.0.2" "@probe.gl/stats" "^4.0.2" -"@luma.gl/webgl@^9.0.21": - version "9.0.21" - resolved "https://registry.yarnpkg.com/@luma.gl/webgl/-/webgl-9.0.21.tgz#853fc4efc36e209ab0aa3c9961a54b2f0b7ea32e" - integrity sha512-hbrz6bToPNXNZHJeKuS50uh9Ff+AaMFsv75cae7OmNZHVwg3dEszB0jqm3Kapm1C0iNVnILxZOrj2DZy6fYOXQ== +"@luma.gl/webgl@^9.0.24": + version "9.0.24" + resolved "https://registry.yarnpkg.com/@luma.gl/webgl/-/webgl-9.0.24.tgz#00094d0278bfd0a4d7ec656d02559708fe62c77d" + integrity sha512-fs5HWM24pSuSzSGSPnmB0TeIc15hoXwkXA8wKaa3/zIUEGbqbvOFUQIuTs+xEki6Yo5fuXMZbwBqPizEHj+MVQ== dependencies: - "@luma.gl/constants" "9.0.21" + "@luma.gl/constants" "9.0.24" "@probe.gl/env" "^4.0.2" -"@luma.gl/webgpu@^9.0.21": - version "9.0.21" - resolved "https://registry.yarnpkg.com/@luma.gl/webgpu/-/webgpu-9.0.21.tgz#baf211b9a880b64bd0224eafe48f62152f9526d0" - integrity sha512-mwHF8crDi3KcoGAd6AipW4xbk0NKBv2OZe2NPyeLkEKt10+m8N2GdBnAokDTCdz0LRk4GZn2h8fE5p4MqQ+clQ== +"@luma.gl/webgpu@^9.0.24": + version "9.0.24" + resolved "https://registry.yarnpkg.com/@luma.gl/webgpu/-/webgpu-9.0.24.tgz#6ca4e5e53568fd371e49f32a0479a383dd82f2d7" + integrity sha512-PrxOWVe6pdvNbRN5oTL0wLUEuMX/HEe5vXxr0OUFhgsacL0SFA89vEBPYm3i0dEGK93ifxZ+RfXmA/wqT7GFIA== dependencies: "@probe.gl/env" "^4.0.2" "@webgpu/types" "^0.1.34" From 0ec1e97483b46950da4c1f14f74d1aebd92a4f68 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 20 Aug 2024 12:08:29 +0200 Subject: [PATCH 09/10] Remove ts-ignore --- .../mesh-layers/src/scenegraph-layer/scenegraph-layer.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts index a5b93c68902..ba95e2f590e 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts @@ -188,20 +188,19 @@ export default class ScenegraphLayer e }; getShaders() { - const modules = [project32, picking, scenegraphUniforms]; const defines: {LIGHTING_PBR?: 1} = {}; + let pbr; if (this.props._lighting === 'pbr') { - // @ts-ignore - modules.push(pbrMaterial); + pbr = pbrMaterial; defines.LIGHTING_PBR = 1; } else { // Dummy shader module needed to handle // pbrMaterial.pbr_baseColorSampler binding - const dummyPbrMaterial = {name: 'pbrMaterial'}; - modules.push(dummyPbrMaterial); + pbr = {name: 'pbrMaterial'}; } + const modules = [project32, picking, scenegraphUniforms, pbr]; return super.getShaders({defines, vs, fs, modules}); } From 11ca07105211ea4df69ef2a9e5451b72011648b9 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Wed, 21 Aug 2024 10:29:53 +0200 Subject: [PATCH 10/10] Comments --- modules/geo-layers/src/mesh-layer/mesh-layer.ts | 1 - modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/modules/geo-layers/src/mesh-layer/mesh-layer.ts b/modules/geo-layers/src/mesh-layer/mesh-layer.ts index b7e5b3e19a7..3e20a851ccb 100644 --- a/modules/geo-layers/src/mesh-layer/mesh-layer.ts +++ b/modules/geo-layers/src/mesh-layer/mesh-layer.ts @@ -102,7 +102,6 @@ export default class MeshLayer extends }; const pbrProjectionProps = { // Needed for PBR (TODO: find better way to get it) - // eslint-disable-next-line camelcase camera: model.uniforms.cameraPosition as [number, number, number] }; model.shaderInputs.setProps({ diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts index ba95e2f590e..50cb1e3a2e4 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts @@ -378,7 +378,6 @@ export default class ScenegraphLayer e const pbrProjectionProps = { // Needed for PBR (TODO: find better way to get it) - // eslint-disable-next-line camelcase camera: model.uniforms.cameraPosition as [number, number, number] }; const scenegraphProps: ScenegraphProps = {