From 167d6c30b2bafa5341e4db6890e6b82a4038aebe Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Wed, 10 Apr 2024 17:13:02 +0200 Subject: [PATCH 01/40] WIP --- .../src/shaderlib/project/project.glsl.ts | 27 ++++++++++++------- modules/core/src/shaderlib/project/project.ts | 10 ++++++- .../shaderlib/project/viewport-uniforms.ts | 2 +- .../core/src/shaderlib/project32/project32.ts | 4 ++- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 43a4bb047e6..43bd4ea9bc4 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -36,11 +36,19 @@ ${COORDINATE_SYSTEM_GLSL_CONSTANTS} ${PROJECTION_MODE_GLSL_CONSTANTS} ${UNIT_GLSL_CONSTANTS} +uniform project32Uniforms { + bool autoWrapLongitude; + vec3 commonUnitsPerMeter; +} project; + +const vec3 commonUnitsPerMeter = vec3(0.0, 0.0, 0.0001); + uniform int project_uCoordinateSystem; uniform int project_uProjectionMode; uniform float project_uScale; -uniform bool project_uWrapLongitude; -uniform vec3 project_uCommonUnitsPerMeter; +// uniform bool project_uWrapLongitude; +// uniform vec3 project_uCommonUnitsPerMeter; + uniform vec3 project_uCommonUnitsPerWorldUnit; uniform vec3 project_uCommonUnitsPerWorldUnit2; uniform vec4 project_uCenter; @@ -95,7 +103,7 @@ float project_size() { } float project_size_at_latitude(float meters, float lat) { - return meters * project_uCommonUnitsPerMeter.z * project_size_at_latitude(lat); + return meters * project.commonUnitsPerMeter.z * project_size_at_latitude(lat); } // @@ -103,19 +111,20 @@ float project_size_at_latitude(float meters, float lat) { // Note the scalar version of project_size is for scaling the z component only // float project_size(float meters) { - return meters * project_uCommonUnitsPerMeter.z * project_size(); + // For scatter relevant + return meters * project.commonUnitsPerMeter.z * project_size(); } vec2 project_size(vec2 meters) { - return meters * project_uCommonUnitsPerMeter.xy * project_size(); + return meters * project.commonUnitsPerMeter.xy * project_size(); } vec3 project_size(vec3 meters) { - return meters * project_uCommonUnitsPerMeter * project_size(); + return meters * project.commonUnitsPerMeter * project_size(); } vec4 project_size(vec4 meters) { - return vec4(meters.xyz * project_uCommonUnitsPerMeter, meters.w); + return vec4(meters.xyz * project.commonUnitsPerMeter, meters.w); } // Get rotation matrix that aligns the z axis with the given up vector @@ -143,7 +152,7 @@ bool project_needs_rotation(vec3 commonPosition, out mat3 transform) { vec3 project_normal(vec3 vector) { // Apply model matrix vec4 normal_modelspace = project_uModelMatrix * vec4(vector, 0.0); - vec3 n = normalize(normal_modelspace.xyz * project_uCommonUnitsPerMeter); + vec3 n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter); mat3 rotation; if (project_needs_rotation(geometry.position.xyz, rotation)) { n = rotation * n; @@ -162,7 +171,7 @@ vec4 project_offset_(vec4 offset) { // vec2 project_mercator_(vec2 lnglat) { float x = lnglat.x; - if (project_uWrapLongitude) { + if (project.autoWrapLongitude) { x = mod(x + 180., 360.0) - 180.; } float y = clamp(lnglat.y, -89.9, 89.9); diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index c665d840990..bac14a617eb 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -38,5 +38,13 @@ export default { name: 'project', dependencies: [fp32, geometry], vs: projectShader, - getUniforms + getUniforms, + uniformTypes: { + autoWrapLongitude: 'f32', + commonUnitsPerMeter: 'vec3' + }, + defaultUniforms: { + autoWrapLongitude: false, + commonUnitsPerMeter: new Float32Array([0.0, 0.0, 0.00004]) + } } as ShaderModule; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index bf4c3f212ff..9e1056e7e28 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -315,7 +315,7 @@ function calculateViewportUniforms({ project_uDevicePixelRatio: devicePixelRatio, project_uFocalDistance: focalDistance, - project_uCommonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, + // project_uCommonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom) diff --git a/modules/core/src/shaderlib/project32/project32.ts b/modules/core/src/shaderlib/project32/project32.ts index 57d97a8114f..4280df012c3 100644 --- a/modules/core/src/shaderlib/project32/project32.ts +++ b/modules/core/src/shaderlib/project32/project32.ts @@ -47,5 +47,7 @@ vec4 project_position_to_clipspace( export default { name: 'project32', dependencies: [project], - vs + vs, + uniformTypes: project.uniformTypes, + defaultUniforms: project.defaultUniforms } as ShaderModule; From 3b337dab4c6f63af00f54bc77f3fa908663e0dcc Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 11:58:03 +0200 Subject: [PATCH 02/40] Hook up getUniforms --- modules/core/src/lib/layer.ts | 6 +++++- modules/core/src/shaderlib/project/project.glsl.ts | 2 -- modules/core/src/shaderlib/project/project.ts | 2 +- modules/core/src/shaderlib/project/viewport-uniforms.ts | 3 +++ modules/core/src/shaderlib/project32/project32.ts | 1 + 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/core/src/lib/layer.ts b/modules/core/src/lib/layer.ts index d9e1d64d5e4..e221f60a122 100644 --- a/modules/core/src/lib/layer.ts +++ b/modules/core/src/lib/layer.ts @@ -1065,8 +1065,12 @@ export default abstract class Layer extends Component< // TODO/ib - hack move to luma Model.draw if (moduleParameters) { const {isActive, isAttribute} = moduleParameters.picking; + const {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin} = moduleParameters; this.setModuleParameters(moduleParameters); - this.setShaderModuleProps({picking: {isActive, isAttribute}}); + this.setShaderModuleProps({ + picking: {isActive, isAttribute}, + project32: {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin} + }); } // Apply polygon offset to avoid z-fighting diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 43bd4ea9bc4..bfa0562f5eb 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -41,8 +41,6 @@ uniform project32Uniforms { vec3 commonUnitsPerMeter; } project; -const vec3 commonUnitsPerMeter = vec3(0.0, 0.0, 0.0001); - uniform int project_uCoordinateSystem; uniform int project_uProjectionMode; uniform float project_uScale; diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index bac14a617eb..9f89f1db742 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -45,6 +45,6 @@ export default { }, defaultUniforms: { autoWrapLongitude: false, - commonUnitsPerMeter: new Float32Array([0.0, 0.0, 0.00004]) + commonUnitsPerMeter: new Float32Array([0.0, 0.0, 0.0]) } } as ShaderModule; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 9e1056e7e28..de89b25481a 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -203,6 +203,7 @@ export type ProjectUniforms = { project_uFocalDistance: number; project_uCommonUnitsPerMeter: Vec3; + commonUnitsPerMeter: Vec3; project_uCommonUnitsPerWorldUnit: Vec3; project_uCommonUnitsPerWorldUnit2: Vec3; /** 2^zoom */ @@ -316,6 +317,7 @@ function calculateViewportUniforms({ project_uFocalDistance: focalDistance, // project_uCommonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, + commonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom) @@ -349,6 +351,7 @@ function calculateViewportUniforms({ case COORDINATE_SYSTEM.LNGLAT_OFFSETS: // @ts-expect-error _pseudoMeters only exists on WebMercatorView if (!viewport._pseudoMeters) { + uniforms.commonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter; uniforms.project_uCommonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter; } uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree; diff --git a/modules/core/src/shaderlib/project32/project32.ts b/modules/core/src/shaderlib/project32/project32.ts index 4280df012c3..119bb768e89 100644 --- a/modules/core/src/shaderlib/project32/project32.ts +++ b/modules/core/src/shaderlib/project32/project32.ts @@ -48,6 +48,7 @@ export default { name: 'project32', dependencies: [project], vs, + getUniforms: project.getUniforms, uniformTypes: project.uniformTypes, defaultUniforms: project.defaultUniforms } as ShaderModule; From 18e26035f786517b5cf69f53dd74fa96e38ba627 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:01:08 +0200 Subject: [PATCH 03/40] Tidy --- modules/core/src/shaderlib/project/project.glsl.ts | 2 -- modules/core/src/shaderlib/project/viewport-uniforms.ts | 9 +++------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index bfa0562f5eb..ffbd6f28fd3 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -44,8 +44,6 @@ uniform project32Uniforms { uniform int project_uCoordinateSystem; uniform int project_uProjectionMode; uniform float project_uScale; -// uniform bool project_uWrapLongitude; -// uniform vec3 project_uCommonUnitsPerMeter; uniform vec3 project_uCommonUnitsPerWorldUnit; uniform vec3 project_uCommonUnitsPerWorldUnit2; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index de89b25481a..4a18a05a256 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -202,13 +202,12 @@ export type ProjectUniforms = { project_uDevicePixelRatio: number; project_uFocalDistance: number; - project_uCommonUnitsPerMeter: Vec3; commonUnitsPerMeter: Vec3; project_uCommonUnitsPerWorldUnit: Vec3; project_uCommonUnitsPerWorldUnit2: Vec3; /** 2^zoom */ project_uScale: number; - project_uWrapLongitude: boolean; + autoWrapLongitude: boolean; project_uViewProjectionMatrix: NumericArray; project_uModelMatrix: NumericArray; @@ -257,7 +256,7 @@ export function getUniformsFromViewport({ coordinateOrigin }); - uniforms.project_uWrapLongitude = autoWrapLongitude; + uniforms.autoWrapLongitude = autoWrapLongitude; uniforms.project_uModelMatrix = modelMatrix || IDENTITY_MATRIX; return uniforms; @@ -316,12 +315,11 @@ function calculateViewportUniforms({ project_uDevicePixelRatio: devicePixelRatio, project_uFocalDistance: focalDistance, - // project_uCommonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, commonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom) - project_uWrapLongitude: false, + autoWrapLongitude: false, project_uViewProjectionMatrix: viewProjectionMatrix, project_uModelMatrix: IDENTITY_MATRIX, @@ -352,7 +350,6 @@ function calculateViewportUniforms({ // @ts-expect-error _pseudoMeters only exists on WebMercatorView if (!viewport._pseudoMeters) { uniforms.commonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter; - uniforms.project_uCommonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter; } uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree; uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerDegree2; From ca48f7fc476880eafe1c7249aac0734c3d85b656 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:07:15 +0200 Subject: [PATCH 04/40] uCoordinateSystem --- .../core/src/shaderlib/project/project.glsl.ts | 18 +++++++++--------- modules/core/src/shaderlib/project/project.ts | 5 +---- .../src/shaderlib/project/viewport-uniforms.ts | 4 ++-- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index ffbd6f28fd3..fa599617354 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -38,10 +38,10 @@ ${UNIT_GLSL_CONSTANTS} uniform project32Uniforms { bool autoWrapLongitude; + int coordinateSystem; vec3 commonUnitsPerMeter; } project; -uniform int project_uCoordinateSystem; uniform int project_uProjectionMode; uniform float project_uScale; @@ -73,7 +73,7 @@ float project_size_at_latitude(float lat) { float project_size() { if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR && - project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT && + project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT && project_uPseudoMeters == false) { // uCommonUnitsPerMeter in low-zoom Web Mercator is non-linear @@ -191,26 +191,26 @@ vec3 project_globe_(vec3 lnglatz) { } // -// Projects positions (defined by project_uCoordinateSystem) to common space (defined by project_uProjectionMode) +// Projects positions (defined by project.coordinateSystem) to common space (defined by project_uProjectionMode) // vec4 project_position(vec4 position, vec3 position64Low) { vec4 position_world = project_uModelMatrix * position; // Work around for a Mac+NVIDIA bug https://github.com/visgl/deck.gl/issues/4145 if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR) { - if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) { + if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) { return vec4( project_mercator_(position_world.xy), project_size_at_latitude(position_world.z, position_world.y), position_world.w ); } - if (project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN) { + if (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) { position_world.xyz += project_uCoordinateOrigin; } } if (project_uProjectionMode == PROJECTION_MODE_GLOBE) { - if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) { + if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) { return vec4( project_globe_(position_world.xyz), position_world.w @@ -218,7 +218,7 @@ vec4 project_position(vec4 position, vec3 position64Low) { } } if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) { - if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) { + if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) { if (abs(position_world.y - project_uCoordinateOrigin.y) > 0.25) { // Too far from the projection center for offset mode to be accurate // Only use high parts @@ -232,8 +232,8 @@ vec4 project_position(vec4 position, vec3 position64Low) { } if (project_uProjectionMode == PROJECTION_MODE_IDENTITY || (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET && - (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT || - project_uCoordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) { + (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT || + project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) { // Subtract high part of 64 bit value. Convert remainder to float32, preserving precision. position_world.xyz -= project_uCoordinateOrigin; } diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 9f89f1db742..6bb9bc0f2a6 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -41,10 +41,7 @@ export default { getUniforms, uniformTypes: { autoWrapLongitude: 'f32', + coordinateSystem: 'i32', commonUnitsPerMeter: 'vec3' - }, - defaultUniforms: { - autoWrapLongitude: false, - commonUnitsPerMeter: new Float32Array([0.0, 0.0, 0.0]) } } as ShaderModule; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 4a18a05a256..5b0dfbd206b 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -188,7 +188,7 @@ function calculateMatrixAndOffset( } export type ProjectUniforms = { - project_uCoordinateSystem: number; + coordinateSystem: number; project_uProjectionMode: number; project_uCoordinateOrigin: Vec3; project_uCommonOrigin: Vec3; @@ -299,7 +299,7 @@ function calculateViewportUniforms({ const uniforms: ProjectUniforms = { // Projection mode values - project_uCoordinateSystem: coordinateSystem, + coordinateSystem, project_uProjectionMode: viewport.projectionMode, project_uCoordinateOrigin: shaderCoordinateOrigin, project_uCommonOrigin: originCommon.slice(0, 3) as Vec3, From 44f55be52943515a4dcc4b9e488f1569d3731345 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:11:00 +0200 Subject: [PATCH 05/40] projectionMode --- .../src/shaderlib/project/project.glsl.ts | 32 +++++++++++++------ modules/core/src/shaderlib/project/project.ts | 17 +++++++++- .../shaderlib/project/viewport-uniforms.ts | 4 +-- 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index fa599617354..da5456561df 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -40,9 +40,23 @@ uniform project32Uniforms { bool autoWrapLongitude; int coordinateSystem; vec3 commonUnitsPerMeter; + int projectionMode; + // float project_uScale; + + // vec3 project_uCommonUnitsPerWorldUnit; + // vec3 project_uCommonUnitsPerWorldUnit2; + // vec4 project_uCenter; + // mat4 project_uModelMatrix; + // mat4 project_uViewProjectionMatrix; + // vec2 project_uViewportSize; + // float project_uDevicePixelRatio; + // float project_uFocalDistance; + // vec3 project_uCameraPosition; + // vec3 project_uCoordinateOrigin; + // vec3 project_uCommonOrigin; + // bool project_uPseudoMeters; } project; -uniform int project_uProjectionMode; uniform float project_uScale; uniform vec3 project_uCommonUnitsPerWorldUnit; @@ -72,7 +86,7 @@ float project_size_at_latitude(float lat) { } float project_size() { - if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR && + if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR && project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT && project_uPseudoMeters == false) { @@ -134,7 +148,7 @@ mat3 project_get_orientation_matrix(vec3 up) { } bool project_needs_rotation(vec3 commonPosition, out mat3 transform) { - if (project_uProjectionMode == PROJECTION_MODE_GLOBE) { + if (project.projectionMode == PROJECTION_MODE_GLOBE) { transform = project_get_orientation_matrix(commonPosition); return true; } @@ -191,13 +205,13 @@ vec3 project_globe_(vec3 lnglatz) { } // -// Projects positions (defined by project.coordinateSystem) to common space (defined by project_uProjectionMode) +// Projects positions (defined by project.coordinateSystem) to common space (defined by project.projectionMode) // vec4 project_position(vec4 position, vec3 position64Low) { vec4 position_world = project_uModelMatrix * position; // Work around for a Mac+NVIDIA bug https://github.com/visgl/deck.gl/issues/4145 - if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR) { + if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) { if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) { return vec4( project_mercator_(position_world.xy), @@ -209,7 +223,7 @@ vec4 project_position(vec4 position, vec3 position64Low) { position_world.xyz += project_uCoordinateOrigin; } } - if (project_uProjectionMode == PROJECTION_MODE_GLOBE) { + if (project.projectionMode == PROJECTION_MODE_GLOBE) { if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) { return vec4( project_globe_(position_world.xyz), @@ -217,7 +231,7 @@ vec4 project_position(vec4 position, vec3 position64Low) { ); } } - if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) { + if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) { if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) { if (abs(position_world.y - project_uCoordinateOrigin.y) > 0.25) { // Too far from the projection center for offset mode to be accurate @@ -230,8 +244,8 @@ vec4 project_position(vec4 position, vec3 position64Low) { } } } - if (project_uProjectionMode == PROJECTION_MODE_IDENTITY || - (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET && + if (project.projectionMode == PROJECTION_MODE_IDENTITY || + (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET && (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT || project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) { // Subtract high part of 64 bit value. Convert remainder to float32, preserving precision. diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 6bb9bc0f2a6..74db6a164f7 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -42,6 +42,21 @@ export default { uniformTypes: { autoWrapLongitude: 'f32', coordinateSystem: 'i32', - commonUnitsPerMeter: 'vec3' + commonUnitsPerMeter: 'vec3', + projectionMode: 'i32' + // float project_uScale; + + // vec3 project_uCommonUnitsPerWorldUnit; + // vec3 project_uCommonUnitsPerWorldUnit2; + // vec4 project_uCenter; + // mat4 project_uModelMatrix; + // mat4 project_uViewProjectionMatrix; + // vec2 project_uViewportSize; + // float project_uDevicePixelRatio; + // float project_uFocalDistance; + // vec3 project_uCameraPosition; + // vec3 project_uCoordinateOrigin; + // vec3 project_uCommonOrigin; + // bool project_uPseudoMeters; } } as ShaderModule; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 5b0dfbd206b..df03aa37275 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -189,7 +189,7 @@ function calculateMatrixAndOffset( export type ProjectUniforms = { coordinateSystem: number; - project_uProjectionMode: number; + projectionMode: number; project_uCoordinateOrigin: Vec3; project_uCommonOrigin: Vec3; project_uCenter: Vec4; @@ -300,7 +300,7 @@ function calculateViewportUniforms({ const uniforms: ProjectUniforms = { // Projection mode values coordinateSystem, - project_uProjectionMode: viewport.projectionMode, + projectionMode: viewport.projectionMode, project_uCoordinateOrigin: shaderCoordinateOrigin, project_uCommonOrigin: originCommon.slice(0, 3) as Vec3, project_uCenter: projectionCenter, From 19d53b241060bd973e952833c1776960d0cda4da Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:13:19 +0200 Subject: [PATCH 06/40] project_uScale --- modules/core/src/shaderlib/project/project.glsl.ts | 11 +++++------ modules/core/src/shaderlib/project/project.ts | 4 ++-- .../core/src/shaderlib/project/viewport-uniforms.ts | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index da5456561df..083cac68631 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -41,7 +41,7 @@ uniform project32Uniforms { int coordinateSystem; vec3 commonUnitsPerMeter; int projectionMode; - // float project_uScale; + float scale; // vec3 project_uCommonUnitsPerWorldUnit; // vec3 project_uCommonUnitsPerWorldUnit2; @@ -57,7 +57,6 @@ uniform project32Uniforms { // bool project_uPseudoMeters; } project; -uniform float project_uScale; uniform vec3 project_uCommonUnitsPerWorldUnit; uniform vec3 project_uCommonUnitsPerWorldUnit2; @@ -294,18 +293,18 @@ vec2 project_pixel_size_to_clipspace(vec2 pixels) { } float project_size_to_pixel(float meters) { - return project_size(meters) * project_uScale; + return project_size(meters) * project.scale; } float project_size_to_pixel(float size, int unit) { if (unit == UNIT_METERS) return project_size_to_pixel(size); - if (unit == UNIT_COMMON) return size * project_uScale; + if (unit == UNIT_COMMON) return size * project.scale; // UNIT_PIXELS return size; } float project_pixel_size(float pixels) { - return pixels / project_uScale; + return pixels / project.scale; } vec2 project_pixel_size(vec2 pixels) { - return pixels / project_uScale; + return pixels / project.scale; } `; diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 74db6a164f7..53a5ff3e8b0 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -43,8 +43,8 @@ export default { autoWrapLongitude: 'f32', coordinateSystem: 'i32', commonUnitsPerMeter: 'vec3', - projectionMode: 'i32' - // float project_uScale; + projectionMode: 'i32', + scale: 'f32' // vec3 project_uCommonUnitsPerWorldUnit; // vec3 project_uCommonUnitsPerWorldUnit2; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index df03aa37275..550ee8b3eba 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -206,7 +206,7 @@ export type ProjectUniforms = { project_uCommonUnitsPerWorldUnit: Vec3; project_uCommonUnitsPerWorldUnit2: Vec3; /** 2^zoom */ - project_uScale: number; + scale: number; autoWrapLongitude: boolean; project_uViewProjectionMatrix: NumericArray; @@ -318,7 +318,7 @@ function calculateViewportUniforms({ commonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, - project_uScale: viewport.scale, // This is the mercator scale (2 ** zoom) + scale: viewport.scale, // This is the mercator scale (2 ** zoom) autoWrapLongitude: false, project_uViewProjectionMatrix: viewProjectionMatrix, From af45e527c46ac4f590138b903e4d05e58f26722d Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:16:39 +0200 Subject: [PATCH 07/40] commonUnitsperWorldUnit --- .../src/shaderlib/project/project.glsl.ts | 8 +++---- modules/core/src/shaderlib/project/project.ts | 6 ++--- .../shaderlib/project/viewport-uniforms.ts | 24 ++++++++----------- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 083cac68631..02a9ee6029a 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -43,8 +43,8 @@ uniform project32Uniforms { int projectionMode; float scale; - // vec3 project_uCommonUnitsPerWorldUnit; - // vec3 project_uCommonUnitsPerWorldUnit2; + vec3 commonUnitsPerWorldUnit; + vec3 commonUnitsPerWorldUnit2; // vec4 project_uCenter; // mat4 project_uModelMatrix; // mat4 project_uViewProjectionMatrix; @@ -58,8 +58,6 @@ uniform project32Uniforms { } project; -uniform vec3 project_uCommonUnitsPerWorldUnit; -uniform vec3 project_uCommonUnitsPerWorldUnit2; uniform vec4 project_uCenter; uniform mat4 project_uModelMatrix; uniform mat4 project_uViewProjectionMatrix; @@ -171,7 +169,7 @@ vec3 project_normal(vec3 vector) { vec4 project_offset_(vec4 offset) { float dy = offset.y; - vec3 commonUnitsPerWorldUnit = project_uCommonUnitsPerWorldUnit + project_uCommonUnitsPerWorldUnit2 * dy; + vec3 commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy; return vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w); } diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 53a5ff3e8b0..1f47abd72c0 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -44,10 +44,10 @@ export default { coordinateSystem: 'i32', commonUnitsPerMeter: 'vec3', projectionMode: 'i32', - scale: 'f32' + scale: 'f32', - // vec3 project_uCommonUnitsPerWorldUnit; - // vec3 project_uCommonUnitsPerWorldUnit2; + commonUnitsPerWorldUnit: 'vec3', + commonUnitsPerWorldUnit2: 'vec3' // vec4 project_uCenter; // mat4 project_uModelMatrix; // mat4 project_uViewProjectionMatrix; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 550ee8b3eba..1e768adc771 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -203,8 +203,8 @@ export type ProjectUniforms = { project_uFocalDistance: number; commonUnitsPerMeter: Vec3; - project_uCommonUnitsPerWorldUnit: Vec3; - project_uCommonUnitsPerWorldUnit2: Vec3; + commonUnitsPerWorldUnit: Vec3; + commonUnitsPerWorldUnit2: Vec3; /** 2^zoom */ scale: number; autoWrapLongitude: boolean; @@ -316,8 +316,8 @@ function calculateViewportUniforms({ project_uFocalDistance: focalDistance, commonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, - project_uCommonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, - project_uCommonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, + commonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, + commonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, scale: viewport.scale, // This is the mercator scale (2 ** zoom) autoWrapLongitude: false, @@ -341,8 +341,8 @@ function calculateViewportUniforms({ }; switch (coordinateSystem) { case COORDINATE_SYSTEM.METER_OFFSETS: - uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerMeter; - uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerMeter2; + uniforms.commonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerMeter; + uniforms.commonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerMeter2; break; case COORDINATE_SYSTEM.LNGLAT: @@ -351,18 +351,14 @@ function calculateViewportUniforms({ if (!viewport._pseudoMeters) { uniforms.commonUnitsPerMeter = distanceScalesAtOrigin.unitsPerMeter; } - uniforms.project_uCommonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree; - uniforms.project_uCommonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerDegree2; + uniforms.commonUnitsPerWorldUnit = distanceScalesAtOrigin.unitsPerDegree; + uniforms.commonUnitsPerWorldUnit2 = distanceScalesAtOrigin.unitsPerDegree2; break; // a.k.a "preprojected" positions case COORDINATE_SYSTEM.CARTESIAN: - uniforms.project_uCommonUnitsPerWorldUnit = [1, 1, distanceScalesAtOrigin.unitsPerMeter[2]]; - uniforms.project_uCommonUnitsPerWorldUnit2 = [ - 0, - 0, - distanceScalesAtOrigin.unitsPerMeter2[2] - ]; + uniforms.commonUnitsPerWorldUnit = [1, 1, distanceScalesAtOrigin.unitsPerMeter[2]]; + uniforms.commonUnitsPerWorldUnit2 = [0, 0, distanceScalesAtOrigin.unitsPerMeter2[2]]; break; default: From dfcabe8376418a12ab4cb45da3645d304637f42f Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:18:36 +0200 Subject: [PATCH 08/40] project.center --- modules/core/src/shaderlib/project/project.glsl.ts | 5 ++--- modules/core/src/shaderlib/project/project.ts | 4 ++-- modules/core/src/shaderlib/project/viewport-uniforms.ts | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 02a9ee6029a..a0c27b7c2da 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -45,7 +45,7 @@ uniform project32Uniforms { vec3 commonUnitsPerWorldUnit; vec3 commonUnitsPerWorldUnit2; - // vec4 project_uCenter; + vec4 center; // mat4 project_uModelMatrix; // mat4 project_uViewProjectionMatrix; // vec2 project_uViewportSize; @@ -58,7 +58,6 @@ uniform project32Uniforms { } project; -uniform vec4 project_uCenter; uniform mat4 project_uModelMatrix; uniform mat4 project_uViewProjectionMatrix; uniform vec2 project_uViewportSize; @@ -281,7 +280,7 @@ vec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatr // Uses project_uViewProjectionMatrix // vec4 project_common_position_to_clipspace(vec4 position) { - return project_common_position_to_clipspace(position, project_uViewProjectionMatrix, project_uCenter); + return project_common_position_to_clipspace(position, project_uViewProjectionMatrix, project.center); } // Returns a clip space offset that corresponds to a given number of screen pixels diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 1f47abd72c0..0e3c2b35590 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -47,8 +47,8 @@ export default { scale: 'f32', commonUnitsPerWorldUnit: 'vec3', - commonUnitsPerWorldUnit2: 'vec3' - // vec4 project_uCenter; + commonUnitsPerWorldUnit2: 'vec3', + center: 'vec4' // mat4 project_uModelMatrix; // mat4 project_uViewProjectionMatrix; // vec2 project_uViewportSize; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 1e768adc771..a6f859278da 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -192,7 +192,7 @@ export type ProjectUniforms = { projectionMode: number; project_uCoordinateOrigin: Vec3; project_uCommonOrigin: Vec3; - project_uCenter: Vec4; + center: Vec4; // Backward compatibility // TODO: remove in v9 project_uPseudoMeters: boolean; @@ -303,7 +303,7 @@ function calculateViewportUniforms({ projectionMode: viewport.projectionMode, project_uCoordinateOrigin: shaderCoordinateOrigin, project_uCommonOrigin: originCommon.slice(0, 3) as Vec3, - project_uCenter: projectionCenter, + center: projectionCenter, // Backward compatibility // TODO: remove in v9 From 7b3b511441b6abef6777d5399546d928b43d8c17 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:21:59 +0200 Subject: [PATCH 09/40] modelMatrix --- .../src/shaderlib/project/project.glsl.ts | 9 ++++----- modules/core/src/shaderlib/project/project.ts | 20 +++++++++---------- .../shaderlib/project/viewport-uniforms.ts | 6 +++--- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index a0c27b7c2da..ef75e0af75c 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -46,7 +46,7 @@ uniform project32Uniforms { vec3 commonUnitsPerWorldUnit; vec3 commonUnitsPerWorldUnit2; vec4 center; - // mat4 project_uModelMatrix; + mat4 modelMatrix; // mat4 project_uViewProjectionMatrix; // vec2 project_uViewportSize; // float project_uDevicePixelRatio; @@ -58,7 +58,6 @@ uniform project32Uniforms { } project; -uniform mat4 project_uModelMatrix; uniform mat4 project_uViewProjectionMatrix; uniform vec2 project_uViewportSize; uniform float project_uDevicePixelRatio; @@ -157,7 +156,7 @@ bool project_needs_rotation(vec3 commonPosition, out mat3 transform) { // vec3 project_normal(vec3 vector) { // Apply model matrix - vec4 normal_modelspace = project_uModelMatrix * vec4(vector, 0.0); + vec4 normal_modelspace = project.modelMatrix * vec4(vector, 0.0); vec3 n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter); mat3 rotation; if (project_needs_rotation(geometry.position.xyz, rotation)) { @@ -204,7 +203,7 @@ vec3 project_globe_(vec3 lnglatz) { // Projects positions (defined by project.coordinateSystem) to common space (defined by project.projectionMode) // vec4 project_position(vec4 position, vec3 position64Low) { - vec4 position_world = project_uModelMatrix * position; + vec4 position_world = project.modelMatrix * position; // Work around for a Mac+NVIDIA bug https://github.com/visgl/deck.gl/issues/4145 if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) { @@ -249,7 +248,7 @@ vec4 project_position(vec4 position, vec3 position64Low) { } // Translation is already added to the high parts - return project_offset_(position_world) + project_offset_(project_uModelMatrix * vec4(position64Low, 0.0)); + return project_offset_(position_world) + project_offset_(project.modelMatrix * vec4(position64Low, 0.0)); } vec4 project_position(vec4 position) { diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 0e3c2b35590..36cacb6d04e 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -48,15 +48,15 @@ export default { commonUnitsPerWorldUnit: 'vec3', commonUnitsPerWorldUnit2: 'vec3', - center: 'vec4' - // mat4 project_uModelMatrix; - // mat4 project_uViewProjectionMatrix; - // vec2 project_uViewportSize; - // float project_uDevicePixelRatio; - // float project_uFocalDistance; - // vec3 project_uCameraPosition; - // vec3 project_uCoordinateOrigin; - // vec3 project_uCommonOrigin; - // bool project_uPseudoMeters; + center: 'vec4', + modelMatrix: 'mat4x4' + // mat4 project_uViewProjectionMatrix + // vec2 project_uViewportSize + // float project_uDevicePixelRatio + // float project_uFocalDistance + // vec3 project_uCameraPosition + // vec3 project_uCoordinateOrigin + // vec3 project_uCommonOrigin + // bool project_uPseudoMeters } } as ShaderModule; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index a6f859278da..8d69b08f853 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -210,7 +210,7 @@ export type ProjectUniforms = { autoWrapLongitude: boolean; project_uViewProjectionMatrix: NumericArray; - project_uModelMatrix: NumericArray; + modelMatrix: NumericArray; // This is for lighting calculations project_uCameraPosition: Vec3; @@ -257,7 +257,7 @@ export function getUniformsFromViewport({ }); uniforms.autoWrapLongitude = autoWrapLongitude; - uniforms.project_uModelMatrix = modelMatrix || IDENTITY_MATRIX; + uniforms.modelMatrix = modelMatrix || IDENTITY_MATRIX; return uniforms; } @@ -322,7 +322,7 @@ function calculateViewportUniforms({ autoWrapLongitude: false, project_uViewProjectionMatrix: viewProjectionMatrix, - project_uModelMatrix: IDENTITY_MATRIX, + modelMatrix: IDENTITY_MATRIX, // This is for lighting calculations project_uCameraPosition: cameraPosCommon From 2d426cbd3be4c6a5c9589edf826bba1fcc25f69b Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:25:07 +0200 Subject: [PATCH 10/40] viewProjectionMatrix --- .../core/src/shaderlib/project/project.glsl.ts | 7 +++---- modules/core/src/shaderlib/project/project.ts | 18 +++++++++--------- .../src/shaderlib/project/viewport-uniforms.ts | 4 ++-- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index ef75e0af75c..18a5ede9022 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -47,7 +47,7 @@ uniform project32Uniforms { vec3 commonUnitsPerWorldUnit2; vec4 center; mat4 modelMatrix; - // mat4 project_uViewProjectionMatrix; + mat4 viewProjectionMatrix; // vec2 project_uViewportSize; // float project_uDevicePixelRatio; // float project_uFocalDistance; @@ -58,7 +58,6 @@ uniform project32Uniforms { } project; -uniform mat4 project_uViewProjectionMatrix; uniform vec2 project_uViewportSize; uniform float project_uDevicePixelRatio; uniform float project_uFocalDistance; @@ -276,10 +275,10 @@ vec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatr // // Projects from common space coordinates to clip space. -// Uses project_uViewProjectionMatrix +// Uses project.viewProjectionMatrix // vec4 project_common_position_to_clipspace(vec4 position) { - return project_common_position_to_clipspace(position, project_uViewProjectionMatrix, project.center); + return project_common_position_to_clipspace(position, project.viewProjectionMatrix, project.center); } // Returns a clip space offset that corresponds to a given number of screen pixels diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 36cacb6d04e..3ed41dfaa46 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -49,14 +49,14 @@ export default { commonUnitsPerWorldUnit: 'vec3', commonUnitsPerWorldUnit2: 'vec3', center: 'vec4', - modelMatrix: 'mat4x4' - // mat4 project_uViewProjectionMatrix - // vec2 project_uViewportSize - // float project_uDevicePixelRatio - // float project_uFocalDistance - // vec3 project_uCameraPosition - // vec3 project_uCoordinateOrigin - // vec3 project_uCommonOrigin - // bool project_uPseudoMeters + modelMatrix: 'mat4x4', + viewProjectionMatrix: 'mat4x4' + //, vec2 project_uViewportSize + //, float project_uDevicePixelRatio + //, float project_uFocalDistance + //, vec3 project_uCameraPosition + //, vec3 project_uCoordinateOrigin + //, vec3 project_uCommonOrigin + //, bool project_uPseudoMeters } } as ShaderModule; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 8d69b08f853..b34ed78655d 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -209,7 +209,7 @@ export type ProjectUniforms = { scale: number; autoWrapLongitude: boolean; - project_uViewProjectionMatrix: NumericArray; + viewProjectionMatrix: NumericArray; modelMatrix: NumericArray; // This is for lighting calculations @@ -321,7 +321,7 @@ function calculateViewportUniforms({ scale: viewport.scale, // This is the mercator scale (2 ** zoom) autoWrapLongitude: false, - project_uViewProjectionMatrix: viewProjectionMatrix, + viewProjectionMatrix: viewProjectionMatrix, modelMatrix: IDENTITY_MATRIX, // This is for lighting calculations From 837fa161bd12b03c473395e85fd2584e5712c405 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:27:13 +0200 Subject: [PATCH 11/40] viewportSize --- .../core/src/shaderlib/project/project.glsl.ts | 5 ++--- modules/core/src/shaderlib/project/project.ts | 16 ++++++++-------- .../src/shaderlib/project/viewport-uniforms.ts | 4 ++-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 18a5ede9022..c86aa74cb73 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -48,7 +48,7 @@ uniform project32Uniforms { vec4 center; mat4 modelMatrix; mat4 viewProjectionMatrix; - // vec2 project_uViewportSize; + vec2 viewportSize; // float project_uDevicePixelRatio; // float project_uFocalDistance; // vec3 project_uCameraPosition; @@ -58,7 +58,6 @@ uniform project32Uniforms { } project; -uniform vec2 project_uViewportSize; uniform float project_uDevicePixelRatio; uniform float project_uFocalDistance; uniform vec3 project_uCameraPosition; @@ -283,7 +282,7 @@ vec4 project_common_position_to_clipspace(vec4 position) { // Returns a clip space offset that corresponds to a given number of screen pixels vec2 project_pixel_size_to_clipspace(vec2 pixels) { - vec2 offset = pixels / project_uViewportSize * project_uDevicePixelRatio * 2.0; + vec2 offset = pixels / project.viewportSize * project_uDevicePixelRatio * 2.0; return offset * project_uFocalDistance; } diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 3ed41dfaa46..35c56c78134 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -50,13 +50,13 @@ export default { commonUnitsPerWorldUnit2: 'vec3', center: 'vec4', modelMatrix: 'mat4x4', - viewProjectionMatrix: 'mat4x4' - //, vec2 project_uViewportSize - //, float project_uDevicePixelRatio - //, float project_uFocalDistance - //, vec3 project_uCameraPosition - //, vec3 project_uCoordinateOrigin - //, vec3 project_uCommonOrigin - //, bool project_uPseudoMeters + viewProjectionMatrix: 'mat4x4', + viewportSize: 'vec2' + //, project_uDevicePixelRatio :'f32' + //, project_uFocalDistance :'f32' + //, project_uCameraPosition :'vec3' + //, project_uCoordinateOrigin :'vec3' + //, project_uCommonOrigin :'vec3' + //, project_uPseudoMeters :'f32' } } as ShaderModule; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index b34ed78655d..98b60bcbfdc 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -198,7 +198,7 @@ export type ProjectUniforms = { project_uPseudoMeters: boolean; // Screen size - project_uViewportSize: [number, number]; + viewportSize: [number, number]; project_uDevicePixelRatio: number; project_uFocalDistance: number; @@ -311,7 +311,7 @@ function calculateViewportUniforms({ project_uPseudoMeters: Boolean(viewport._pseudoMeters), // Screen size - project_uViewportSize: viewportSize, + viewportSize: viewportSize, project_uDevicePixelRatio: devicePixelRatio, project_uFocalDistance: focalDistance, From ab8bdf7cb8ff37fa190fbdba7ccd43d62de67e01 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:28:04 +0200 Subject: [PATCH 12/40] devicePixelRatio --- modules/core/src/shaderlib/project/project.glsl.ts | 5 ++--- modules/core/src/shaderlib/project/project.ts | 4 ++-- modules/core/src/shaderlib/project/viewport-uniforms.ts | 4 ++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index c86aa74cb73..a6fd2fc92f6 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -49,7 +49,7 @@ uniform project32Uniforms { mat4 modelMatrix; mat4 viewProjectionMatrix; vec2 viewportSize; - // float project_uDevicePixelRatio; + float devicePixelRatio; // float project_uFocalDistance; // vec3 project_uCameraPosition; // vec3 project_uCoordinateOrigin; @@ -58,7 +58,6 @@ uniform project32Uniforms { } project; -uniform float project_uDevicePixelRatio; uniform float project_uFocalDistance; uniform vec3 project_uCameraPosition; uniform vec3 project_uCoordinateOrigin; @@ -282,7 +281,7 @@ vec4 project_common_position_to_clipspace(vec4 position) { // Returns a clip space offset that corresponds to a given number of screen pixels vec2 project_pixel_size_to_clipspace(vec2 pixels) { - vec2 offset = pixels / project.viewportSize * project_uDevicePixelRatio * 2.0; + vec2 offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0; return offset * project_uFocalDistance; } diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 35c56c78134..e546f7d056e 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -51,8 +51,8 @@ export default { center: 'vec4', modelMatrix: 'mat4x4', viewProjectionMatrix: 'mat4x4', - viewportSize: 'vec2' - //, project_uDevicePixelRatio :'f32' + viewportSize: 'vec2', + devicePixelRatio: 'f32' //, project_uFocalDistance :'f32' //, project_uCameraPosition :'vec3' //, project_uCoordinateOrigin :'vec3' diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 98b60bcbfdc..c041ad0fcc1 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -199,7 +199,7 @@ export type ProjectUniforms = { // Screen size viewportSize: [number, number]; - project_uDevicePixelRatio: number; + devicePixelRatio: number; project_uFocalDistance: number; commonUnitsPerMeter: Vec3; @@ -312,7 +312,7 @@ function calculateViewportUniforms({ // Screen size viewportSize: viewportSize, - project_uDevicePixelRatio: devicePixelRatio, + devicePixelRatio: devicePixelRatio, project_uFocalDistance: focalDistance, commonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, From 3ab15bc6fdb0a8a483a132caf49da8aaddeaee37 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:30:56 +0200 Subject: [PATCH 13/40] focalDistance --- modules/core/src/shaderlib/project/project.glsl.ts | 8 +++----- modules/core/src/shaderlib/project/project.ts | 6 +++--- modules/core/src/shaderlib/project/viewport-uniforms.ts | 8 ++++---- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index a6fd2fc92f6..418f8ffe429 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -50,16 +50,14 @@ uniform project32Uniforms { mat4 viewProjectionMatrix; vec2 viewportSize; float devicePixelRatio; - // float project_uFocalDistance; - // vec3 project_uCameraPosition; + float focalDistance; + vec3 cameraPosition; // vec3 project_uCoordinateOrigin; // vec3 project_uCommonOrigin; // bool project_uPseudoMeters; } project; -uniform float project_uFocalDistance; -uniform vec3 project_uCameraPosition; uniform vec3 project_uCoordinateOrigin; uniform vec3 project_uCommonOrigin; uniform bool project_uPseudoMeters; @@ -282,7 +280,7 @@ vec4 project_common_position_to_clipspace(vec4 position) { // Returns a clip space offset that corresponds to a given number of screen pixels vec2 project_pixel_size_to_clipspace(vec2 pixels) { vec2 offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0; - return offset * project_uFocalDistance; + return offset * project.focalDistance; } float project_size_to_pixel(float meters) { diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index e546f7d056e..f3e10c43856 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -52,9 +52,9 @@ export default { modelMatrix: 'mat4x4', viewProjectionMatrix: 'mat4x4', viewportSize: 'vec2', - devicePixelRatio: 'f32' - //, project_uFocalDistance :'f32' - //, project_uCameraPosition :'vec3' + devicePixelRatio: 'f32', + focalDistance: 'f32', + cameraPosition: 'vec3' //, project_uCoordinateOrigin :'vec3' //, project_uCommonOrigin :'vec3' //, project_uPseudoMeters :'f32' diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index c041ad0fcc1..c56f0018a2e 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -201,7 +201,7 @@ export type ProjectUniforms = { viewportSize: [number, number]; devicePixelRatio: number; - project_uFocalDistance: number; + focalDistance: number; commonUnitsPerMeter: Vec3; commonUnitsPerWorldUnit: Vec3; commonUnitsPerWorldUnit2: Vec3; @@ -213,7 +213,7 @@ export type ProjectUniforms = { modelMatrix: NumericArray; // This is for lighting calculations - project_uCameraPosition: Vec3; + cameraPosition: Vec3; }; export type ProjectModuleSettings = { @@ -314,7 +314,7 @@ function calculateViewportUniforms({ viewportSize: viewportSize, devicePixelRatio: devicePixelRatio, - project_uFocalDistance: focalDistance, + focalDistance: focalDistance, commonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, commonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, commonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, @@ -325,7 +325,7 @@ function calculateViewportUniforms({ modelMatrix: IDENTITY_MATRIX, // This is for lighting calculations - project_uCameraPosition: cameraPosCommon + cameraPosition: cameraPosCommon }; if (geospatialOrigin) { From 607718a4755a42d6608b97960b6bb96a5cf4866d Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:32:28 +0200 Subject: [PATCH 14/40] coordinateOrigin --- modules/core/src/shaderlib/project/project.glsl.ts | 9 ++++----- modules/core/src/shaderlib/project/project.ts | 4 ++-- modules/core/src/shaderlib/project/viewport-uniforms.ts | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 418f8ffe429..8a1da7563e2 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -52,13 +52,12 @@ uniform project32Uniforms { float devicePixelRatio; float focalDistance; vec3 cameraPosition; - // vec3 project_uCoordinateOrigin; + vec3 coordinateOrigin; // vec3 project_uCommonOrigin; // bool project_uPseudoMeters; } project; -uniform vec3 project_uCoordinateOrigin; uniform vec3 project_uCommonOrigin; uniform bool project_uPseudoMeters; @@ -210,7 +209,7 @@ vec4 project_position(vec4 position, vec3 position64Low) { ); } if (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) { - position_world.xyz += project_uCoordinateOrigin; + position_world.xyz += project.coordinateOrigin; } } if (project.projectionMode == PROJECTION_MODE_GLOBE) { @@ -223,7 +222,7 @@ vec4 project_position(vec4 position, vec3 position64Low) { } if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) { if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) { - if (abs(position_world.y - project_uCoordinateOrigin.y) > 0.25) { + if (abs(position_world.y - project.coordinateOrigin.y) > 0.25) { // Too far from the projection center for offset mode to be accurate // Only use high parts return vec4( @@ -239,7 +238,7 @@ vec4 project_position(vec4 position, vec3 position64Low) { (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT || project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) { // Subtract high part of 64 bit value. Convert remainder to float32, preserving precision. - position_world.xyz -= project_uCoordinateOrigin; + position_world.xyz -= project.coordinateOrigin; } // Translation is already added to the high parts diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index f3e10c43856..2a9dd4e1f15 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -54,8 +54,8 @@ export default { viewportSize: 'vec2', devicePixelRatio: 'f32', focalDistance: 'f32', - cameraPosition: 'vec3' - //, project_uCoordinateOrigin :'vec3' + cameraPosition: 'vec3', + coordinateOrigin: 'vec3' //, project_uCommonOrigin :'vec3' //, project_uPseudoMeters :'f32' } diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index c56f0018a2e..9b914bee7df 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -190,7 +190,7 @@ function calculateMatrixAndOffset( export type ProjectUniforms = { coordinateSystem: number; projectionMode: number; - project_uCoordinateOrigin: Vec3; + coordinateOrigin: Vec3; project_uCommonOrigin: Vec3; center: Vec4; // Backward compatibility @@ -301,7 +301,7 @@ function calculateViewportUniforms({ // Projection mode values coordinateSystem, projectionMode: viewport.projectionMode, - project_uCoordinateOrigin: shaderCoordinateOrigin, + coordinateOrigin: shaderCoordinateOrigin, project_uCommonOrigin: originCommon.slice(0, 3) as Vec3, center: projectionCenter, From 1194ed1d841e223c76d4336ed9a6e840875dcf04 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:33:59 +0200 Subject: [PATCH 15/40] commonOrigin --- modules/core/src/shaderlib/project/project.glsl.ts | 10 ++++------ modules/core/src/shaderlib/project/project.ts | 6 +++--- .../core/src/shaderlib/project/viewport-uniforms.ts | 8 ++++---- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 8a1da7563e2..c8b2a466706 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -53,13 +53,11 @@ uniform project32Uniforms { float focalDistance; vec3 cameraPosition; vec3 coordinateOrigin; - // vec3 project_uCommonOrigin; - // bool project_uPseudoMeters; + vec3 commonOrigin; + bool pseudoMeters; } project; -uniform vec3 project_uCommonOrigin; -uniform bool project_uPseudoMeters; const float TILE_SIZE = 512.0; const float PI = 3.1415926536; @@ -77,7 +75,7 @@ float project_size_at_latitude(float lat) { float project_size() { if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR && project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT && - project_uPseudoMeters == false) { + project.pseudoMeters == false) { // uCommonUnitsPerMeter in low-zoom Web Mercator is non-linear // Adjust by 1 / cos(latitude) @@ -226,7 +224,7 @@ vec4 project_position(vec4 position, vec3 position64Low) { // Too far from the projection center for offset mode to be accurate // Only use high parts return vec4( - project_mercator_(position_world.xy) - project_uCommonOrigin.xy, + project_mercator_(position_world.xy) - project.commonOrigin.xy, project_size(position_world.z), position_world.w ); diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 2a9dd4e1f15..f6f790b806c 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -55,8 +55,8 @@ export default { devicePixelRatio: 'f32', focalDistance: 'f32', cameraPosition: 'vec3', - coordinateOrigin: 'vec3' - //, project_uCommonOrigin :'vec3' - //, project_uPseudoMeters :'f32' + coordinateOrigin: 'vec3', + commonOrigin: 'vec3', + pseudoMeters: 'f32' } } as ShaderModule; diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 9b914bee7df..71acda6253e 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -191,11 +191,11 @@ export type ProjectUniforms = { coordinateSystem: number; projectionMode: number; coordinateOrigin: Vec3; - project_uCommonOrigin: Vec3; + commonOrigin: Vec3; center: Vec4; // Backward compatibility // TODO: remove in v9 - project_uPseudoMeters: boolean; + pseudoMeters: boolean; // Screen size viewportSize: [number, number]; @@ -302,13 +302,13 @@ function calculateViewportUniforms({ coordinateSystem, projectionMode: viewport.projectionMode, coordinateOrigin: shaderCoordinateOrigin, - project_uCommonOrigin: originCommon.slice(0, 3) as Vec3, + commonOrigin: originCommon.slice(0, 3) as Vec3, center: projectionCenter, // Backward compatibility // TODO: remove in v9 // @ts-expect-error _pseudoMeters is only defined on WebMercator viewport - project_uPseudoMeters: Boolean(viewport._pseudoMeters), + pseudoMeters: Boolean(viewport._pseudoMeters), // Screen size viewportSize: viewportSize, From 3046ac5c329f9a059f0a35b0931e6a5fb8a777d9 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:51:38 +0200 Subject: [PATCH 16/40] Update layer shaders --- .../bezier-curve-layer-vertex.glsl.js | 2 +- examples/website/plot/plot-layer/grid-vertex.glsl.ts | 2 +- examples/website/plot/plot-layer/label-vertex.glsl.ts | 2 +- .../gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.ts | 2 +- modules/carto/src/layers/raster-layer-vertex.glsl.ts | 6 +++--- modules/extensions/src/terrain/shader-module.ts | 2 +- .../src/mesh-layer/mesh-layer-vertex.glsl.ts | 2 +- modules/layers/src/arc-layer/arc-layer-vertex.glsl.ts | 8 ++++---- .../src/column-layer/column-layer-fragment.glsl.ts | 3 +-- .../src/column-layer/column-layer-vertex.glsl.ts | 2 +- .../layers/src/line-layer/line-layer-vertex.glsl.ts | 2 +- .../point-cloud-layer/point-cloud-layer-vertex.glsl.ts | 2 +- .../solid-polygon-layer-vertex-main.glsl.ts | 8 ++++---- .../simple-mesh-layer/simple-mesh-layer-vertex.glsl.ts | 2 +- .../wboit/wboit-layer/wboit-layer-vertex-main.glsl.js | 10 +++++----- .../core/shaderlib/project/project-32-64-glsl.spec.ts | 4 ++-- .../core/shaderlib/project/project-glsl.spec.ts | 4 ++-- 17 files changed, 31 insertions(+), 32 deletions(-) diff --git a/examples/experimental/bezier/src/bezier-curve-layer/bezier-curve-layer-vertex.glsl.js b/examples/experimental/bezier/src/bezier-curve-layer/bezier-curve-layer-vertex.glsl.js index 752b9c023cc..8833963311c 100644 --- a/examples/experimental/bezier/src/bezier-curve-layer/bezier-curve-layer-vertex.glsl.js +++ b/examples/experimental/bezier/src/bezier-curve-layer/bezier-curve-layer-vertex.glsl.js @@ -39,7 +39,7 @@ out vec4 vColor; // offset_direction is -1 (left) or 1 (right) vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) { // normalized direction of the line - vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize); + vec2 dir_screenspace = normalize(line_clipspace * project.viewportSize); // rotate by 90 degrees dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x); diff --git a/examples/website/plot/plot-layer/grid-vertex.glsl.ts b/examples/website/plot/plot-layer/grid-vertex.glsl.ts index 0157906e837..6ab93932dae 100644 --- a/examples/website/plot/plot-layer/grid-vertex.glsl.ts +++ b/examples/website/plot/plot-layer/grid-vertex.glsl.ts @@ -38,7 +38,7 @@ out float shouldDiscard; // determines if the grid line is behind or in front of the center float frontFacing(vec3 v) { - vec4 v_clipspace = project_uViewProjectionMatrix * project_uModelMatrix * vec4(v, 0.0); + vec4 v_clipspace = project.viewProjectionMatrix * project.modelMatrix * vec4(v, 0.0); return step(v_clipspace.z, 0.0); } diff --git a/examples/website/plot/plot-layer/label-vertex.glsl.ts b/examples/website/plot/plot-layer/label-vertex.glsl.ts index b5b8610f3b7..b19ab0a166d 100644 --- a/examples/website/plot/plot-layer/label-vertex.glsl.ts +++ b/examples/website/plot/plot-layer/label-vertex.glsl.ts @@ -50,7 +50,7 @@ float sum3(vec3 v) { // determines if the grid line is behind or in front of the center float frontFacing(vec3 v) { - vec4 v_clipspace = project_uViewProjectionMatrix * project_uModelMatrix * vec4(v, 0.0); + vec4 v_clipspace = project.viewProjectionMatrix * project.modelMatrix * vec4(v, 0.0); return step(v_clipspace.z, 0.0); } diff --git a/modules/aggregation-layers/src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.ts b/modules/aggregation-layers/src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.ts index ce26a2dff65..b23943364df 100644 --- a/modules/aggregation-layers/src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.ts +++ b/modules/aggregation-layers/src/gpu-grid-layer/gpu-grid-cell-layer-vertex.glsl.ts @@ -134,7 +134,7 @@ void main(void) { vec3 normals_commonspace = project_normal(normals); if (extruded) { - vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, normals_commonspace); + vec3 lightColor = lighting_getLightColor(color.rgb, project.cameraPosition, geometry.position.xyz, normals_commonspace); vColor = vec4(lightColor, color.a * opacity) / 255.; } else { vColor = vec4(color.rgb, color.a * opacity) / 255.; diff --git a/modules/carto/src/layers/raster-layer-vertex.glsl.ts b/modules/carto/src/layers/raster-layer-vertex.glsl.ts index 8026f4cda2c..20df0a9e6a7 100644 --- a/modules/carto/src/layers/raster-layer-vertex.glsl.ts +++ b/modules/carto/src/layers/raster-layer-vertex.glsl.ts @@ -46,8 +46,8 @@ void main(void) { // Important to set geometry.position before using project_ methods below // as geometry.worldPosition is not set (we don't know our lat/long) geometry.position = vec4(common_position, 0.0, 1.0); - if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) { - geometry.position.xyz -= project_uCommonOrigin; + if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) { + geometry.position.xyz -= project.commonOrigin; } // calculate elevation, if 3d not enabled set to 0 @@ -86,7 +86,7 @@ void main(void) { position_commonspace = geometry.position; vColor = vec4(color.rgb, color.a * opacity); #else - vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal); + vec3 lightColor = lighting_getLightColor(color.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal); vColor = vec4(lightColor, color.a * opacity); #endif } else { diff --git a/modules/extensions/src/terrain/shader-module.ts b/modules/extensions/src/terrain/shader-module.ts index 5a444f1782b..2810b80c803 100644 --- a/modules/extensions/src/terrain/shader-module.ts +++ b/modules/extensions/src/terrain/shader-module.ts @@ -62,7 +62,7 @@ commonPos = geometry.position.xyz; if (terrain_mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) { vec2 texCoords = (commonPos.xy - terrain_bounds.xy) / terrain_bounds.zw; position = vec4(texCoords * 2.0 - 1.0, 0.0, 1.0); - commonPos.z += project_uCommonOrigin.z; + commonPos.z += project.commonOrigin.z; } if (terrain_mode == TERRAIN_MODE_USE_HEIGHT_MAP) { vec3 anchor = geometry.worldPosition; 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 5b8c6b533b0..24afc94cd7a 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 @@ -50,7 +50,7 @@ void main(void) { mat3 instanceModelMatrix = mat3(instanceModelMatrixCol0, instanceModelMatrixCol1, instanceModelMatrixCol2); vTexCoord = uv; - cameraPosition = project_uCameraPosition; + cameraPosition = project.cameraPosition; vColor = vec4(colors * instanceColors.rgb, instanceColors.a); vec3 pos = (instanceModelMatrix * positions) * sizeScale; diff --git a/modules/layers/src/arc-layer/arc-layer-vertex.glsl.ts b/modules/layers/src/arc-layer/arc-layer-vertex.glsl.ts index a01c41fb017..12700972494 100644 --- a/modules/layers/src/arc-layer/arc-layer-vertex.glsl.ts +++ b/modules/layers/src/arc-layer/arc-layer-vertex.glsl.ts @@ -75,7 +75,7 @@ float paraboloid(float distance, float sourceZ, float targetZ, float ratio) { // offset_direction is -1 (left) or 1 (right) vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) { // normalized direction of the line - vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize); + vec2 dir_screenspace = normalize(line_clipspace * project.viewportSize); // rotate by 90 degrees dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x); @@ -156,7 +156,7 @@ void main(void) { vec3 source; vec3 target; - if ((greatCircle || project_uProjectionMode == PROJECTION_MODE_GLOBE) && project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT) { + if ((greatCircle || project.projectionMode == PROJECTION_MODE_GLOBE) && project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) { source = project_globe_(vec3(instanceSourcePositions.xy, 0.0)); target = project_globe_(vec3(instanceTargetPositions.xy, 0.0)); float angularDist = getAngularDist(instanceSourcePositions.xy, instanceTargetPositions.xy); @@ -207,8 +207,8 @@ void main(void) { float antiMeridianX = 0.0; if (useShortestPath) { - if (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) { - antiMeridianX = -(project_uCoordinateOrigin.x + 180.) / 360. * TILE_SIZE; + if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) { + antiMeridianX = -(project.coordinateOrigin.x + 180.) / 360. * TILE_SIZE; } float thresholdRatio = (antiMeridianX - source.x) / (target.x - source.x); diff --git a/modules/layers/src/column-layer/column-layer-fragment.glsl.ts b/modules/layers/src/column-layer/column-layer-fragment.glsl.ts index c81480a1f47..507007ef8f9 100644 --- a/modules/layers/src/column-layer/column-layer-fragment.glsl.ts +++ b/modules/layers/src/column-layer/column-layer-fragment.glsl.ts @@ -23,7 +23,6 @@ export default `#version 300 es precision highp float; -uniform vec3 project_uCameraPosition; uniform bool extruded; uniform bool isStroke; @@ -39,7 +38,7 @@ void main(void) { #ifdef FLAT_SHADING if (extruded && !isStroke && !bool(picking.isActive)) { vec3 normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz))); - fragColor.rgb = lighting_getLightColor(vColor.rgb, project_uCameraPosition, position_commonspace.xyz, normal); + fragColor.rgb = lighting_getLightColor(vColor.rgb, project.cameraPosition, position_commonspace.xyz, normal); } #endif DECKGL_FILTER_COLOR(fragColor, geometry); diff --git a/modules/layers/src/column-layer/column-layer-vertex.glsl.ts b/modules/layers/src/column-layer/column-layer-vertex.glsl.ts index 5cac89f7e8d..460c122acee 100644 --- a/modules/layers/src/column-layer/column-layer-vertex.glsl.ts +++ b/modules/layers/src/column-layer/column-layer-vertex.glsl.ts @@ -110,7 +110,7 @@ void main(void) { position_commonspace = geometry.position; vColor = vec4(color.rgb, color.a * opacity); #else - vec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal); + vec3 lightColor = lighting_getLightColor(color.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal); vColor = vec4(lightColor, color.a * opacity); #endif } else { diff --git a/modules/layers/src/line-layer/line-layer-vertex.glsl.ts b/modules/layers/src/line-layer/line-layer-vertex.glsl.ts index f0567d4db18..5a4707fac40 100644 --- a/modules/layers/src/line-layer/line-layer-vertex.glsl.ts +++ b/modules/layers/src/line-layer/line-layer-vertex.glsl.ts @@ -45,7 +45,7 @@ out vec2 uv; // offset_direction is -1 (left) or 1 (right) vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) { // normalized direction of the line - vec2 dir_screenspace = normalize(line_clipspace * project_uViewportSize); + vec2 dir_screenspace = normalize(line_clipspace * project.viewportSize); // rotate by 90 degrees dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x); diff --git a/modules/layers/src/point-cloud-layer/point-cloud-layer-vertex.glsl.ts b/modules/layers/src/point-cloud-layer/point-cloud-layer-vertex.glsl.ts index aa6fafdc29d..83e88d28fb5 100644 --- a/modules/layers/src/point-cloud-layer/point-cloud-layer-vertex.glsl.ts +++ b/modules/layers/src/point-cloud-layer/point-cloud-layer-vertex.glsl.ts @@ -54,7 +54,7 @@ void main(void) { gl_Position.xy += project_pixel_size_to_clipspace(offset.xy); // Apply lighting - vec3 lightColor = lighting_getLightColor(instanceColors.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal); + vec3 lightColor = lighting_getLightColor(instanceColors.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal); // Apply opacity to instance color, or return instance picking color vColor = vec4(lightColor, instanceColors.a * opacity); diff --git a/modules/layers/src/solid-polygon-layer/solid-polygon-layer-vertex-main.glsl.ts b/modules/layers/src/solid-polygon-layer/solid-polygon-layer-vertex-main.glsl.ts index 852d3b9d5aa..f4ed49bed16 100644 --- a/modules/layers/src/solid-polygon-layer/solid-polygon-layer-vertex-main.glsl.ts +++ b/modules/layers/src/solid-polygon-layer/solid-polygon-layer-vertex-main.glsl.ts @@ -38,10 +38,10 @@ struct PolygonProps { }; vec3 project_offset_normal(vec3 vector) { - if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT || - project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) { + if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT || + project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS) { // normals generated by the polygon tesselator are in lnglat offsets instead of meters - return normalize(vector * project_uCommonUnitsPerWorldUnit); + return normalize(vector * project.commonUnitsPerWorldUnit); } return project_normal(vector); } @@ -69,7 +69,7 @@ void calculatePosition(PolygonProps props) { normal = project_normal(normal); #endif geometry.normal = normal; - vec3 lightColor = lighting_getLightColor(colors.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal); + vec3 lightColor = lighting_getLightColor(colors.rgb, project.cameraPosition, geometry.position.xyz, geometry.normal); vColor = vec4(lightColor, colors.a * opacity); } else { vColor = vec4(colors.rgb, colors.a * opacity); diff --git a/modules/mesh-layers/src/simple-mesh-layer/simple-mesh-layer-vertex.glsl.ts b/modules/mesh-layers/src/simple-mesh-layer/simple-mesh-layer-vertex.glsl.ts index ec48651fd91..da734aace17 100644 --- a/modules/mesh-layers/src/simple-mesh-layer/simple-mesh-layer-vertex.glsl.ts +++ b/modules/mesh-layers/src/simple-mesh-layer/simple-mesh-layer-vertex.glsl.ts @@ -34,7 +34,7 @@ void main(void) { geometry.pickingColor = instancePickingColors; vTexCoord = texCoords; - cameraPosition = project_uCameraPosition; + cameraPosition = project.cameraPosition; vColor = vec4(colors * instanceColors.rgb, instanceColors.a); mat3 instanceModelMatrix = mat3(instanceModelMatrixCol0, instanceModelMatrixCol1, instanceModelMatrixCol2); diff --git a/test/apps/wboit/wboit-layer/wboit-layer-vertex-main.glsl.js b/test/apps/wboit/wboit-layer/wboit-layer-vertex-main.glsl.js index 18218c40abb..d561c85eb7f 100644 --- a/test/apps/wboit/wboit-layer/wboit-layer-vertex-main.glsl.js +++ b/test/apps/wboit/wboit-layer/wboit-layer-vertex-main.glsl.js @@ -43,11 +43,11 @@ struct PolygonProps { }; vec3 project_offset_normal(vec3 vector) { - if (project_uCoordinateSystem == COORDINATE_SYSTEM_LNG_LAT || - project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS || - project_uCoordinateSystem == COORDINATE_SYSTEM_LNGLAT_AUTO_OFFSET) { + if (project.coordinateSystem == COORDINATE_SYSTEM_LNG_LAT || + project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSETS || + project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT_AUTO_OFFSET) { // normals generated by the polygon tesselator are in lnglat offsets instead of meters - return normalize(vector * project_uCommonUnitsPerWorldUnit); + return normalize(vector * project.commonUnitsPerWorldUnit); } return project_normal(vector); } @@ -87,7 +87,7 @@ void calculatePosition(PolygonProps props) { DECKGL_FILTER_GL_POSITION(gl_Position, geometry); if (extruded) { - vec3 lightColor = lighting_getLightColor(colors.rgb, project_uCameraPosition, geometry.position.xyz, normal); + vec3 lightColor = lighting_getLightColor(colors.rgb, project.cameraPosition, geometry.position.xyz, normal); vColor = vec4(lightColor, colors.a * opacity); } else { vColor = vec4(colors.rgb, colors.a * opacity); diff --git a/test/modules/core/shaderlib/project/project-32-64-glsl.spec.ts b/test/modules/core/shaderlib/project/project-32-64-glsl.spec.ts index 65503af3185..580f546e264 100644 --- a/test/modules/core/shaderlib/project/project-32-64-glsl.spec.ts +++ b/test/modules/core/shaderlib/project/project-32-64-glsl.spec.ts @@ -65,8 +65,8 @@ void main() vec4 glPos = project_position_to_clipspace(uPos, uPos64Low, vec3(0, 0, 0)); outValue = glPos.xyz / glPos.w; outValue = vec3( - (1.0 + outValue.x) / 2.0 * project_uViewportSize.x, - (1.0 - outValue.y) / 2.0 * project_uViewportSize.y, + (1.0 + outValue.x) / 2.0 * project.viewportSize.x, + (1.0 - outValue.y) / 2.0 * project.viewportSize.y, outValue.z ); } diff --git a/test/modules/core/shaderlib/project/project-glsl.spec.ts b/test/modules/core/shaderlib/project/project-glsl.spec.ts index 2a8ee2fcf54..1c8f8529170 100644 --- a/test/modules/core/shaderlib/project/project-glsl.spec.ts +++ b/test/modules/core/shaderlib/project/project-glsl.spec.ts @@ -98,8 +98,8 @@ void main() vec4 glPos = project_common_position_to_clipspace(pos); outValue = glPos.xyz / glPos.w; outValue = vec3( - (1.0 + outValue.x) / 2.0 * project_uViewportSize.x, - (1.0 - outValue.y) / 2.0 * project_uViewportSize.y, + (1.0 + outValue.x) / 2.0 * project.viewportSize.x, + (1.0 - outValue.y) / 2.0 * project.viewportSize.y, outValue.z ); } From a01ad110cc84e1bcc234992707f2cb55b25e89b5 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 12:58:46 +0200 Subject: [PATCH 17/40] Update layers --- docs/developer-guide/custom-layers/subclassed-layers.md | 2 +- modules/geo-layers/src/mesh-layer/mesh-layer.ts | 3 +-- modules/layers/src/bitmap-layer/bitmap-layer-vertex.ts | 2 +- modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts | 2 +- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/developer-guide/custom-layers/subclassed-layers.md b/docs/developer-guide/custom-layers/subclassed-layers.md index 0e41e77b8d3..c904e67e510 100644 --- a/docs/developer-guide/custom-layers/subclassed-layers.md +++ b/docs/developer-guide/custom-layers/subclassed-layers.md @@ -225,7 +225,7 @@ void main(void) { /* replaced uniform 'radiusPixels' with 'instanceRadiusPixels' */ gl_Position.xy += project_pixel_size_to_clipspace(positions.xy * instanceRadiusPixels); - vec3 lightColor = lighting_getLightColor(instanceColors.rgb, project_uCameraPosition, position_commonspace.xyz, project_normal(instanceNormals)); + vec3 lightColor = lighting_getLightColor(instanceColors.rgb, project.cameraPosition, position_commonspace.xyz, project_normal(instanceNormals)); vColor = vec4(lightColor, instanceColors.a * opacity) / 255.0; diff --git a/modules/geo-layers/src/mesh-layer/mesh-layer.ts b/modules/geo-layers/src/mesh-layer/mesh-layer.ts index 0d7b52063c4..052de171dab 100644 --- a/modules/geo-layers/src/mesh-layer/mesh-layer.ts +++ b/modules/geo-layers/src/mesh-layer/mesh-layer.ts @@ -97,8 +97,7 @@ export default class MeshLayer extends } this.state.model.setUniforms({ // Needed for PBR (TODO: find better way to get it) - // eslint-disable-next-line camelcase - u_Camera: this.state.model.uniforms.project_uCameraPosition, + u_Camera: this.state.model.uniforms.cameraPosition, pickFeatureIds: Boolean(featureIds) }); diff --git a/modules/layers/src/bitmap-layer/bitmap-layer-vertex.ts b/modules/layers/src/bitmap-layer/bitmap-layer-vertex.ts index a8dca452354..1289adb3a3f 100644 --- a/modules/layers/src/bitmap-layer/bitmap-layer-vertex.ts +++ b/modules/layers/src/bitmap-layer/bitmap-layer-vertex.ts @@ -24,7 +24,7 @@ void main(void) { vTexCoord = texCoords; if (coordinateConversion < -0.5) { - vTexPos = geometry.position.xy + project_uCommonOrigin.xy; + vTexPos = geometry.position.xy + project.commonOrigin.xy; } else if (coordinateConversion > 0.5) { vTexPos = geometry.worldPosition.xy; } diff --git a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts index 5b5d8cf66d5..0570772cdb4 100644 --- a/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts +++ b/modules/mesh-layers/src/scenegraph-layer/scenegraph-layer.ts @@ -376,7 +376,7 @@ export default class ScenegraphLayer e sceneModelMatrix: worldMatrix, // Needed for PBR (TODO: find better way to get it) // eslint-disable-next-line camelcase - u_Camera: model.uniforms.project_uCameraPosition + u_Camera: model.uniforms.cameraPosition }); model.draw(renderPass); From 5f0cb39e8f914edcb406d6010a8be82314cd1db7 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 13:14:11 +0200 Subject: [PATCH 18/40] Migrate shader modules --- docs/api-reference/core/project.md | 2 +- docs/api-reference/core/project64.md | 2 +- .../core/src/effects/lighting/camera-light.ts | 4 +- modules/core/src/shaderlib/shadow/shadow.ts | 6 +-- .../extensions/src/brushing/shader-module.ts | 2 +- .../src/collision-filter/shader-module.ts | 2 +- .../src/fill-style/shader-module.ts | 2 +- .../extensions/src/terrain/shader-module.ts | 6 +-- .../project/viewport-uniforms.spec.ts | 47 +++++++++---------- 9 files changed, 35 insertions(+), 38 deletions(-) diff --git a/docs/api-reference/core/project.md b/docs/api-reference/core/project.md index a577862ebdb..12fa7fe486e 100644 --- a/docs/api-reference/core/project.md +++ b/docs/api-reference/core/project.md @@ -151,6 +151,6 @@ Returns a matrix that rotates any vector defined in the default common space to ## Remarks -* For consistent results, the screen space pixels are logical pixels, not device pixels, i.e. functions in the project module multiply `pixels` with `project_uDevicePixelRatio`. +* For consistent results, the screen space pixels are logical pixels, not device pixels, i.e. functions in the project module multiply `pixels` with `project.devicePixelRatio`. * The pixels offsets will be divided by the `w` coordinate of `gl_Position`. This is simply the GPUs standard treatment of any coordinate. This means that there will be more pixels closer to the camera and less pixels further away from the camer. Setting the `focalDistance` uniform controls this. * To avoid pixel sizes scaling with distance from camera, simply set `focalDistance` to 1 and multiply clipspace offset with `gl_Position.w` diff --git a/docs/api-reference/core/project64.md b/docs/api-reference/core/project64.md index cacac9427c9..b6db4da5e39 100644 --- a/docs/api-reference/core/project64.md +++ b/docs/api-reference/core/project64.md @@ -5,7 +5,7 @@ The `project64` shader module is an extension of the [project](./project.md) sha ## getUniforms -The uniforms needed by `project64` are extracted from the `project` module uniforms `project_uViewProjectionMatrix` and `project_uScale`. +The uniforms needed by `project64` are extracted from the `project` module uniforms `project.viewProjectionMatrix` and `project.scale`. ## GLSL Uniforms diff --git a/modules/core/src/effects/lighting/camera-light.ts b/modules/core/src/effects/lighting/camera-light.ts index 93018230172..06ec55086fd 100644 --- a/modules/core/src/effects/lighting/camera-light.ts +++ b/modules/core/src/effects/lighting/camera-light.ts @@ -8,7 +8,7 @@ export default class CameraLight extends PointLight { const {projectedLight} = this; const viewport = layer.context.viewport; const {coordinateSystem, coordinateOrigin, modelMatrix} = layer.props; - const {project_uCameraPosition} = getUniformsFromViewport({ + const {cameraPosition} = getUniformsFromViewport({ viewport, modelMatrix, coordinateSystem, @@ -16,7 +16,7 @@ export default class CameraLight extends PointLight { }); projectedLight.color = this.color; projectedLight.intensity = this.intensity; - projectedLight.position = project_uCameraPosition; + projectedLight.position = cameraPosition; return projectedLight; } } diff --git a/modules/core/src/shaderlib/shadow/shadow.ts b/modules/core/src/shaderlib/shadow/shadow.ts index c92710e4802..9cd98596edb 100644 --- a/modules/core/src/shaderlib/shadow/shadow.ts +++ b/modules/core/src/shaderlib/shadow/shadow.ts @@ -205,7 +205,7 @@ function createShadowUniforms( const center = getMemoizedViewportCenterPosition({ viewport: opts.viewport, - center: context.project_uCenter + center: context.center }); const projectCenters: NumericArray[] = []; @@ -221,8 +221,8 @@ function createShadowUniforms( .translate(new Vector3(opts.viewport.center).negate()); if ( - context.project_uCoordinateSystem === COORDINATE_SYSTEM.LNGLAT && - context.project_uProjectionMode === PROJECTION_MODE.WEB_MERCATOR + context.coordinateSystem === COORDINATE_SYSTEM.LNGLAT && + context.projectionMode === PROJECTION_MODE.WEB_MERCATOR ) { viewProjectionMatrices[i] = viewProjectionMatrixCentered; projectCenters[i] = center; diff --git a/modules/extensions/src/brushing/shader-module.ts b/modules/extensions/src/brushing/shader-module.ts index 1519bf13970..6c3e411a3db 100644 --- a/modules/extensions/src/brushing/shader-module.ts +++ b/modules/extensions/src/brushing/shader-module.ts @@ -51,7 +51,7 @@ const vs = glsl` } vec2 source_commonspace = project_position(position); vec2 target_commonspace = project_position(brushing_mousePos); - float distance = length((target_commonspace - source_commonspace) / project_uCommonUnitsPerMeter.xy); + float distance = length((target_commonspace - source_commonspace) / project.commonUnitsPerMeter.xy); return distance <= brushing_radius; } diff --git a/modules/extensions/src/collision-filter/shader-module.ts b/modules/extensions/src/collision-filter/shader-module.ts index 337c73a01b6..b70e2b4bfe2 100644 --- a/modules/extensions/src/collision-filter/shader-module.ts +++ b/modules/extensions/src/collision-filter/shader-module.ts @@ -36,7 +36,7 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) { // This reduces the flicker present when objects are shown/hidden const int N = 2; float accumulator = 0.0; - vec2 step = vec2(1.0 / project_uViewportSize); + vec2 step = vec2(1.0 / project.viewportSize); const float floatN = float(N); vec2 delta = -floatN * step; diff --git a/modules/extensions/src/fill-style/shader-module.ts b/modules/extensions/src/fill-style/shader-module.ts index f5298c9762b..6b6012c504b 100644 --- a/modules/extensions/src/fill-style/shader-module.ts +++ b/modules/extensions/src/fill-style/shader-module.ts @@ -102,7 +102,7 @@ function getPatternUniforms( } if ('viewport' in opts) { const {fillPatternMask = true, fillPatternEnabled = true} = opts; - const {project_uCommonOrigin: coordinateOriginCommon} = uniforms as ProjectUniforms; + const {commonOrigin: coordinateOriginCommon} = uniforms as ProjectUniforms; const coordinateOriginCommon64Low = [ fp64LowPart(coordinateOriginCommon[0]), diff --git a/modules/extensions/src/terrain/shader-module.ts b/modules/extensions/src/terrain/shader-module.ts index 2810b80c803..0adc82aa551 100644 --- a/modules/extensions/src/terrain/shader-module.ts +++ b/modules/extensions/src/terrain/shader-module.ts @@ -115,7 +115,7 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US useTerrainHeightMap, terrainSkipRender } = opts; - const {project_uCommonOrigin} = uniforms; + const {commonOrigin} = uniforms; let mode: number = terrainSkipRender ? TERRAIN_MODE.SKIP : TERRAIN_MODE.NONE; // height map if case USE_HEIGHT_MAP, terrain cover if USE_COVER, otherwise empty @@ -155,8 +155,8 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US // Convert bounds to the common space, as [minX, minY, width, height] terrain_bounds: bounds ? [ - bounds[0] - project_uCommonOrigin[0], - bounds[1] - project_uCommonOrigin[1], + bounds[0] - commonOrigin[0], + bounds[1] - commonOrigin[1], bounds[2] - bounds[0], bounds[3] - bounds[1] ] diff --git a/test/modules/core/shaderlib/project/viewport-uniforms.spec.ts b/test/modules/core/shaderlib/project/viewport-uniforms.spec.ts index 7709f8cbbaa..16166e07c6f 100644 --- a/test/modules/core/shaderlib/project/viewport-uniforms.spec.ts +++ b/test/modules/core/shaderlib/project/viewport-uniforms.spec.ts @@ -54,23 +54,23 @@ const TEST_VIEWPORTS = { const UNIFORMS = { // Projection mode values - project_uCoordinateSystem: Number, - project_uCenter: Array, + coordinateSystem: Number, + center: Array, // Screen size - project_uViewportSize: Array, - project_uDevicePixelRatio: Number, + viewportSize: Array, + devicePixelRatio: Number, // Distance at which screen pixels are projected - project_uFocalDistance: Number, - project_uCommonUnitsPerWorldUnit: Array, - project_uScale: Number, // This is the mercator scale (2 ** zoom) + focalDistance: Number, + commonUnitsPerWorldUnit: Array, + scale: Number, // This is the mercator scale (2 ** zoom) - project_uModelMatrix: Array, - project_uViewProjectionMatrix: Array, + modelMatrix: Array, + viewProjectionMatrix: Array, // This is for lighting calculations - project_uCameraPosition: Array + cameraPosition: Array }; // 64 bit support @@ -99,33 +99,32 @@ function getUniformsError(uniforms, formats) { test('project#getUniforms', t => { let uniforms = project.getUniforms({viewport: TEST_VIEWPORTS.map}); t.notOk(getUniformsError(uniforms, UNIFORMS), 'Uniforms validated'); - t.deepEqual(uniforms.project_uCenter, [0, 0, 0, 0], 'Returned zero projection center'); + t.deepEqual(uniforms.center, [0, 0, 0, 0], 'Returned zero projection center'); uniforms = project.getUniforms({ viewport: TEST_VIEWPORTS.map, coordinateSystem: COORDINATE_SYSTEM.CARTESIAN }); t.notOk(getUniformsError(uniforms, UNIFORMS), 'Uniforms validated'); - t.deepEqual(uniforms.project_uCenter, [0, 0, 0, 0], 'Returned zero projection center'); + t.deepEqual(uniforms.center, [0, 0, 0, 0], 'Returned zero projection center'); uniforms = project.getUniforms({viewport: TEST_VIEWPORTS.mapHighZoom}); t.notOk(getUniformsError(uniforms, UNIFORMS), 'Uniforms validated'); t.ok( - uniforms.project_uCenter.some(x => x), + uniforms.center.some(x => x), 'Returned non-trivial projection center' ); t.ok( - Math.abs(uniforms.project_uCenter[0]) < EPSILON && - Math.abs(uniforms.project_uCenter[1]) < EPSILON, + Math.abs(uniforms.center[0]) < EPSILON && Math.abs(uniforms.center[1]) < EPSILON, 'project center at center of clipspace' ); t.deepEqual( - uniforms.project_uCoordinateOrigin, + uniforms.coordinateOrigin, [-122.42694091796875, 37.75153732299805, 0], 'Returned shader coordinate origin' ); t.ok( - uniforms.project_uCenter.some(x => x), + uniforms.center.some(x => x), 'Returned non-trivial projection center' ); @@ -136,7 +135,7 @@ test('project#getUniforms', t => { }); t.notOk(getUniformsError(uniforms, UNIFORMS), 'Uniforms validated'); t.ok( - uniforms.project_uCenter.some(x => x), + uniforms.center.some(x => x), 'Returned non-trivial projection center' ); @@ -146,18 +145,16 @@ test('project#getUniforms', t => { }); t.notOk(getUniformsError(uniforms, UNIFORMS), 'Uniforms validated'); t.ok( - uniforms.project_uCenter.some(x => x), + uniforms.center.some(x => x), 'Returned non-trivial projection center' ); // CARTESIAN + WEB_MERCATOR_AUTO_OFFSET is rounded in the common space t.ok( - Math.abs(uniforms.project_uCenter[0]) < EPSILON * 10 && - Math.abs(uniforms.project_uCenter[1]) < EPSILON * 10, + Math.abs(uniforms.center[0]) < EPSILON * 10 && Math.abs(uniforms.center[1]) < EPSILON * 10, 'project center at center of clipspace' ); t.ok( - uniforms.project_uCommonUnitsPerWorldUnit[0] === 1 && - uniforms.project_uCommonUnitsPerWorldUnit[1] === 1, + uniforms.commonUnitsPerWorldUnit[0] === 1 && uniforms.commonUnitsPerWorldUnit[1] === 1, 'Returned correct distanceScales' ); @@ -167,12 +164,12 @@ test('project#getUniforms', t => { }); t.notOk(getUniformsError(uniforms, UNIFORMS), 'Uniforms validated'); t.deepEqual( - uniforms.project_uCoordinateOrigin, + uniforms.coordinateOrigin, [10.285714149475098, -3.1415927410125732, 0], 'Returned shader coordinate origin' ); t.ok( - uniforms.project_uCenter.some(x => x), + uniforms.center.some(x => x), 'Returned non-trivial projection center' ); From ca64fccb4d43d9d8d3b0eb1814a278b1211bf18e Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 13:14:59 +0200 Subject: [PATCH 19/40] Shadow spec --- test/modules/core/shaderlib/shadow/shadow.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/modules/core/shaderlib/shadow/shadow.spec.ts b/test/modules/core/shaderlib/shadow/shadow.spec.ts index e0b17f293cf..8c88c170469 100644 --- a/test/modules/core/shaderlib/shadow/shadow.spec.ts +++ b/test/modules/core/shaderlib/shadow/shadow.spec.ts @@ -191,8 +191,8 @@ test('shadow#getUniforms', t => { dummyShadowMaps: [true] }, { - project_uCenter: [0, 0, 0, 0], - project_uCoordinateSystem: COORDINATE_SYSTEM.CARTESIAN + center: [0, 0, 0, 0], + coordinateSystem: COORDINATE_SYSTEM.CARTESIAN } ); From 455736453f69e31c6776039ddeff9483c0a7517f Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 13:39:22 +0200 Subject: [PATCH 20/40] Lint --- modules/core/src/shaderlib/project/viewport-uniforms.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 71acda6253e..5473e5a6a8b 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -311,17 +311,17 @@ function calculateViewportUniforms({ pseudoMeters: Boolean(viewport._pseudoMeters), // Screen size - viewportSize: viewportSize, - devicePixelRatio: devicePixelRatio, + viewportSize, + devicePixelRatio, - focalDistance: focalDistance, + focalDistance, commonUnitsPerMeter: distanceScales.unitsPerMeter as Vec3, commonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, commonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, scale: viewport.scale, // This is the mercator scale (2 ** zoom) autoWrapLongitude: false, - viewProjectionMatrix: viewProjectionMatrix, + viewProjectionMatrix, modelMatrix: IDENTITY_MATRIX, // This is for lighting calculations From dd57f799e1fb1cb32f98f110791baa3f1542d020 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Thu, 11 Apr 2024 13:49:12 +0200 Subject: [PATCH 21/40] Fix ScreenGridLayer binding --- .../src/screen-grid-layer/screen-grid-cell-layer.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/aggregation-layers/src/screen-grid-layer/screen-grid-cell-layer.ts b/modules/aggregation-layers/src/screen-grid-layer/screen-grid-cell-layer.ts index afb29331e0a..d5cc9019fab 100644 --- a/modules/aggregation-layers/src/screen-grid-layer/screen-grid-cell-layer.ts +++ b/modules/aggregation-layers/src/screen-grid-layer/screen-grid-cell-layer.ts @@ -20,7 +20,15 @@ import {Texture} from '@luma.gl/core'; import {Model, Geometry} from '@luma.gl/engine'; -import {Layer, LayerProps, log, picking, UpdateParameters, DefaultProps} from '@deck.gl/core'; +import { + Layer, + LayerProps, + log, + project32, + picking, + UpdateParameters, + DefaultProps +} from '@deck.gl/core'; import {defaultColorRange, colorRangeToFlatArray} from '../utils/color-utils'; import vs from './screen-grid-layer-vertex.glsl'; import fs from './screen-grid-layer-fragment.glsl'; @@ -59,7 +67,7 @@ export default class ScreenGridCellLayer Date: Tue, 16 Apr 2024 14:19:22 +0200 Subject: [PATCH 22/40] Remove project32 hacks --- modules/core/src/lib/layer.ts | 2 +- modules/core/src/shaderlib/project/project.glsl.ts | 2 +- modules/core/src/shaderlib/project/project.ts | 2 +- modules/core/src/shaderlib/project32/project32.ts | 5 +---- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/modules/core/src/lib/layer.ts b/modules/core/src/lib/layer.ts index e221f60a122..abdc27fe024 100644 --- a/modules/core/src/lib/layer.ts +++ b/modules/core/src/lib/layer.ts @@ -1069,7 +1069,7 @@ export default abstract class Layer extends Component< this.setModuleParameters(moduleParameters); this.setShaderModuleProps({ picking: {isActive, isAttribute}, - project32: {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin} + project: {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin} }); } diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index c8b2a466706..1c29a1d72cc 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -36,7 +36,7 @@ ${COORDINATE_SYSTEM_GLSL_CONSTANTS} ${PROJECTION_MODE_GLSL_CONSTANTS} ${UNIT_GLSL_CONSTANTS} -uniform project32Uniforms { +uniform projectUniforms { bool autoWrapLongitude; int coordinateSystem; vec3 commonUnitsPerMeter; diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index f6f790b806c..2685c4b0ee9 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -59,4 +59,4 @@ export default { commonOrigin: 'vec3', pseudoMeters: 'f32' } -} as ShaderModule; +} as const satisfies ShaderModule; diff --git a/modules/core/src/shaderlib/project32/project32.ts b/modules/core/src/shaderlib/project32/project32.ts index 119bb768e89..57d97a8114f 100644 --- a/modules/core/src/shaderlib/project32/project32.ts +++ b/modules/core/src/shaderlib/project32/project32.ts @@ -47,8 +47,5 @@ vec4 project_position_to_clipspace( export default { name: 'project32', dependencies: [project], - vs, - getUniforms: project.getUniforms, - uniformTypes: project.uniformTypes, - defaultUniforms: project.defaultUniforms + vs } as ShaderModule; From fecbe18f018eaed5311ecbd65d1dcbce78b43ce3 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 10:40:16 +0200 Subject: [PATCH 23/40] Use varying to pass cameraPosition column fragment --- modules/layers/src/column-layer/column-layer-fragment.glsl.ts | 3 ++- modules/layers/src/column-layer/column-layer-vertex.glsl.ts | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/layers/src/column-layer/column-layer-fragment.glsl.ts b/modules/layers/src/column-layer/column-layer-fragment.glsl.ts index 507007ef8f9..227350863ab 100644 --- a/modules/layers/src/column-layer/column-layer-fragment.glsl.ts +++ b/modules/layers/src/column-layer/column-layer-fragment.glsl.ts @@ -30,6 +30,7 @@ out vec4 fragColor; in vec4 vColor; #ifdef FLAT_SHADING +in vec3 cameraPosition; in vec4 position_commonspace; #endif @@ -38,7 +39,7 @@ void main(void) { #ifdef FLAT_SHADING if (extruded && !isStroke && !bool(picking.isActive)) { vec3 normal = normalize(cross(dFdx(position_commonspace.xyz), dFdy(position_commonspace.xyz))); - fragColor.rgb = lighting_getLightColor(vColor.rgb, project.cameraPosition, position_commonspace.xyz, normal); + fragColor.rgb = lighting_getLightColor(vColor.rgb, cameraPosition, position_commonspace.xyz, normal); } #endif DECKGL_FILTER_COLOR(fragColor, geometry); diff --git a/modules/layers/src/column-layer/column-layer-vertex.glsl.ts b/modules/layers/src/column-layer/column-layer-vertex.glsl.ts index 460c122acee..552ca4b6049 100644 --- a/modules/layers/src/column-layer/column-layer-vertex.glsl.ts +++ b/modules/layers/src/column-layer/column-layer-vertex.glsl.ts @@ -54,6 +54,7 @@ uniform int widthUnits; // Result out vec4 vColor; #ifdef FLAT_SHADING +out vec3 cameraPosition; out vec4 position_commonspace; #endif @@ -107,6 +108,7 @@ void main(void) { // Light calculations if (extruded && !isStroke) { #ifdef FLAT_SHADING + cameraPosition = project.cameraPosition; position_commonspace = geometry.position; vColor = vec4(color.rgb, color.a * opacity); #else From 6706560d6f744343f2c597174902cfc86be30c73 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 12:08:15 +0200 Subject: [PATCH 24/40] Fix project tests --- .../project/project-glsl-test-utils.ts | 3 ++ .../shaderlib/project/project-glsl.spec.ts | 33 ++++++++++++++----- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/test/modules/core/shaderlib/project/project-glsl-test-utils.ts b/test/modules/core/shaderlib/project/project-glsl-test-utils.ts index a52e56303ab..547b9f5c8ae 100644 --- a/test/modules/core/shaderlib/project/project-glsl-test-utils.ts +++ b/test/modules/core/shaderlib/project/project-glsl-test-utils.ts @@ -30,10 +30,12 @@ export function getPixelOffset(p1, p2) { const OUT_BUFFER = device.createBuffer({byteLength: 4 * 16}); export async function runOnGPU({ + shaderInputProps, uniforms, varying, ...transformProps }: BufferTransformProps & { + shaderInputProps: Record>; uniforms: Record; varying: string; }): Promise { @@ -43,6 +45,7 @@ export async function runOnGPU({ varyings: [varying] }); transform.model.setUniforms(uniforms); + transform.model.shaderInputs.setProps(shaderInputProps); transform.run({ discard: true }); diff --git a/test/modules/core/shaderlib/project/project-glsl.spec.ts b/test/modules/core/shaderlib/project/project-glsl.spec.ts index 1c8f8529170..8d82f9f274a 100644 --- a/test/modules/core/shaderlib/project/project-glsl.spec.ts +++ b/test/modules/core/shaderlib/project/project-glsl.spec.ts @@ -26,6 +26,7 @@ import {fp64} from '@luma.gl/shadertools'; const {fp64LowPart} = fp64; import {getPixelOffset, runOnGPU, verifyGPUResult} from './project-glsl-test-utils'; +import {UniformValue} from '@luma.gl/shadertools/dist/lib/shader-module/shader-module'; const PIXEL_TOLERANCE = 1e-4; const TEST_VIEWPORT = new WebMercatorViewport({ @@ -105,7 +106,19 @@ void main() } ` }; -const TEST_CASES = [ + +type TestCase = { + title: string; + params: Record; + tests: { + name: string; + vs: string; + precision?: number; + input: Record; + output: any; + }[]; +}; +const TEST_CASES: TestCase[] = [ { title: 'LNGLAT mode', params: { @@ -328,8 +341,6 @@ test('project#vs', async t => { for (const testCase of TEST_CASES) { t.comment(testCase.title); - const uniforms = project.getUniforms(testCase.params); - for (const {name, vs, input, output, precision = 1e-7} of testCase.tests) { config.EPSILON = precision; let actual: NumericArray = await runOnGPU({ @@ -337,7 +348,8 @@ test('project#vs', async t => { varying: 'outValue', modules: [project], vertexCount: 1, - uniforms: {...uniforms, ...input} + shaderInputProps: {project: testCase.params}, + uniforms: input }); t.is(verifyGPUResult(actual, output), true, name); @@ -361,10 +373,12 @@ void main() { outValue = transform * uInput; } `; - const uniforms = project.getUniforms({ - viewport: TEST_VIEWPORT, - coordinateSystem: COORDINATE_SYSTEM.LNGLAT - }); + const shaderInputProps = { + project: { + viewport: TEST_VIEWPORT, + coordinateSystem: COORDINATE_SYSTEM.LNGLAT + } + }; const runTransform = async (up: NumericArray, v: NumericArray): Promise => { const result = await runOnGPU({ @@ -372,7 +386,8 @@ void main() { varying: 'outValue', modules: [project], vertexCount: 1, - uniforms: {...uniforms, uDirUp: up, uInput: v} + shaderInputProps, + uniforms: {uDirUp: up, uInput: v} }); return new Vector3(result.slice(0, 3)); }; From 233e1cf1940b9e78d2233909ccaa9c7ed67cfaa2 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 12:16:16 +0200 Subject: [PATCH 25/40] Fix transitions --- modules/core/src/shaderlib/index.ts | 2 +- .../core/src/transitions/gpu-interpolation-transition.ts | 6 +++++- modules/core/src/transitions/gpu-spring-transition.ts | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/modules/core/src/shaderlib/index.ts b/modules/core/src/shaderlib/index.ts index 06933b06bab..32c77b59905 100644 --- a/modules/core/src/shaderlib/index.ts +++ b/modules/core/src/shaderlib/index.ts @@ -26,7 +26,7 @@ import project32 from './project32/project32'; import shadow from './shadow/shadow'; import picking from './picking/picking'; -const DEFAULT_MODULES = [project]; +const DEFAULT_MODULES = []; const SHADER_HOOKS = [ 'vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)', diff --git a/modules/core/src/transitions/gpu-interpolation-transition.ts b/modules/core/src/transitions/gpu-interpolation-transition.ts index bdeffa30a98..6d870cc0db6 100644 --- a/modules/core/src/transitions/gpu-interpolation-transition.ts +++ b/modules/core/src/transitions/gpu-interpolation-transition.ts @@ -12,6 +12,7 @@ import {GPUTransitionBase} from './gpu-transition'; import type {InterpolationTransitionSettings} from '../lib/attribute/transition-settings'; import type {TypedArray} from '../types/types'; +import {project} from '../shaderlib'; export default class GPUInterpolationTransition extends GPUTransitionBase { type = 'interpolation'; @@ -129,6 +130,9 @@ function getTransform(device: Device, attribute: Attribute): BufferTransform { defines: { ATTRIBUTE_TYPE: attributeType }, - varyings: ['vCurrent'] + varyings: ['vCurrent'], + + // TODO investigate why this is needed + modules: [project] }); } diff --git a/modules/core/src/transitions/gpu-spring-transition.ts b/modules/core/src/transitions/gpu-spring-transition.ts index 825d48e89da..40d9e686e54 100644 --- a/modules/core/src/transitions/gpu-spring-transition.ts +++ b/modules/core/src/transitions/gpu-spring-transition.ts @@ -12,6 +12,7 @@ import {GPUTransitionBase} from './gpu-transition'; import type {SpringTransitionSettings} from '../lib/attribute/transition-settings'; import type {TypedArray} from '../types/types'; +import {project} from '../shaderlib'; export default class GPUSpringTransition extends GPUTransitionBase { type = 'spring'; @@ -177,7 +178,10 @@ function getTransform(device: Device, attribute: Attribute): BufferTransform { blendAlphaOperation: 'max', blendAlphaSrcFactor: 'one', blendAlphaDstFactor: 'one' - } + }, + + // TODO investigate why this is needed + modules: [project] }); } From c0387cdc1d64c853ee7fc61dc71dcd865d1e8714 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 12:37:01 +0200 Subject: [PATCH 26/40] Fix project-functions.spec --- test/modules/core/shaderlib/project/project-functions.spec.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/modules/core/shaderlib/project/project-functions.spec.ts b/test/modules/core/shaderlib/project/project-functions.spec.ts index 22cf552b5ac..bec8e85fe3d 100644 --- a/test/modules/core/shaderlib/project/project-functions.spec.ts +++ b/test/modules/core/shaderlib/project/project-functions.spec.ts @@ -170,16 +170,14 @@ void main() for (const {title, position, params} of TEST_CASES.filter( testCase => !testCase.params.fromCoordinateSystem )) { - const uniforms = project.getUniforms(params); - const cpuResult = projectPosition(position, params); const shaderResult = await runOnGPU({ vs, varying: 'outValue', modules: [project], vertexCount: 1, + shaderInputProps: {project: params}, uniforms: { - ...uniforms, uPos: position, uPos64Low: position.map(fp64LowPart) } From 68225221d604696272a0b7fb3872a6d63963121d Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 13:09:12 +0200 Subject: [PATCH 27/40] UBO for project64 --- modules/extensions/src/fp64/project64.glsl.ts | 16 ++++++++++++++-- modules/extensions/src/fp64/project64.ts | 17 +++++++++++++---- .../project/project-32-64-glsl.spec.ts | 11 ++++------- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/modules/extensions/src/fp64/project64.glsl.ts b/modules/extensions/src/fp64/project64.glsl.ts index e5dc331c308..037a95c5c1c 100644 --- a/modules/extensions/src/fp64/project64.glsl.ts +++ b/modules/extensions/src/fp64/project64.glsl.ts @@ -22,7 +22,10 @@ export default `\ const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097); -uniform vec2 project_uViewProjectionMatrixFP64[16]; +uniform project64Uniforms { + mat4 viewProjectionMatrix_x; + mat4 viewProjectionMatrix_y; +} project64; // longitude: lnglat_fp64.xy; latitude: lnglat_fp64.zw void mercatorProject_fp64(vec4 lnglat_fp64, out vec2 out_val[2]) { @@ -56,7 +59,16 @@ void project_position_fp64(vec2 position, vec2 position64xyLow, out vec2 out_val vec4 project_common_position_to_clipspace_fp64(vec2 vertex_pos_modelspace[4]) { vec2 vertex_pos_clipspace[4]; - mat4_vec4_mul_fp64(project_uViewProjectionMatrixFP64, vertex_pos_modelspace, + vec2 viewProjectionMatrixFP64[16]; + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + viewProjectionMatrixFP64[4 * i + j] = vec2( + project64.viewProjectionMatrix_x[i][j], + project64.viewProjectionMatrix_y[i][j] + ); + } + } + mat4_vec4_mul_fp64(viewProjectionMatrixFP64, vertex_pos_modelspace, vertex_pos_clipspace); return vec4( vertex_pos_clipspace[0].x, diff --git a/modules/extensions/src/fp64/project64.ts b/modules/extensions/src/fp64/project64.ts index 238f838cec0..6e3d9f14a19 100644 --- a/modules/extensions/src/fp64/project64.ts +++ b/modules/extensions/src/fp64/project64.ts @@ -35,7 +35,11 @@ export default { name: 'project64', dependencies: [project, fp64], vs: project64Shader, - getUniforms + getUniforms, + uniformTypes: { + viewProjectionMatrix_x: 'mat4x4', + viewProjectionMatrix_y: 'mat4x4' + } } as ShaderModule; // TODO - this module should calculate the 64 bit uniforms @@ -62,9 +66,14 @@ function calculateUniforms({ const glViewProjectionMatrixFP64 = fp64ifyMatrix4(viewProjectionMatrix); const scaleFP64 = fp64ify(scale); + const viewProjectionMatrix_x = new Float32Array(16); + const viewProjectionMatrix_y = new Float32Array(16); + for (let i = 0; i < 16; i++) { + viewProjectionMatrix_x[i] = glViewProjectionMatrixFP64[2 * i]; + viewProjectionMatrix_y[i] = glViewProjectionMatrixFP64[2 * i + 1]; + } return { - project_uViewProjectionMatrixFP64: glViewProjectionMatrixFP64, - project64_uViewProjectionMatrix: glViewProjectionMatrixFP64, - project64_uScale: scaleFP64 + viewProjectionMatrix_x, + viewProjectionMatrix_y }; } diff --git a/test/modules/core/shaderlib/project/project-32-64-glsl.spec.ts b/test/modules/core/shaderlib/project/project-32-64-glsl.spec.ts index 580f546e264..1892134e5b5 100644 --- a/test/modules/core/shaderlib/project/project-32-64-glsl.spec.ts +++ b/test/modules/core/shaderlib/project/project-32-64-glsl.spec.ts @@ -182,14 +182,10 @@ test('project32&64#vs', async t => { t.comment(`${testCase.title}: ${usefp64 ? 'fp64' : 'fp32'}`); - let uniforms = project.getUniforms(testCase.params); + let uniforms = {}; if (usefp64) { - uniforms = { - ...uniforms, - ...project64.getUniforms(testCase.params, uniforms), - // fp64arithmetic uniform - ONE: 1.0 - }; + // fp64arithmetic uniform + uniforms = {...uniforms, ONE: 1.0}; } for (const c of testCase.tests) { @@ -199,6 +195,7 @@ test('project32&64#vs', async t => { modules: usefp64 ? [project64] : [project32], varying: 'outValue', vertexCount: 1, + shaderInputProps: {project: testCase.params, project64: testCase.params}, uniforms: { ...uniforms, uPos: c.input, From a9a64ae64c07f4736fe12242d087b9df562f6014 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 13:14:15 +0200 Subject: [PATCH 28/40] Rename --- modules/extensions/src/fp64/project64.glsl.ts | 8 ++++---- modules/extensions/src/fp64/project64.ts | 17 +++++++++-------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/modules/extensions/src/fp64/project64.glsl.ts b/modules/extensions/src/fp64/project64.glsl.ts index 037a95c5c1c..3eee242349e 100644 --- a/modules/extensions/src/fp64/project64.glsl.ts +++ b/modules/extensions/src/fp64/project64.glsl.ts @@ -23,8 +23,8 @@ export default `\ const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097); uniform project64Uniforms { - mat4 viewProjectionMatrix_x; - mat4 viewProjectionMatrix_y; + mat4 viewProjectionMatrix; + mat4 viewProjectionMatrix64Low; } project64; // longitude: lnglat_fp64.xy; latitude: lnglat_fp64.zw @@ -63,8 +63,8 @@ vec4 project_common_position_to_clipspace_fp64(vec2 vertex_pos_modelspace[4]) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { viewProjectionMatrixFP64[4 * i + j] = vec2( - project64.viewProjectionMatrix_x[i][j], - project64.viewProjectionMatrix_y[i][j] + project64.viewProjectionMatrix[i][j], + project64.viewProjectionMatrix64Low[i][j] ); } } diff --git a/modules/extensions/src/fp64/project64.ts b/modules/extensions/src/fp64/project64.ts index 6e3d9f14a19..13352b9eaae 100644 --- a/modules/extensions/src/fp64/project64.ts +++ b/modules/extensions/src/fp64/project64.ts @@ -37,8 +37,9 @@ export default { vs: project64Shader, getUniforms, uniformTypes: { - viewProjectionMatrix_x: 'mat4x4', - viewProjectionMatrix_y: 'mat4x4' + // Cannot pass as vec2[16], so instead split into 2 mat4x4 + viewProjectionMatrix: 'mat4x4', + viewProjectionMatrix64Low: 'mat4x4' } } as ShaderModule; @@ -66,14 +67,14 @@ function calculateUniforms({ const glViewProjectionMatrixFP64 = fp64ifyMatrix4(viewProjectionMatrix); const scaleFP64 = fp64ify(scale); - const viewProjectionMatrix_x = new Float32Array(16); - const viewProjectionMatrix_y = new Float32Array(16); + const viewProjectionMatrix64High = new Float32Array(16); + const viewProjectionMatrix64Low = new Float32Array(16); for (let i = 0; i < 16; i++) { - viewProjectionMatrix_x[i] = glViewProjectionMatrixFP64[2 * i]; - viewProjectionMatrix_y[i] = glViewProjectionMatrixFP64[2 * i + 1]; + viewProjectionMatrix64High[i] = glViewProjectionMatrixFP64[2 * i]; + viewProjectionMatrix64Low[i] = glViewProjectionMatrixFP64[2 * i + 1]; } return { - viewProjectionMatrix_x, - viewProjectionMatrix_y + viewProjectionMatrix: viewProjectionMatrix64High, + viewProjectionMatrix64Low }; } From 0d90fc3a64ec53f62dc6091a454c132f1a1a6615 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 13:17:29 +0200 Subject: [PATCH 29/40] Fix test --- test/modules/extensions/fp64.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/modules/extensions/fp64.spec.ts b/test/modules/extensions/fp64.spec.ts index 930f331ee54..463aa43ed46 100644 --- a/test/modules/extensions/fp64.spec.ts +++ b/test/modules/extensions/fp64.spec.ts @@ -23,7 +23,8 @@ test('Fp64Extension', t => { }, onAfterUpdate: ({layer}) => { const {uniforms} = layer.state.model; - t.ok(uniforms.project_uViewProjectionMatrixFP64, 'has fp64 uniforms'); + t.ok(uniforms.viewProjectionMatrix, 'has fp64 uniforms'); + t.ok(uniforms.viewProjectionMatrix64Low, 'has fp64 uniforms'); } } ]; From ddb80add2d8462f336b5dc8c6fde09f1d3887048 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 13:23:27 +0200 Subject: [PATCH 30/40] Reinstate scale64 --- modules/extensions/src/fp64/project64.glsl.ts | 1 + modules/extensions/src/fp64/project64.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/extensions/src/fp64/project64.glsl.ts b/modules/extensions/src/fp64/project64.glsl.ts index 3eee242349e..b387256c39f 100644 --- a/modules/extensions/src/fp64/project64.glsl.ts +++ b/modules/extensions/src/fp64/project64.glsl.ts @@ -23,6 +23,7 @@ export default `\ const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097); uniform project64Uniforms { + vec2 scale; mat4 viewProjectionMatrix; mat4 viewProjectionMatrix64Low; } project64; diff --git a/modules/extensions/src/fp64/project64.ts b/modules/extensions/src/fp64/project64.ts index 13352b9eaae..65c3c4f5352 100644 --- a/modules/extensions/src/fp64/project64.ts +++ b/modules/extensions/src/fp64/project64.ts @@ -37,6 +37,7 @@ export default { vs: project64Shader, getUniforms, uniformTypes: { + scale: 'vec2', // Cannot pass as vec2[16], so instead split into 2 mat4x4 viewProjectionMatrix: 'mat4x4', viewProjectionMatrix64Low: 'mat4x4' @@ -65,8 +66,6 @@ function calculateUniforms({ scale: number; }) { const glViewProjectionMatrixFP64 = fp64ifyMatrix4(viewProjectionMatrix); - const scaleFP64 = fp64ify(scale); - const viewProjectionMatrix64High = new Float32Array(16); const viewProjectionMatrix64Low = new Float32Array(16); for (let i = 0; i < 16; i++) { @@ -74,6 +73,7 @@ function calculateUniforms({ viewProjectionMatrix64Low[i] = glViewProjectionMatrixFP64[2 * i + 1]; } return { + scale: fp64ify(scale), viewProjectionMatrix: viewProjectionMatrix64High, viewProjectionMatrix64Low }; From 361bfed1d675537c1af053e0ff8a5dcbcfe1ba78 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 13:47:34 +0200 Subject: [PATCH 31/40] Better imports --- modules/core/src/transitions/gpu-interpolation-transition.ts | 2 +- modules/core/src/transitions/gpu-spring-transition.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/core/src/transitions/gpu-interpolation-transition.ts b/modules/core/src/transitions/gpu-interpolation-transition.ts index 6d870cc0db6..ce9107d53e2 100644 --- a/modules/core/src/transitions/gpu-interpolation-transition.ts +++ b/modules/core/src/transitions/gpu-interpolation-transition.ts @@ -9,10 +9,10 @@ import { getFloat32VertexFormat } from './gpu-transition-utils'; import {GPUTransitionBase} from './gpu-transition'; +import project from '../shaderlib/project/project'; import type {InterpolationTransitionSettings} from '../lib/attribute/transition-settings'; import type {TypedArray} from '../types/types'; -import {project} from '../shaderlib'; export default class GPUInterpolationTransition extends GPUTransitionBase { type = 'interpolation'; diff --git a/modules/core/src/transitions/gpu-spring-transition.ts b/modules/core/src/transitions/gpu-spring-transition.ts index 40d9e686e54..e48002dcddb 100644 --- a/modules/core/src/transitions/gpu-spring-transition.ts +++ b/modules/core/src/transitions/gpu-spring-transition.ts @@ -9,10 +9,10 @@ import { } from './gpu-transition-utils'; import Attribute from '../lib/attribute/attribute'; import {GPUTransitionBase} from './gpu-transition'; +import project from '../shaderlib/project/project'; import type {SpringTransitionSettings} from '../lib/attribute/transition-settings'; import type {TypedArray} from '../types/types'; -import {project} from '../shaderlib'; export default class GPUSpringTransition extends GPUTransitionBase { type = 'spring'; From 7380682367fa5621da5c5974cd3643a0ce4587ca Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Fri, 19 Apr 2024 14:11:20 +0200 Subject: [PATCH 32/40] autoWrap rename --- modules/core/src/shaderlib/project/project.glsl.ts | 5 ++--- modules/core/src/shaderlib/project/project.ts | 2 +- modules/core/src/shaderlib/project/viewport-uniforms.ts | 6 +++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 1c29a1d72cc..47f91431641 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -37,12 +37,11 @@ ${PROJECTION_MODE_GLSL_CONSTANTS} ${UNIT_GLSL_CONSTANTS} uniform projectUniforms { - bool autoWrapLongitude; + bool wrapLongitude; int coordinateSystem; vec3 commonUnitsPerMeter; int projectionMode; float scale; - vec3 commonUnitsPerWorldUnit; vec3 commonUnitsPerWorldUnit2; vec4 center; @@ -168,7 +167,7 @@ vec4 project_offset_(vec4 offset) { // vec2 project_mercator_(vec2 lnglat) { float x = lnglat.x; - if (project.autoWrapLongitude) { + if (project.wrapLongitude) { x = mod(x + 180., 360.0) - 180.; } float y = clamp(lnglat.y, -89.9, 89.9); diff --git a/modules/core/src/shaderlib/project/project.ts b/modules/core/src/shaderlib/project/project.ts index 2685c4b0ee9..ba85e136ee5 100644 --- a/modules/core/src/shaderlib/project/project.ts +++ b/modules/core/src/shaderlib/project/project.ts @@ -40,7 +40,7 @@ export default { vs: projectShader, getUniforms, uniformTypes: { - autoWrapLongitude: 'f32', + wrapLongitude: 'f32', coordinateSystem: 'i32', commonUnitsPerMeter: 'vec3', projectionMode: 'i32', diff --git a/modules/core/src/shaderlib/project/viewport-uniforms.ts b/modules/core/src/shaderlib/project/viewport-uniforms.ts index 5473e5a6a8b..b97ef1c4ffb 100644 --- a/modules/core/src/shaderlib/project/viewport-uniforms.ts +++ b/modules/core/src/shaderlib/project/viewport-uniforms.ts @@ -207,7 +207,7 @@ export type ProjectUniforms = { commonUnitsPerWorldUnit2: Vec3; /** 2^zoom */ scale: number; - autoWrapLongitude: boolean; + wrapLongitude: boolean; viewProjectionMatrix: NumericArray; modelMatrix: NumericArray; @@ -256,7 +256,7 @@ export function getUniformsFromViewport({ coordinateOrigin }); - uniforms.autoWrapLongitude = autoWrapLongitude; + uniforms.wrapLongitude = autoWrapLongitude; uniforms.modelMatrix = modelMatrix || IDENTITY_MATRIX; return uniforms; @@ -319,7 +319,7 @@ function calculateViewportUniforms({ commonUnitsPerWorldUnit: distanceScales.unitsPerMeter as Vec3, commonUnitsPerWorldUnit2: DEFAULT_PIXELS_PER_UNIT2, scale: viewport.scale, // This is the mercator scale (2 ** zoom) - autoWrapLongitude: false, + wrapLongitude: false, viewProjectionMatrix, modelMatrix: IDENTITY_MATRIX, From 44e746473ef999303dd0e878e56ab24012e63f17 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 30 Apr 2024 12:54:26 +0200 Subject: [PATCH 33/40] Bump to luma 9.0.12 --- modules/aggregation-layers/package.json | 4 +- modules/arcgis/package.json | 2 +- modules/carto/package.json | 2 +- 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, 57 insertions(+), 57 deletions(-) diff --git a/modules/aggregation-layers/package.json b/modules/aggregation-layers/package.json index 4a95828281d..1c8a8b19743 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.11", - "@luma.gl/shadertools": "^9.0.11", + "@luma.gl/constants": "^9.0.12", + "@luma.gl/shadertools": "^9.0.12", "@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 42c16df5896..11b6365b8b7 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.11", + "@luma.gl/constants": "^9.0.12", "esri-loader": "^3.7.0" }, "peerDependencies": { diff --git a/modules/carto/package.json b/modules/carto/package.json index 44316a44b32..218339383ad 100644 --- a/modules/carto/package.json +++ b/modules/carto/package.json @@ -47,7 +47,7 @@ "@loaders.gl/mvt": "^4.2.0", "@loaders.gl/schema": "^4.2.0", "@loaders.gl/tiles": "^4.2.0", - "@luma.gl/constants": "^9.0.11", + "@luma.gl/constants": "^9.0.12", "@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 4c3f1cd2d4a..9c7ec0e50a0 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.11", - "@luma.gl/core": "^9.0.11", - "@luma.gl/engine": "^9.0.11", - "@luma.gl/shadertools": "^9.0.11", - "@luma.gl/webgl": "^9.0.11", + "@luma.gl/constants": "^9.0.12", + "@luma.gl/core": "^9.0.12", + "@luma.gl/engine": "^9.0.12", + "@luma.gl/shadertools": "^9.0.12", + "@luma.gl/webgl": "^9.0.12", "@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 f25cd2476c9..58581a83f07 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.11", - "@luma.gl/shadertools": "^9.0.11", + "@luma.gl/constants": "^9.0.12", + "@luma.gl/shadertools": "^9.0.12", "@math.gl/core": "^4.0.0" }, "peerDependencies": { diff --git a/modules/geo-layers/package.json b/modules/geo-layers/package.json index 90bbaadd8d4..52306b8d671 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.11", - "@luma.gl/shadertools": "^9.0.11", + "@luma.gl/gltf": "^9.0.12", + "@luma.gl/shadertools": "^9.0.12", "@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 863d2110473..9a95ceb86ef 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.11", + "@luma.gl/constants": "^9.0.12", "@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 67136e08696..dd59245b637 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.11", + "@luma.gl/core": "^9.0.12", "d3-dsv": "^1.0.8", "mapbox-gl": "^1.13.2" }, diff --git a/modules/main/package.json b/modules/main/package.json index f621e7425ca..36f6bf1c6ea 100644 --- a/modules/main/package.json +++ b/modules/main/package.json @@ -37,8 +37,8 @@ }, "dependencies": { "@loaders.gl/core": "^4.2.0", - "@luma.gl/core": "^9.0.9", - "@luma.gl/engine": "^9.0.9", + "@luma.gl/core": "^9.0.12", + "@luma.gl/engine": "^9.0.12", "@deck.gl/aggregation-layers": "9.0.0-beta.10", "@deck.gl/arcgis": "9.0.0-beta.10", "@deck.gl/carto": "9.0.0-beta.10", diff --git a/modules/mapbox/package.json b/modules/mapbox/package.json index ceb13de1203..0b1b2018d17 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.11", + "@luma.gl/constants": "^9.0.12", "@math.gl/web-mercator": "^4.0.0" }, "peerDependencies": { diff --git a/modules/mesh-layers/package.json b/modules/mesh-layers/package.json index 6887516d0a8..a3f175a5094 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.11", - "@luma.gl/shadertools": "^9.0.11" + "@luma.gl/gltf": "^9.0.12", + "@luma.gl/shadertools": "^9.0.12" }, "peerDependencies": { "@deck.gl/core": "^9.0.0-beta", diff --git a/modules/test-utils/package.json b/modules/test-utils/package.json index c44ec2e3097..78640b8a2ea 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.11" + "@luma.gl/test-utils": "^9.0.12" }, "peerDependencies": { "@deck.gl/core": "^9.0.0-beta", diff --git a/package.json b/package.json index 22204d61c5e..10a8be7ce6e 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "devDependencies": { "@loaders.gl/csv": "^4.2.0", "@loaders.gl/polyfills": "^4.2.0", - "@luma.gl/webgpu": "^9.0.11", + "@luma.gl/webgpu": "^9.0.12", "@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 6b5ef79bb1f..b15d217ddda 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2587,15 +2587,15 @@ jszip "^3.1.5" md5 "^2.3.0" -"@luma.gl/constants@9.0.11", "@luma.gl/constants@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@luma.gl/constants/-/constants-9.0.11.tgz#652da5d5dfe870ca6972b6cae55b679490692dd3" - integrity sha512-LRsGHzjz6j035HA2OeAuOwwkrk7ymc5SFfHGKn+G96IRRtqWZ/G5aCVRT/Wlako/cvAKfG7yTrhe0aL2o36KUw== +"@luma.gl/constants@9.0.12", "@luma.gl/constants@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@luma.gl/constants/-/constants-9.0.12.tgz#627aa743e809a0f21ed28e4fb3119c69d67e7207" + integrity sha512-/J6Z1uQDiEjp9t+5ijHE2wB+eegr2zBLhEnyMx8Fh4FUFELFdK9gaJVpv0u2xzZGyAhCy6GrgqOBVi0agxtF1g== -"@luma.gl/core@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@luma.gl/core/-/core-9.0.11.tgz#a4f986d857730597da918cd267a3735db31cb385" - integrity sha512-oSK/z4tkLlM7wZw5LLxJDr7zcpZHIcg71NBmMgcDx2IEisJth4bPT7GA1vs6r5Snxc+CUiXvdnggeS40ZKLV3A== +"@luma.gl/core@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@luma.gl/core/-/core-9.0.12.tgz#959e0f00ae8dce44cd236f222252e446e6e80b16" + integrity sha512-hYQRZvY36mo/sAY4UT4nrgBM/1ElNM9RUQbUCujCb/kwSEj5Fsgd0CwRKlx6I3EF3SplnuE7s8bapQDauaMOyQ== dependencies: "@math.gl/types" "^4.0.0" "@probe.gl/env" "^4.0.2" @@ -2603,53 +2603,53 @@ "@probe.gl/stats" "^4.0.2" "@types/offscreencanvas" "^2019.6.4" -"@luma.gl/engine@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@luma.gl/engine/-/engine-9.0.11.tgz#ac3dcf11cbbcae22befd555b11088e6734da1f6d" - integrity sha512-YDbEBt1ach55TnngYTH0+aIsLQEhKUtMpvOpGaoZ4PPGlRPHhxVRBZQctNGY0CqvgFsI/VGMDSSYmBsrJ8w7GQ== +"@luma.gl/engine@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@luma.gl/engine/-/engine-9.0.12.tgz#d37bc953929a63665f29ac2b9bea787b6f3b38d7" + integrity sha512-IkM71XZMFxXqoKvniUbjbs1aSqdxrAYPYFbJRdskgP4P3UQgJN4t4zyKr+6NeDFULlTUVtllrP7AKrxHNeIXUA== dependencies: - "@luma.gl/shadertools" "9.0.11" + "@luma.gl/shadertools" "9.0.12" "@math.gl/core" "^4.0.0" "@probe.gl/log" "^4.0.2" "@probe.gl/stats" "^4.0.2" -"@luma.gl/gltf@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@luma.gl/gltf/-/gltf-9.0.11.tgz#f04dcde3cc9e00ca36cc5766998972663eb9f35b" - integrity sha512-3Y/iyNblYR6JZKihm8XLoAAehB3MYL0dujbmUUuAtyOn9WJMngtMHIMjw75DSpse7mIqhJLRZph76nR9FaxpGQ== +"@luma.gl/gltf@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@luma.gl/gltf/-/gltf-9.0.12.tgz#2c85b4f2bc40836fc506f78d1a4f709d0aaa6fea" + integrity sha512-ae1HGkgAcMF0WbIbpXX/AaSgdmjRfbJ33llSf0JmXfsi3u6EUBGE4kHScibfcJdHkY0VDRVt5M7bIxlYuYTZfQ== dependencies: "@loaders.gl/textures" "^4.2.0" - "@luma.gl/shadertools" "9.0.11" + "@luma.gl/shadertools" "9.0.12" "@math.gl/core" "^4.0.0" -"@luma.gl/shadertools@9.0.11", "@luma.gl/shadertools@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@luma.gl/shadertools/-/shadertools-9.0.11.tgz#00ea4b554273321cae9c18c060f42342652a833c" - integrity sha512-MSSmvyQ+hwCEHlw6z5O2bHNQJt4y6RHRaegMDaYPt8z9r4Pzphlzyrl1n+HxKWVfOj2mV/vvyPTJtwY90iBHIA== +"@luma.gl/shadertools@9.0.12", "@luma.gl/shadertools@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@luma.gl/shadertools/-/shadertools-9.0.12.tgz#2dfa5035defa09e7d25e5c1007deb773a5acc060" + integrity sha512-HIlZst2Zx4UydE/uJkQyR2mbPWvzAe0lrUVpIyH19lO5JgGqP2zOfnH+oCjZatt+n/HWhuZYpm7zNegfYYcJCg== dependencies: "@math.gl/core" "^4.0.0" "@math.gl/types" "^4.0.0" -"@luma.gl/test-utils@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@luma.gl/test-utils/-/test-utils-9.0.11.tgz#dac11239434866d8df231174a8ad5509259d3049" - integrity sha512-0FqZAbtGZUbSNdtzto7Btk7a3II2k0GZSvtLfgxAQj9EhvFHhIzHJCf63VU9HcKPu3Rra7u0Gj0Wotbx+vDsLw== +"@luma.gl/test-utils@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@luma.gl/test-utils/-/test-utils-9.0.12.tgz#2e2aa39add7bbab772c3f2552dd9148f3560d7b4" + integrity sha512-UcCjpm8E33juucVjgFFyTBWJJqVyTl536/Y7DyzbhbjKUl60FoJDW/SH0170WH3NJVHxxXkEFE3PWgahWl/KZQ== dependencies: "@probe.gl/env" "^4.0.2" "@probe.gl/stats" "^4.0.2" -"@luma.gl/webgl@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@luma.gl/webgl/-/webgl-9.0.11.tgz#3fb0ff337c2e267a8f48c2d9c7368e664c9e3f39" - integrity sha512-mWgUzsqjOtdZBKLex0taeRpwwp7ZovHrNhoUccAsNG9WerY3VHGRp1Rx4fn6qIG1QCsyyFEl1c8zlrnzK7axrQ== +"@luma.gl/webgl@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@luma.gl/webgl/-/webgl-9.0.12.tgz#90b46373b4492280b158220239d8b48b2d562fce" + integrity sha512-k3+EEAsQggzPYFMvqJjwM2+S4Vnwyn7lQCUQn6/RCiiEi+G12rxtQmzDYAoI5pMwYhMiDd7mnJ98yfAhMnEdFw== dependencies: - "@luma.gl/constants" "9.0.11" + "@luma.gl/constants" "9.0.12" "@probe.gl/env" "^4.0.2" -"@luma.gl/webgpu@^9.0.11": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@luma.gl/webgpu/-/webgpu-9.0.11.tgz#092e67fc7c985482116dee62bf488a35d568ed56" - integrity sha512-KwN4z32tzXJyEJ8tpm0r0Omj4TMAIZWSEimLm0uCjVbmP52qkryYcGspbvHZntSLxXgtpQ4vdJ4u4uoWMtDJFQ== +"@luma.gl/webgpu@^9.0.12": + version "9.0.12" + resolved "https://registry.yarnpkg.com/@luma.gl/webgpu/-/webgpu-9.0.12.tgz#6394de890fe5d7ff922314e2fa9af4be8a47a5ed" + integrity sha512-OKVNQMWSTPHw1GKs5Wh7Rz6bJGEUMypjc92B2IT0dxXfPDbIm4Kuzwrnvml6UnVQkacpUa4+NHvd62XOKeNqIA== dependencies: "@probe.gl/env" "^4.0.2" "@webgpu/types" "^0.1.34" From f1b53e29964eaed7dbdd4e84ca3035d5c13e7fbb Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 30 Apr 2024 15:18:47 +0200 Subject: [PATCH 34/40] Hack in project64 matrix to test --- modules/core/src/lib/layer.ts | 3 +- .../src/shaderlib/project/project.glsl.ts | 10 ++++- modules/extensions/src/fp64/project64.ts | 40 ++++++++++++++++--- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/modules/core/src/lib/layer.ts b/modules/core/src/lib/layer.ts index 125bc6346a7..c1d9502799c 100644 --- a/modules/core/src/lib/layer.ts +++ b/modules/core/src/lib/layer.ts @@ -1069,7 +1069,8 @@ export default abstract class Layer extends Component< this.setModuleParameters(moduleParameters); this.setShaderModuleProps({ picking: {isActive, isAttribute}, - project: {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin} + project: {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin}, + project64: {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin} }); } diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 47f91431641..07942481d2e 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -56,6 +56,11 @@ uniform projectUniforms { bool pseudoMeters; } project; +uniform project64Uniforms { + vec2 scale; + mat4 viewProjectionMatrix; + mat4 viewProjectionMatrix64Low; +} project64; const float TILE_SIZE = 512.0; @@ -270,7 +275,10 @@ vec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatr // Uses project.viewProjectionMatrix // vec4 project_common_position_to_clipspace(vec4 position) { - return project_common_position_to_clipspace(position, project.viewProjectionMatrix, project.center); + // float test = 1.0; + // float test = project64.scale.x; // <-- works! + float test = project64.viewProjectionMatrix[0][0]; // <-- works! + return project_common_position_to_clipspace(position, project64.viewProjectionMatrix, project.center); } // Returns a clip space offset that corresponds to a given number of screen pixels diff --git a/modules/extensions/src/fp64/project64.ts b/modules/extensions/src/fp64/project64.ts index 65c3c4f5352..e2ac91c9a43 100644 --- a/modules/extensions/src/fp64/project64.ts +++ b/modules/extensions/src/fp64/project64.ts @@ -31,10 +31,34 @@ type Project64ModuleSettings = { viewport: Viewport; }; +const vs = ` +vec4 project_position_to_clipspace( + vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition +) { + vec3 projectedPosition = project_position(position, position64Low); + mat3 rotation; + if (project_needs_rotation(projectedPosition, rotation)) { + // offset is specified as ENU + // when in globe projection, rotate offset so that the ground alighs with the surface of the globe + offset = rotation * offset; + } + commonPosition = vec4(projectedPosition + offset, 1.0); + return project_common_position_to_clipspace(commonPosition); +} + +vec4 project_position_to_clipspace( + vec3 position, vec3 position64Low, vec3 offset +) { + vec4 commonPosition; + return project_position_to_clipspace(position, position64Low, offset, commonPosition); +} +`; + export default { name: 'project64', dependencies: [project, fp64], - vs: project64Shader, + // vs: project64Shader, + vs, getUniforms, uniformTypes: { scale: 'vec2', @@ -68,13 +92,17 @@ function calculateUniforms({ const glViewProjectionMatrixFP64 = fp64ifyMatrix4(viewProjectionMatrix); const viewProjectionMatrix64High = new Float32Array(16); const viewProjectionMatrix64Low = new Float32Array(16); - for (let i = 0; i < 16; i++) { - viewProjectionMatrix64High[i] = glViewProjectionMatrixFP64[2 * i]; - viewProjectionMatrix64Low[i] = glViewProjectionMatrixFP64[2 * i + 1]; + for (let i = 0; i < 4; i++) { + for (let j = 0; j < 4; j++) { + const from = 4 * i + j; + const to = 4 * j + i; + viewProjectionMatrix64High[to] = glViewProjectionMatrixFP64[2 * from]; + viewProjectionMatrix64Low[to] = glViewProjectionMatrixFP64[2 * from + 1]; + } } return { scale: fp64ify(scale), - viewProjectionMatrix: viewProjectionMatrix64High, - viewProjectionMatrix64Low + viewProjectionMatrix: [...viewProjectionMatrix64High], + viewProjectionMatrix64Low: [...viewProjectionMatrix64Low] }; } From 28addcf4ff476e594f754b9e1b226e769976a684 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 30 Apr 2024 15:24:59 +0200 Subject: [PATCH 35/40] Tidy --- .../src/shaderlib/project/project.glsl.ts | 11 +------- modules/extensions/src/fp64/project64.ts | 28 ++----------------- 2 files changed, 3 insertions(+), 36 deletions(-) diff --git a/modules/core/src/shaderlib/project/project.glsl.ts b/modules/core/src/shaderlib/project/project.glsl.ts index 07942481d2e..08101286032 100644 --- a/modules/core/src/shaderlib/project/project.glsl.ts +++ b/modules/core/src/shaderlib/project/project.glsl.ts @@ -56,12 +56,6 @@ uniform projectUniforms { bool pseudoMeters; } project; -uniform project64Uniforms { - vec2 scale; - mat4 viewProjectionMatrix; - mat4 viewProjectionMatrix64Low; -} project64; - const float TILE_SIZE = 512.0; const float PI = 3.1415926536; @@ -275,10 +269,7 @@ vec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatr // Uses project.viewProjectionMatrix // vec4 project_common_position_to_clipspace(vec4 position) { - // float test = 1.0; - // float test = project64.scale.x; // <-- works! - float test = project64.viewProjectionMatrix[0][0]; // <-- works! - return project_common_position_to_clipspace(position, project64.viewProjectionMatrix, project.center); + return project_common_position_to_clipspace(position, project.viewProjectionMatrix, project.center); } // Returns a clip space offset that corresponds to a given number of screen pixels diff --git a/modules/extensions/src/fp64/project64.ts b/modules/extensions/src/fp64/project64.ts index e2ac91c9a43..e0cc886443e 100644 --- a/modules/extensions/src/fp64/project64.ts +++ b/modules/extensions/src/fp64/project64.ts @@ -31,34 +31,10 @@ type Project64ModuleSettings = { viewport: Viewport; }; -const vs = ` -vec4 project_position_to_clipspace( - vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition -) { - vec3 projectedPosition = project_position(position, position64Low); - mat3 rotation; - if (project_needs_rotation(projectedPosition, rotation)) { - // offset is specified as ENU - // when in globe projection, rotate offset so that the ground alighs with the surface of the globe - offset = rotation * offset; - } - commonPosition = vec4(projectedPosition + offset, 1.0); - return project_common_position_to_clipspace(commonPosition); -} - -vec4 project_position_to_clipspace( - vec3 position, vec3 position64Low, vec3 offset -) { - vec4 commonPosition; - return project_position_to_clipspace(position, position64Low, offset, commonPosition); -} -`; - export default { name: 'project64', dependencies: [project, fp64], - // vs: project64Shader, - vs, + vs: project64Shader, getUniforms, uniformTypes: { scale: 'vec2', @@ -95,7 +71,7 @@ function calculateUniforms({ for (let i = 0; i < 4; i++) { for (let j = 0; j < 4; j++) { const from = 4 * i + j; - const to = 4 * j + i; + const to = 4 * i + j; viewProjectionMatrix64High[to] = glViewProjectionMatrixFP64[2 * from]; viewProjectionMatrix64Low[to] = glViewProjectionMatrixFP64[2 * from + 1]; } From a4b45c10135a35f9291c89ce491aaab89e947481 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 30 Apr 2024 15:35:30 +0200 Subject: [PATCH 36/40] Match order --- modules/extensions/src/fp64/project64.glsl.ts | 4 ++-- modules/extensions/src/fp64/project64.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/extensions/src/fp64/project64.glsl.ts b/modules/extensions/src/fp64/project64.glsl.ts index b387256c39f..5dcca1de299 100644 --- a/modules/extensions/src/fp64/project64.glsl.ts +++ b/modules/extensions/src/fp64/project64.glsl.ts @@ -64,8 +64,8 @@ vec4 project_common_position_to_clipspace_fp64(vec2 vertex_pos_modelspace[4]) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { viewProjectionMatrixFP64[4 * i + j] = vec2( - project64.viewProjectionMatrix[i][j], - project64.viewProjectionMatrix64Low[i][j] + project64.viewProjectionMatrix[j][i], + project64.viewProjectionMatrix64Low[j][i] ); } } diff --git a/modules/extensions/src/fp64/project64.ts b/modules/extensions/src/fp64/project64.ts index e0cc886443e..ae44356bb44 100644 --- a/modules/extensions/src/fp64/project64.ts +++ b/modules/extensions/src/fp64/project64.ts @@ -70,8 +70,9 @@ function calculateUniforms({ const viewProjectionMatrix64Low = new Float32Array(16); for (let i = 0; i < 4; i++) { for (let j = 0; j < 4; j++) { + // Match order used in project.viewProjectionMatrix const from = 4 * i + j; - const to = 4 * i + j; + const to = 4 * j + i; viewProjectionMatrix64High[to] = glViewProjectionMatrixFP64[2 * from]; viewProjectionMatrix64Low[to] = glViewProjectionMatrixFP64[2 * from + 1]; } From af0413098c8f9ff9ff633e413d04371ded5c284c Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 30 Apr 2024 15:50:37 +0200 Subject: [PATCH 37/40] Add geometry as default module --- modules/core/src/shaderlib/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/core/src/shaderlib/index.ts b/modules/core/src/shaderlib/index.ts index 32c77b59905..4569388156e 100644 --- a/modules/core/src/shaderlib/index.ts +++ b/modules/core/src/shaderlib/index.ts @@ -21,12 +21,13 @@ import {ShaderAssembler} from '@luma.gl/shadertools'; import {gouraudLighting, phongLighting} from '@luma.gl/shadertools'; +import geometry from './misc/geometry'; import project from './project/project'; import project32 from './project32/project32'; import shadow from './shadow/shadow'; import picking from './picking/picking'; -const DEFAULT_MODULES = []; +const DEFAULT_MODULES = [geometry]; const SHADER_HOOKS = [ 'vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)', From ae4edea472910bb6d7623c440ee83e555080729f Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 30 Apr 2024 18:53:44 +0200 Subject: [PATCH 38/40] Pass modelMatrix to project --- modules/core/src/lib/layer.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/core/src/lib/layer.ts b/modules/core/src/lib/layer.ts index c1d9502799c..39bf4868195 100644 --- a/modules/core/src/lib/layer.ts +++ b/modules/core/src/lib/layer.ts @@ -1066,11 +1066,12 @@ export default abstract class Layer extends Component< if (moduleParameters) { const {isActive, isAttribute} = moduleParameters.picking; const {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin} = moduleParameters; + const {modelMatrix} = this.props; this.setModuleParameters(moduleParameters); this.setShaderModuleProps({ picking: {isActive, isAttribute}, - project: {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin}, - project64: {viewport, devicePixelRatio, coordinateSystem, coordinateOrigin} + project: {viewport, devicePixelRatio, modelMatrix, coordinateSystem, coordinateOrigin}, + project64: {viewport} }); } From f3f62b9cc5c5d60a7c5e3514c6decb00d3fadeff Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 7 May 2024 11:38:06 +0200 Subject: [PATCH 39/40] Set shader module props for fp64 in extension --- modules/core/src/lib/layer.ts | 3 +-- modules/extensions/src/fp64/fp64-extension.ts | 8 ++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/core/src/lib/layer.ts b/modules/core/src/lib/layer.ts index 1c8755ce6f7..f86e0e3af85 100644 --- a/modules/core/src/lib/layer.ts +++ b/modules/core/src/lib/layer.ts @@ -1070,8 +1070,7 @@ export default abstract class Layer extends Component< this.setModuleParameters(moduleParameters); this.setShaderModuleProps({ picking: {isActive, isAttribute}, - project: {viewport, devicePixelRatio, modelMatrix, coordinateSystem, coordinateOrigin}, - project64: {viewport} + project: {viewport, devicePixelRatio, modelMatrix, coordinateSystem, coordinateOrigin} }); } diff --git a/modules/extensions/src/fp64/fp64-extension.ts b/modules/extensions/src/fp64/fp64-extension.ts index 928524cc154..9912758d9dd 100644 --- a/modules/extensions/src/fp64/fp64-extension.ts +++ b/modules/extensions/src/fp64/fp64-extension.ts @@ -40,4 +40,12 @@ export default class Fp64Extension extends LayerExtension { modules: [project64] }; } + + draw(this: Layer, params: any, extension: this): void { + const {moduleParameters} = params; + if (moduleParameters) { + const {viewport} = moduleParameters; + this.setShaderModuleProps({project64: {viewport}}); + } + } } From dac757dd844f9bcf9590ee65c684ddbcd5b01970 Mon Sep 17 00:00:00 2001 From: Felix Palmer Date: Tue, 7 May 2024 12:07:39 +0200 Subject: [PATCH 40/40] Remove project module hacks in transitions --- .../core/src/transitions/gpu-interpolation-transition.ts | 2 -- modules/core/src/transitions/gpu-spring-transition.ts | 6 +----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/modules/core/src/transitions/gpu-interpolation-transition.ts b/modules/core/src/transitions/gpu-interpolation-transition.ts index 800cfd71395..23b7ed10ab8 100644 --- a/modules/core/src/transitions/gpu-interpolation-transition.ts +++ b/modules/core/src/transitions/gpu-interpolation-transition.ts @@ -11,7 +11,6 @@ import { getFloat32VertexFormat } from './gpu-transition-utils'; import {GPUTransitionBase} from './gpu-transition'; -import project from '../shaderlib/project/project'; import type {InterpolationTransitionSettings} from '../lib/attribute/transition-settings'; import type {TypedArray} from '../types/types'; @@ -207,7 +206,6 @@ function getTransform(device: Device, attribute: Attribute): BufferTransform { varyings: ['vCurrent'], // TODO investigate why this is needed - modules: [project], disableWarnings: true }); } diff --git a/modules/core/src/transitions/gpu-spring-transition.ts b/modules/core/src/transitions/gpu-spring-transition.ts index fa88f28e1e3..2d7815728fd 100644 --- a/modules/core/src/transitions/gpu-spring-transition.ts +++ b/modules/core/src/transitions/gpu-spring-transition.ts @@ -9,7 +9,6 @@ import { } from './gpu-transition-utils'; import Attribute from '../lib/attribute/attribute'; import {GPUTransitionBase} from './gpu-transition'; -import project from '../shaderlib/project/project'; import type {SpringTransitionSettings} from '../lib/attribute/transition-settings'; import type {TypedArray} from '../types/types'; @@ -178,10 +177,7 @@ function getTransform(device: Device, attribute: Attribute): BufferTransform { blendAlphaOperation: 'max', blendAlphaSrcFactor: 'one', blendAlphaDstFactor: 'one' - }, - - // TODO investigate why this is needed - modules: [project] + } }); }