@luma.gl/shadertools 9.3.0-alpha.9 → 9.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/dist.dev.js +1018 -188
  2. package/dist/dist.min.js +440 -145
  3. package/dist/index.cjs +913 -172
  4. package/dist/index.cjs.map +4 -4
  5. package/dist/index.d.ts +7 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/color/normalize-byte-colors.d.ts +23 -0
  10. package/dist/lib/color/normalize-byte-colors.d.ts.map +1 -0
  11. package/dist/lib/color/normalize-byte-colors.js +42 -0
  12. package/dist/lib/color/normalize-byte-colors.js.map +1 -0
  13. package/dist/lib/glsl-utils/shader-utils.js +4 -4
  14. package/dist/lib/glsl-utils/shader-utils.js.map +1 -1
  15. package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -1
  16. package/dist/lib/shader-assembly/assemble-shaders.js +102 -49
  17. package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -1
  18. package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts.map +1 -1
  19. package/dist/lib/shader-assembly/wgsl-binding-debug.js +7 -3
  20. package/dist/lib/shader-assembly/wgsl-binding-debug.js.map +1 -1
  21. package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts +19 -0
  22. package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts.map +1 -0
  23. package/dist/lib/shader-assembly/wgsl-binding-scan.js +151 -0
  24. package/dist/lib/shader-assembly/wgsl-binding-scan.js.map +1 -0
  25. package/dist/lib/shader-generator/glsl/generate-glsl.js +4 -4
  26. package/dist/lib/shader-generator/glsl/generate-glsl.js.map +1 -1
  27. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts +69 -0
  28. package/dist/lib/shader-module/shader-module-uniform-layout.d.ts.map +1 -1
  29. package/dist/lib/shader-module/shader-module-uniform-layout.js +143 -3
  30. package/dist/lib/shader-module/shader-module-uniform-layout.js.map +1 -1
  31. package/dist/modules/color/float-colors.d.ts +26 -0
  32. package/dist/modules/color/float-colors.d.ts.map +1 -0
  33. package/dist/modules/color/float-colors.js +82 -0
  34. package/dist/modules/color/float-colors.js.map +1 -0
  35. package/dist/modules/engine/picking/picking.d.ts +8 -8
  36. package/dist/modules/engine/picking/picking.d.ts.map +1 -1
  37. package/dist/modules/engine/picking/picking.js +13 -15
  38. package/dist/modules/engine/picking/picking.js.map +1 -1
  39. package/dist/modules/engine/project/project.d.ts +1 -1
  40. package/dist/modules/engine/project/project.js +1 -1
  41. package/dist/modules/engine/skin/skin.d.ts +2 -2
  42. package/dist/modules/engine/skin/skin.d.ts.map +1 -1
  43. package/dist/modules/engine/skin/skin.js +1 -1
  44. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts +1 -0
  45. package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts.map +1 -1
  46. package/dist/modules/lighting/gouraud-material/gouraud-material.js +6 -3
  47. package/dist/modules/lighting/gouraud-material/gouraud-material.js.map +1 -1
  48. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts +2 -2
  49. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts.map +1 -1
  50. package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js +2 -2
  51. package/dist/modules/lighting/lights/lighting-glsl.d.ts +1 -1
  52. package/dist/modules/lighting/lights/lighting-glsl.d.ts.map +1 -1
  53. package/dist/modules/lighting/lights/lighting-glsl.js +1 -1
  54. package/dist/modules/lighting/lights/lighting.d.ts +4 -2
  55. package/dist/modules/lighting/lights/lighting.d.ts.map +1 -1
  56. package/dist/modules/lighting/lights/lighting.js +17 -11
  57. package/dist/modules/lighting/lights/lighting.js.map +1 -1
  58. package/dist/modules/lighting/no-material/dirlight.d.ts +3 -3
  59. package/dist/modules/lighting/no-material/dirlight.d.ts.map +1 -1
  60. package/dist/modules/lighting/no-material/dirlight.js +2 -2
  61. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts +2 -2
  62. package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts.map +1 -1
  63. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js +138 -35
  64. package/dist/modules/lighting/pbr-material/pbr-material-glsl.js.map +1 -1
  65. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts +1 -1
  66. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts.map +1 -1
  67. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js +139 -35
  68. package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js.map +1 -1
  69. package/dist/modules/lighting/pbr-material/pbr-material.d.ts +74 -6
  70. package/dist/modules/lighting/pbr-material/pbr-material.d.ts.map +1 -1
  71. package/dist/modules/lighting/pbr-material/pbr-material.js +70 -2
  72. package/dist/modules/lighting/pbr-material/pbr-material.js.map +1 -1
  73. package/dist/modules/lighting/pbr-material/pbr-projection.js +1 -1
  74. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts +40 -0
  75. package/dist/modules/lighting/pbr-material/pbr-scene.d.ts.map +1 -0
  76. package/dist/modules/lighting/pbr-material/pbr-scene.js +67 -0
  77. package/dist/modules/lighting/pbr-material/pbr-scene.js.map +1 -0
  78. package/dist/modules/lighting/phong-material/phong-material.d.ts +1 -0
  79. package/dist/modules/lighting/phong-material/phong-material.d.ts.map +1 -1
  80. package/dist/modules/lighting/phong-material/phong-material.js +6 -3
  81. package/dist/modules/lighting/phong-material/phong-material.js.map +1 -1
  82. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts +2 -2
  83. package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts.map +1 -1
  84. package/dist/modules/lighting/phong-material/phong-shaders-glsl.js +2 -2
  85. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts +1 -1
  86. package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts.map +1 -1
  87. package/dist/modules/math/fp64/fp64-arithmetic-glsl.js +1 -1
  88. package/package.json +3 -3
  89. package/src/index.ts +17 -1
  90. package/src/lib/color/normalize-byte-colors.ts +57 -0
  91. package/src/lib/glsl-utils/shader-utils.ts +4 -4
  92. package/src/lib/shader-assembly/assemble-shaders.ts +197 -69
  93. package/src/lib/shader-assembly/wgsl-binding-debug.ts +14 -3
  94. package/src/lib/shader-assembly/wgsl-binding-scan.ts +228 -0
  95. package/src/lib/shader-generator/glsl/generate-glsl.ts +4 -4
  96. package/src/lib/shader-module/shader-module-uniform-layout.ts +233 -8
  97. package/src/modules/color/float-colors.ts +99 -0
  98. package/src/modules/engine/picking/picking.ts +17 -19
  99. package/src/modules/engine/project/project.ts +1 -1
  100. package/src/modules/engine/skin/skin.ts +1 -1
  101. package/src/modules/lighting/gouraud-material/gouraud-material.ts +10 -3
  102. package/src/modules/lighting/lambert-material/lambert-shaders-glsl.ts +2 -2
  103. package/src/modules/lighting/lights/lighting-glsl.ts +1 -1
  104. package/src/modules/lighting/lights/lighting.ts +20 -11
  105. package/src/modules/lighting/no-material/dirlight.ts +2 -2
  106. package/src/modules/lighting/pbr-material/pbr-material-glsl.ts +138 -35
  107. package/src/modules/lighting/pbr-material/pbr-material-wgsl.ts +139 -35
  108. package/src/modules/lighting/pbr-material/pbr-material.ts +110 -3
  109. package/src/modules/lighting/pbr-material/pbr-projection.ts +1 -1
  110. package/src/modules/lighting/pbr-material/pbr-scene.ts +91 -0
  111. package/src/modules/lighting/phong-material/phong-material.ts +10 -3
  112. package/src/modules/lighting/phong-material/phong-shaders-glsl.ts +2 -2
  113. package/src/modules/math/fp64/fp64-arithmetic-glsl.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pbr-material.js","sourceRoot":"","sources":["../../../../src/modules/lighting/pbr-material/pbr-material.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pbr-material.js","sourceRoot":"","sources":["../../../../src/modules/lighting/pbr-material/pbr-material.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  const uniformBlock = /* glsl */ `\
5
- uniform pbrProjectionUniforms {
5
+ layout(std140) uniform pbrProjectionUniforms {
6
6
  mat4 modelViewProjectionMatrix;
7
7
  mat4 modelMatrix;
8
8
  mat4 normalMatrix;
@@ -0,0 +1,40 @@
1
+ import type { Texture } from '@luma.gl/core';
2
+ import type { NumberArray2, NumberArray16 } from '@math.gl/core';
3
+ export type PBRSceneBindings = {
4
+ pbr_transmissionFramebufferSampler?: Texture | null;
5
+ };
6
+ export type PBRSceneUniforms = {
7
+ exposure?: number;
8
+ toneMapMode?: number;
9
+ environmentIntensity?: number;
10
+ environmentRotation?: number;
11
+ framebufferSize?: NumberArray2;
12
+ viewMatrix?: NumberArray16;
13
+ projectionMatrix?: NumberArray16;
14
+ };
15
+ export type PBRSceneProps = PBRSceneBindings & PBRSceneUniforms;
16
+ export declare const pbrScene: {
17
+ readonly name: "pbrScene";
18
+ readonly bindingLayout: readonly [{
19
+ readonly name: "pbrScene";
20
+ readonly group: 1;
21
+ }, {
22
+ readonly name: "pbr_transmissionFramebufferSampler";
23
+ readonly group: 1;
24
+ }];
25
+ readonly source: "struct pbrSceneUniforms {\n exposure: f32,\n toneMapMode: i32,\n environmentIntensity: f32,\n environmentRotation: f32,\n framebufferSize: vec2<f32>,\n viewMatrix: mat4x4<f32>,\n projectionMatrix: mat4x4<f32>\n};\n\n@group(1) @binding(auto) var<uniform> pbrScene: pbrSceneUniforms;\n\n#ifdef USE_TRANSMISSION_FRAMEBUFFER\n@group(1) @binding(auto) var pbr_transmissionFramebufferSampler: texture_2d<f32>;\n@group(1) @binding(auto) var pbr_transmissionFramebufferSamplerSampler: sampler;\n#endif\n";
26
+ readonly vs: "layout(std140) uniform pbrSceneUniforms {\n float exposure;\n int toneMapMode;\n float environmentIntensity;\n float environmentRotation;\n vec2 framebufferSize;\n mat4 viewMatrix;\n mat4 projectionMatrix;\n} pbrScene;\n\n#ifdef USE_TRANSMISSION_FRAMEBUFFER\nuniform sampler2D pbr_transmissionFramebufferSampler;\n#endif\n";
27
+ readonly fs: "layout(std140) uniform pbrSceneUniforms {\n float exposure;\n int toneMapMode;\n float environmentIntensity;\n float environmentRotation;\n vec2 framebufferSize;\n mat4 viewMatrix;\n mat4 projectionMatrix;\n} pbrScene;\n\n#ifdef USE_TRANSMISSION_FRAMEBUFFER\nuniform sampler2D pbr_transmissionFramebufferSampler;\n#endif\n";
28
+ readonly getUniforms: (props: PBRSceneProps) => PBRSceneProps;
29
+ readonly uniformTypes: {
30
+ readonly exposure: "f32";
31
+ readonly toneMapMode: "i32";
32
+ readonly environmentIntensity: "f32";
33
+ readonly environmentRotation: "f32";
34
+ readonly framebufferSize: "vec2<f32>";
35
+ readonly viewMatrix: "mat4x4<f32>";
36
+ readonly projectionMatrix: "mat4x4<f32>";
37
+ };
38
+ readonly defaultUniforms: Required<PBRSceneUniforms>;
39
+ };
40
+ //# sourceMappingURL=pbr-scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbr-scene.d.ts","sourceRoot":"","sources":["../../../../src/modules/lighting/pbr-material/pbr-scene.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAC,YAAY,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AAI/D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,kCAAkC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,gBAAgB,CAAC,EAAE,aAAa,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAuChE,eAAO,MAAM,QAAQ;;;;;;;;;;;;kCASE,aAAa;;;;;;;;;;8BAkB7B,QAAQ,CAAC,gBAAgB,CAAC;CACmD,CAAC"}
@@ -0,0 +1,67 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ const IDENTITY_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
5
+ const uniformBlock = /* glsl */ `\
6
+ layout(std140) uniform pbrSceneUniforms {
7
+ float exposure;
8
+ int toneMapMode;
9
+ float environmentIntensity;
10
+ float environmentRotation;
11
+ vec2 framebufferSize;
12
+ mat4 viewMatrix;
13
+ mat4 projectionMatrix;
14
+ } pbrScene;
15
+
16
+ #ifdef USE_TRANSMISSION_FRAMEBUFFER
17
+ uniform sampler2D pbr_transmissionFramebufferSampler;
18
+ #endif
19
+ `;
20
+ const wgslUniformBlock = /* wgsl */ `\
21
+ struct pbrSceneUniforms {
22
+ exposure: f32,
23
+ toneMapMode: i32,
24
+ environmentIntensity: f32,
25
+ environmentRotation: f32,
26
+ framebufferSize: vec2<f32>,
27
+ viewMatrix: mat4x4<f32>,
28
+ projectionMatrix: mat4x4<f32>
29
+ };
30
+
31
+ @group(1) @binding(auto) var<uniform> pbrScene: pbrSceneUniforms;
32
+
33
+ #ifdef USE_TRANSMISSION_FRAMEBUFFER
34
+ @group(1) @binding(auto) var pbr_transmissionFramebufferSampler: texture_2d<f32>;
35
+ @group(1) @binding(auto) var pbr_transmissionFramebufferSamplerSampler: sampler;
36
+ #endif
37
+ `;
38
+ export const pbrScene = {
39
+ name: 'pbrScene',
40
+ bindingLayout: [
41
+ { name: 'pbrScene', group: 1 },
42
+ { name: 'pbr_transmissionFramebufferSampler', group: 1 }
43
+ ],
44
+ source: wgslUniformBlock,
45
+ vs: uniformBlock,
46
+ fs: uniformBlock,
47
+ getUniforms: (props) => props,
48
+ uniformTypes: {
49
+ exposure: 'f32',
50
+ toneMapMode: 'i32',
51
+ environmentIntensity: 'f32',
52
+ environmentRotation: 'f32',
53
+ framebufferSize: 'vec2<f32>',
54
+ viewMatrix: 'mat4x4<f32>',
55
+ projectionMatrix: 'mat4x4<f32>'
56
+ },
57
+ defaultUniforms: {
58
+ exposure: 1,
59
+ toneMapMode: 2,
60
+ environmentIntensity: 1,
61
+ environmentRotation: Math.PI * 0.5,
62
+ framebufferSize: [1, 1],
63
+ viewMatrix: IDENTITY_MATRIX,
64
+ projectionMatrix: IDENTITY_MATRIX
65
+ }
66
+ };
67
+ //# sourceMappingURL=pbr-scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pbr-scene.js","sourceRoot":"","sources":["../../../../src/modules/lighting/pbr-material/pbr-scene.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAuBpC,MAAM,eAAe,GAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAExF,MAAM,YAAY,GAAG,UAAU,CAAC;;;;;;;;;;;;;;CAc/B,CAAC;AAEF,MAAM,gBAAgB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;CAiBnC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,UAAU;IAChB,aAAa,EAAE;QACb,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC;QAC5B,EAAC,IAAI,EAAE,oCAAoC,EAAE,KAAK,EAAE,CAAC,EAAC;KACvD;IACD,MAAM,EAAE,gBAAgB;IACxB,EAAE,EAAE,YAAY;IAChB,EAAE,EAAE,YAAY;IAChB,WAAW,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK;IAC5C,YAAY,EAAE;QACZ,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,oBAAoB,EAAE,KAAK;QAC3B,mBAAmB,EAAE,KAAK;QAC1B,eAAe,EAAE,WAAW;QAC5B,UAAU,EAAE,aAAa;QACzB,gBAAgB,EAAE,aAAa;KAChC;IACD,eAAe,EAAE;QACf,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,CAAC;QACd,oBAAoB,EAAE,CAAC;QACvB,mBAAmB,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG;QAClC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvB,UAAU,EAAE,eAAe;QAC3B,gBAAgB,EAAE,eAAe;KACJ;CACmD,CAAC"}
@@ -7,6 +7,7 @@ export type PhongMaterialProps = {
7
7
  /** Specularity exponent */
8
8
  shininess?: number;
9
9
  specularColor?: NumberArray3;
10
+ useByteColors?: boolean;
10
11
  };
11
12
  /** In Phong shading, the normal vector is linearly interpolated across the surface of the polygon from the polygon's vertex normals. */
12
13
  export declare const phongMaterial: ShaderModule<PhongMaterialProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"phong-material.d.ts","sourceRoot":"","sources":["../../../../src/modules/lighting/phong-material/phong-material.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,YAAY,EAAC,oDAAiD;AAKtE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,YAAY,CAAC;CAC9B,CAAC;AAEF,wIAAwI;AACxI,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,kBAAkB,CAiC1D,CAAC"}
1
+ {"version":3,"file":"phong-material.d.ts","sourceRoot":"","sources":["../../../../src/modules/lighting/phong-material/phong-material.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,YAAY,EAAC,oDAAiD;AAMtE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,wIAAwI;AACxI,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,kBAAkB,CAsC1D,CAAC"}
@@ -4,6 +4,7 @@
4
4
  import { lighting } from "../lights/lighting.js";
5
5
  import { PHONG_WGSL } from "./phong-shaders-wgsl.js";
6
6
  import { PHONG_VS, PHONG_FS } from "./phong-shaders-glsl.js";
7
+ import { normalizeByteColor3, resolveUseByteColors } from "../../../lib/color/normalize-byte-colors.js";
7
8
  /** In Phong shading, the normal vector is linearly interpolated across the surface of the polygon from the polygon's vertex normals. */
8
9
  export const phongMaterial = {
9
10
  name: 'phongMaterial',
@@ -22,19 +23,21 @@ export const phongMaterial = {
22
23
  ambient: 'f32',
23
24
  diffuse: 'f32',
24
25
  shininess: 'f32',
25
- specularColor: 'vec3<f32>'
26
+ specularColor: 'vec3<f32>',
27
+ useByteColors: 'i32'
26
28
  },
27
29
  defaultUniforms: {
28
30
  unlit: false,
29
31
  ambient: 0.35,
30
32
  diffuse: 0.6,
31
33
  shininess: 32,
32
- specularColor: [0.15, 0.15, 0.15]
34
+ specularColor: [0.15, 0.15, 0.15],
35
+ useByteColors: true
33
36
  },
34
37
  getUniforms(props) {
35
38
  const uniforms = { ...props };
36
39
  if (uniforms.specularColor) {
37
- uniforms.specularColor = uniforms.specularColor.map(x => x / 255);
40
+ uniforms.specularColor = normalizeByteColor3(uniforms.specularColor, resolveUseByteColors(uniforms.useByteColors, true));
38
41
  }
39
42
  return { ...phongMaterial.defaultUniforms, ...uniforms };
40
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"phong-material.js","sourceRoot":"","sources":["../../../../src/modules/lighting/phong-material/phong-material.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,QAAQ,EAAC,8BAA2B;AAC5C,OAAO,EAAC,UAAU,EAAC,gCAA6B;AAChD,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,gCAA6B;AAWxD,wIAAwI;AACxI,MAAM,CAAC,MAAM,aAAa,GAAqC;IAC7D,IAAI,EAAE,eAAe;IACrB,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;IAClD,YAAY,EAAE,CAAC,QAAQ,CAAC;IACxB,oDAAoD;IACpD,MAAM,EAAE,UAAU;IAClB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,OAAO,EAAE;QACP,iBAAiB,EAAE,IAAI;KACxB;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,WAAW;KAC3B;IACD,eAAe,EAAE;QACf,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,GAAG;QACZ,SAAS,EAAE,EAAE;QACb,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;KAClC;IACD,WAAW,CAAC,KAA0B;QACpC,MAAM,QAAQ,GAAG,EAAC,GAAG,KAAK,EAAC,CAAC;QAC5B,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAiB,CAAC;QACpF,CAAC;QACD,OAAO,EAAC,GAAG,aAAa,CAAC,eAAe,EAAE,GAAG,QAAQ,EAAC,CAAC;IACzD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"phong-material.js","sourceRoot":"","sources":["../../../../src/modules/lighting/phong-material/phong-material.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAIpC,OAAO,EAAC,QAAQ,EAAC,8BAA2B;AAC5C,OAAO,EAAC,UAAU,EAAC,gCAA6B;AAChD,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,gCAA6B;AACxD,OAAO,EAAC,mBAAmB,EAAE,oBAAoB,EAAC,oDAAiD;AAYnG,wIAAwI;AACxI,MAAM,CAAC,MAAM,aAAa,GAAqC;IAC7D,IAAI,EAAE,eAAe;IACrB,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;IAClD,YAAY,EAAE,CAAC,QAAQ,CAAC;IACxB,oDAAoD;IACpD,MAAM,EAAE,UAAU;IAClB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,OAAO,EAAE;QACP,iBAAiB,EAAE,IAAI;KACxB;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,WAAW;QAC1B,aAAa,EAAE,KAAK;KACrB;IACD,eAAe,EAAE;QACf,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,GAAG;QACZ,SAAS,EAAE,EAAE;QACb,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACjC,aAAa,EAAE,IAAI;KACpB;IACD,WAAW,CAAC,KAA0B;QACpC,MAAM,QAAQ,GAAG,EAAC,GAAG,KAAK,EAAC,CAAC;QAC5B,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;YAC3B,QAAQ,CAAC,aAAa,GAAG,mBAAmB,CAC1C,QAAQ,CAAC,aAAa,EACtB,oBAAoB,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CACnC,CAAC;QACpB,CAAC;QACD,OAAO,EAAC,GAAG,aAAa,CAAC,eAAe,EAAE,GAAG,QAAQ,EAAC,CAAC;IACzD,CAAC;CACF,CAAC"}
@@ -1,3 +1,3 @@
1
- export declare const PHONG_VS = "uniform phongMaterialUniforms {\n uniform bool unlit;\n uniform float ambient;\n uniform float diffuse;\n uniform float shininess;\n uniform vec3 specularColor;\n} material;\n";
2
- export declare const PHONG_FS = "uniform phongMaterialUniforms {\n uniform bool unlit;\n uniform float ambient;\n uniform float diffuse;\n uniform float shininess;\n uniform vec3 specularColor;\n} material;\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 light_direction, vec3 view_direction, vec3 normal_worldspace, vec3 color) {\n vec3 halfway_direction = normalize(light_direction + view_direction);\n float lambertian = dot(light_direction, normal_worldspace);\n float specular = 0.0;\n if (lambertian > 0.0) {\n float specular_angle = max(dot(normal_worldspace, halfway_direction), 0.0);\n specular = pow(specular_angle, material.shininess);\n }\n lambertian = max(lambertian, 0.0);\n return (lambertian * material.diffuse * surfaceColor + specular * material.specularColor) * color;\n}\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\n vec3 lightColor = surfaceColor;\n\n if (material.unlit) {\n return surfaceColor;\n }\n\n if (lighting.enabled == 0) {\n return lightColor;\n }\n\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\n lightColor = material.ambient * surfaceColor * lighting.ambientColor;\n\n for (int i = 0; i < lighting.pointLightCount; i++) {\n PointLight pointLight = lighting_getPointLight(i);\n vec3 light_position_worldspace = pointLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n float light_attenuation = getPointLightAttenuation(pointLight, distance(light_position_worldspace, position_worldspace));\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color / light_attenuation);\n }\n\n for (int i = 0; i < lighting.spotLightCount; i++) {\n SpotLight spotLight = lighting_getSpotLight(i);\n vec3 light_position_worldspace = spotLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n float light_attenuation = getSpotLightAttenuation(spotLight, position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, spotLight.color / light_attenuation);\n }\n\n for (int i = 0; i < lighting.directionalLightCount; i++) {\n DirectionalLight directionalLight = lighting_getDirectionalLight(i);\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n \n return lightColor;\n}\n";
1
+ export declare const PHONG_VS = "layout(std140) uniform phongMaterialUniforms {\n uniform bool unlit;\n uniform float ambient;\n uniform float diffuse;\n uniform float shininess;\n uniform vec3 specularColor;\n} material;\n";
2
+ export declare const PHONG_FS = "layout(std140) uniform phongMaterialUniforms {\n uniform bool unlit;\n uniform float ambient;\n uniform float diffuse;\n uniform float shininess;\n uniform vec3 specularColor;\n} material;\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 light_direction, vec3 view_direction, vec3 normal_worldspace, vec3 color) {\n vec3 halfway_direction = normalize(light_direction + view_direction);\n float lambertian = dot(light_direction, normal_worldspace);\n float specular = 0.0;\n if (lambertian > 0.0) {\n float specular_angle = max(dot(normal_worldspace, halfway_direction), 0.0);\n specular = pow(specular_angle, material.shininess);\n }\n lambertian = max(lambertian, 0.0);\n return (lambertian * material.diffuse * surfaceColor + specular * material.specularColor) * color;\n}\n\nvec3 lighting_getLightColor(vec3 surfaceColor, vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {\n vec3 lightColor = surfaceColor;\n\n if (material.unlit) {\n return surfaceColor;\n }\n\n if (lighting.enabled == 0) {\n return lightColor;\n }\n\n vec3 view_direction = normalize(cameraPosition - position_worldspace);\n lightColor = material.ambient * surfaceColor * lighting.ambientColor;\n\n for (int i = 0; i < lighting.pointLightCount; i++) {\n PointLight pointLight = lighting_getPointLight(i);\n vec3 light_position_worldspace = pointLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n float light_attenuation = getPointLightAttenuation(pointLight, distance(light_position_worldspace, position_worldspace));\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, pointLight.color / light_attenuation);\n }\n\n for (int i = 0; i < lighting.spotLightCount; i++) {\n SpotLight spotLight = lighting_getSpotLight(i);\n vec3 light_position_worldspace = spotLight.position;\n vec3 light_direction = normalize(light_position_worldspace - position_worldspace);\n float light_attenuation = getSpotLightAttenuation(spotLight, position_worldspace);\n lightColor += lighting_getLightColor(surfaceColor, light_direction, view_direction, normal_worldspace, spotLight.color / light_attenuation);\n }\n\n for (int i = 0; i < lighting.directionalLightCount; i++) {\n DirectionalLight directionalLight = lighting_getDirectionalLight(i);\n lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);\n }\n \n return lightColor;\n}\n";
3
3
  //# sourceMappingURL=phong-shaders-glsl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"phong-shaders-glsl.d.ts","sourceRoot":"","sources":["../../../../src/modules/lighting/phong-material/phong-shaders-glsl.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,0LAQpB,CAAC;AAEF,eAAO,MAAM,QAAQ,2gFA0DpB,CAAC"}
1
+ {"version":3,"file":"phong-shaders-glsl.d.ts","sourceRoot":"","sources":["../../../../src/modules/lighting/phong-material/phong-shaders-glsl.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,yMAQpB,CAAC;AAEF,eAAO,MAAM,QAAQ,0hFA0DpB,CAAC"}
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  export const PHONG_VS = /* glsl */ `\
5
- uniform phongMaterialUniforms {
5
+ layout(std140) uniform phongMaterialUniforms {
6
6
  uniform bool unlit;
7
7
  uniform float ambient;
8
8
  uniform float diffuse;
@@ -11,7 +11,7 @@ uniform phongMaterialUniforms {
11
11
  } material;
12
12
  `;
13
13
  export const PHONG_FS = /* glsl */ `\
14
- uniform phongMaterialUniforms {
14
+ layout(std140) uniform phongMaterialUniforms {
15
15
  uniform bool unlit;
16
16
  uniform float ambient;
17
17
  uniform float diffuse;
@@ -1,2 +1,2 @@
1
- export declare const fp64arithmeticShader = "\nuniform fp64arithmeticUniforms {\n uniform float ONE;\n uniform float SPLIT;\n} fp64;\n\n/*\nAbout LUMA_FP64_CODE_ELIMINATION_WORKAROUND\n\nThe purpose of this workaround is to prevent shader compilers from\noptimizing away necessary arithmetic operations by swapping their sequences\nor transform the equation to some 'equivalent' form.\n\nThese helpers implement Dekker/Veltkamp-style error tracking. If the compiler\nfolds constants or reassociates the arithmetic, the high/low split can stop\ntracking the rounding error correctly. That failure mode tends to look fine in\nsimple coordinate setup, but then breaks down inside iterative arithmetic such\nas fp64 Mandelbrot loops.\n\nThe method is to multiply an artifical variable, ONE, which will be known to\nthe compiler to be 1 only at runtime. The whole expression is then represented\nas a polynomial with respective to ONE. In the coefficients of all terms, only one a\nand one b should appear\n\nerr = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE\n*/\n\nfloat prevent_fp64_optimization(float value) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n return value + fp64.ONE * 0.0;\n#else\n return value;\n#endif\n}\n\n// Divide float number to high and low floats to extend fraction bits\nvec2 split(float a) {\n // Keep SPLIT as a runtime uniform so the compiler cannot fold the Dekker\n // split into a constant expression and reassociate the recovery steps.\n float split = prevent_fp64_optimization(fp64.SPLIT);\n float t = prevent_fp64_optimization(a * split);\n float temp = t - a;\n float a_hi = t - temp;\n float a_lo = a - a_hi;\n return vec2(a_hi, a_lo);\n}\n\n// Divide float number again when high float uses too many fraction bits\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\n\n// Special sum operation when a > b\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * fp64.ONE;\n float err = b - (sum - a) * fp64.ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\n\n// General sum operation\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * fp64.ONE - a) * fp64.ONE;\n float err = (a - (s - v) * fp64.ONE) * fp64.ONE * fp64.ONE * fp64.ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * fp64.ONE - a) * fp64.ONE;\n float err = (a - (s - v) * fp64.ONE) * fp64.ONE * fp64.ONE * fp64.ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * fp64.ONE + 2.0 * a_fp64.x *\n a_fp64.y * fp64.ONE * fp64.ONE) + a_fp64.y * a_fp64.y * fp64.ONE * fp64.ONE * fp64.ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n // twoProd is especially sensitive because mul_fp64 and div_fp64 both depend\n // on the split terms and cross terms staying in the original evaluation\n // order. If the compiler folds or reassociates them, the low part tends to\n // collapse to zero or NaN on some drivers.\n float highProduct = prevent_fp64_optimization(a_fp64.x * b_fp64.x);\n float crossProduct1 = prevent_fp64_optimization(a_fp64.x * b_fp64.y);\n float crossProduct2 = prevent_fp64_optimization(a_fp64.y * b_fp64.x);\n float lowProduct = prevent_fp64_optimization(a_fp64.y * b_fp64.y);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err1 = (highProduct - prod) * fp64.ONE;\n float err2 = crossProduct1 * fp64.ONE * fp64.ONE;\n float err3 = crossProduct2 * fp64.ONE * fp64.ONE * fp64.ONE;\n float err4 = lowProduct * fp64.ONE * fp64.ONE * fp64.ONE * fp64.ONE;\n#else\n float err1 = highProduct - prod;\n float err2 = crossProduct1;\n float err3 = crossProduct2;\n float err4 = lowProduct;\n#endif\n float err = ((err1 + err2) + err3) + err4;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n // y component is for the error\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * fp64.ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n";
1
+ export declare const fp64arithmeticShader = "\nlayout(std140) uniform fp64arithmeticUniforms {\n uniform float ONE;\n uniform float SPLIT;\n} fp64;\n\n/*\nAbout LUMA_FP64_CODE_ELIMINATION_WORKAROUND\n\nThe purpose of this workaround is to prevent shader compilers from\noptimizing away necessary arithmetic operations by swapping their sequences\nor transform the equation to some 'equivalent' form.\n\nThese helpers implement Dekker/Veltkamp-style error tracking. If the compiler\nfolds constants or reassociates the arithmetic, the high/low split can stop\ntracking the rounding error correctly. That failure mode tends to look fine in\nsimple coordinate setup, but then breaks down inside iterative arithmetic such\nas fp64 Mandelbrot loops.\n\nThe method is to multiply an artifical variable, ONE, which will be known to\nthe compiler to be 1 only at runtime. The whole expression is then represented\nas a polynomial with respective to ONE. In the coefficients of all terms, only one a\nand one b should appear\n\nerr = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE\n*/\n\nfloat prevent_fp64_optimization(float value) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n return value + fp64.ONE * 0.0;\n#else\n return value;\n#endif\n}\n\n// Divide float number to high and low floats to extend fraction bits\nvec2 split(float a) {\n // Keep SPLIT as a runtime uniform so the compiler cannot fold the Dekker\n // split into a constant expression and reassociate the recovery steps.\n float split = prevent_fp64_optimization(fp64.SPLIT);\n float t = prevent_fp64_optimization(a * split);\n float temp = t - a;\n float a_hi = t - temp;\n float a_lo = a - a_hi;\n return vec2(a_hi, a_lo);\n}\n\n// Divide float number again when high float uses too many fraction bits\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\n\n// Special sum operation when a > b\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * fp64.ONE;\n float err = b - (sum - a) * fp64.ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\n\n// General sum operation\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * fp64.ONE - a) * fp64.ONE;\n float err = (a - (s - v) * fp64.ONE) * fp64.ONE * fp64.ONE * fp64.ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * fp64.ONE - a) * fp64.ONE;\n float err = (a - (s - v) * fp64.ONE) * fp64.ONE * fp64.ONE * fp64.ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * fp64.ONE + 2.0 * a_fp64.x *\n a_fp64.y * fp64.ONE * fp64.ONE) + a_fp64.y * a_fp64.y * fp64.ONE * fp64.ONE * fp64.ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n // twoProd is especially sensitive because mul_fp64 and div_fp64 both depend\n // on the split terms and cross terms staying in the original evaluation\n // order. If the compiler folds or reassociates them, the low part tends to\n // collapse to zero or NaN on some drivers.\n float highProduct = prevent_fp64_optimization(a_fp64.x * b_fp64.x);\n float crossProduct1 = prevent_fp64_optimization(a_fp64.x * b_fp64.y);\n float crossProduct2 = prevent_fp64_optimization(a_fp64.y * b_fp64.x);\n float lowProduct = prevent_fp64_optimization(a_fp64.y * b_fp64.y);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err1 = (highProduct - prod) * fp64.ONE;\n float err2 = crossProduct1 * fp64.ONE * fp64.ONE;\n float err3 = crossProduct2 * fp64.ONE * fp64.ONE * fp64.ONE;\n float err4 = lowProduct * fp64.ONE * fp64.ONE * fp64.ONE * fp64.ONE;\n#else\n float err1 = highProduct - prod;\n float err2 = crossProduct1;\n float err3 = crossProduct2;\n float err4 = lowProduct;\n#endif\n float err = ((err1 + err2) + err3) + err4;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n // y component is for the error\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * fp64.ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n";
2
2
  //# sourceMappingURL=fp64-arithmetic-glsl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fp64-arithmetic-glsl.d.ts","sourceRoot":"","sources":["../../../../src/modules/math/fp64/fp64-arithmetic-glsl.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,kiMAwMhC,CAAC"}
1
+ {"version":3,"file":"fp64-arithmetic-glsl.d.ts","sourceRoot":"","sources":["../../../../src/modules/math/fp64/fp64-arithmetic-glsl.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,oBAAoB,ijMAwMhC,CAAC"}
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
  export const fp64arithmeticShader = /* glsl */ `\
5
5
 
6
- uniform fp64arithmeticUniforms {
6
+ layout(std140) uniform fp64arithmeticUniforms {
7
7
  uniform float ONE;
8
8
  uniform float SPLIT;
9
9
  } fp64;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/shadertools",
3
- "version": "9.3.0-alpha.9",
3
+ "version": "9.3.1",
4
4
  "description": "Shader module system for luma.gl",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -46,11 +46,11 @@
46
46
  "prepublishOnly": "npm run build-minified-bundle && npm run build-dev-bundle"
47
47
  },
48
48
  "peerDependencies": {
49
- "@luma.gl/core": "9.3.0-alpha.6"
49
+ "@luma.gl/core": "~9.3.0"
50
50
  },
51
51
  "dependencies": {
52
52
  "@math.gl/core": "^4.1.0",
53
53
  "@math.gl/types": "^4.1.0"
54
54
  },
55
- "gitHead": "737b0f752b3f8a6ae920b394d5ca028427275b37"
55
+ "gitHead": "c13ab4389f5616e6f7f21bfa4e113ac600e6ecab"
56
56
  }
package/src/index.ts CHANGED
@@ -22,14 +22,17 @@ export {getShaderModuleUniforms} from './lib/shader-module/shader-module';
22
22
  export {getShaderModuleDependencies} from './lib/shader-module/shader-module-dependencies';
23
23
  export {checkShaderModuleDeprecations} from './lib/shader-module/shader-module';
24
24
  export type {
25
+ GLSLUniformBlockInfo,
25
26
  ShaderModuleUniformLayoutStage,
26
27
  ShaderModuleUniformLayoutValidationResult
27
28
  } from './lib/shader-module/shader-module-uniform-layout';
28
29
  export {
30
+ getGLSLUniformBlocks,
29
31
  getShaderModuleUniformBlockFields,
30
32
  getShaderModuleUniformBlockName,
31
33
  getShaderModuleUniformLayoutValidationResult,
32
- validateShaderModuleUniformLayout
34
+ validateShaderModuleUniformLayout,
35
+ warnIfGLSLUniformBlocksAreNotStd140
33
36
  } from './lib/shader-module/shader-module-uniform-layout';
34
37
 
35
38
  export {getShaderModuleSource} from './lib/shader-assembly/assemble-shaders';
@@ -67,12 +70,19 @@ export {combineInjects} from './lib/shader-assembly/shader-injections';
67
70
  // data utils
68
71
  export {toHalfFloat, fromHalfFloat} from './modules/math/fp16/fp16-utils';
69
72
  export {fp64ify, fp64LowPart, fp64ifyMatrix4} from './modules/math/fp64/fp64-utils';
73
+ export {
74
+ normalizeByteColor3,
75
+ normalizeByteColor4,
76
+ resolveUseByteColors
77
+ } from './lib/color/normalize-byte-colors';
70
78
 
71
79
  // math libraries
72
80
  export {random} from './modules/math/random/random';
73
81
 
74
82
  export {fp32} from './modules/math/fp32/fp32';
75
83
  export {fp64, fp64arithmetic} from './modules/math/fp64/fp64';
84
+ export type {FloatColorsProps, FloatColorsUniforms} from './modules/color/float-colors';
85
+ export {floatColors} from './modules/color/float-colors';
76
86
 
77
87
  // engine shader modules
78
88
 
@@ -109,6 +119,12 @@ export type {
109
119
  PBRMaterialProps,
110
120
  PBRMaterialUniforms
111
121
  } from './modules/lighting/pbr-material/pbr-material';
122
+ export type {
123
+ PBRSceneBindings,
124
+ PBRSceneProps,
125
+ PBRSceneUniforms
126
+ } from './modules/lighting/pbr-material/pbr-scene';
112
127
  export type {PBRProjectionProps} from './modules/lighting/pbr-material/pbr-projection';
113
128
 
114
129
  export {pbrMaterial} from './modules/lighting/pbr-material/pbr-material';
130
+ export {pbrScene} from './modules/lighting/pbr-material/pbr-scene';
@@ -0,0 +1,57 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type {NumberArray3, NumberArray4} from '@math.gl/types';
6
+
7
+ /**
8
+ * Resolves whether semantic colors should be interpreted as byte-style `0..255` values.
9
+ * @param useByteColors - Explicit color interpretation flag.
10
+ * @param defaultUseByteColors - Fallback value when `useByteColors` is omitted.
11
+ * @returns `true` when semantic colors should be normalized from bytes, otherwise `false`.
12
+ */
13
+ export function resolveUseByteColors(
14
+ useByteColors?: boolean,
15
+ defaultUseByteColors: boolean = true
16
+ ): boolean {
17
+ return useByteColors ?? defaultUseByteColors;
18
+ }
19
+
20
+ /**
21
+ * Normalizes an RGB semantic color to float space when byte-style colors are enabled.
22
+ * @param color - Input RGB semantic color.
23
+ * @param useByteColors - When `true`, divide components by `255`.
24
+ * @returns The normalized RGB color.
25
+ */
26
+ export function normalizeByteColor3(
27
+ color: Readonly<NumberArray3> = [0, 0, 0],
28
+ useByteColors: boolean = true
29
+ ): NumberArray3 {
30
+ if (!useByteColors) {
31
+ return [...color] as NumberArray3;
32
+ }
33
+
34
+ return color.map(component => component / 255) as NumberArray3;
35
+ }
36
+
37
+ /**
38
+ * Normalizes an RGBA semantic color to float space when byte-style colors are enabled.
39
+ * @param color - Input RGB or RGBA semantic color.
40
+ * @param useByteColors - When `true`, divide components by `255`.
41
+ * @returns The normalized RGBA color, adding an opaque alpha channel when needed.
42
+ */
43
+ export function normalizeByteColor4(
44
+ color: Readonly<NumberArray4> | Readonly<NumberArray3>,
45
+ useByteColors: boolean = true
46
+ ): NumberArray4 {
47
+ const normalizedColor = normalizeByteColor3(color.slice(0, 3) as NumberArray3, useByteColors);
48
+ const hasAlpha = Number.isFinite(color[3]);
49
+ const alpha = hasAlpha ? (color[3] as number) : 1;
50
+
51
+ return [
52
+ normalizedColor[0],
53
+ normalizedColor[1],
54
+ normalizedColor[2],
55
+ useByteColors && hasAlpha ? alpha / 255 : alpha
56
+ ] as NumberArray4;
57
+ }
@@ -61,7 +61,7 @@ void main() {
61
61
 
62
62
  /** convert glsl type to suffix */
63
63
  export function typeToChannelSuffix(type: string): 'x' | 'xy' | 'xyz' | 'xyzw' {
64
- // prettier-ignore
64
+ // biome-ignore format: preserve layout
65
65
  switch (type) {
66
66
  case 'float': return 'x';
67
67
  case 'vec2': return 'xy';
@@ -74,7 +74,7 @@ export function typeToChannelSuffix(type: string): 'x' | 'xy' | 'xyz' | 'xyzw' {
74
74
 
75
75
  /** convert glsl type to channel count */
76
76
  export function typeToChannelCount(type: string): 1 | 2 | 3 | 4 {
77
- // prettier-ignore
77
+ // biome-ignore format: preserve layout
78
78
  switch (type) {
79
79
  case 'float': return 1;
80
80
  case 'vec2': return 2;
@@ -85,7 +85,7 @@ export function typeToChannelCount(type: string): 1 | 2 | 3 | 4 {
85
85
  }
86
86
  }
87
87
  function channelCountToType(channels: 1 | 2 | 3 | 4): 'float' | 'vec2' | 'vec3' | 'vec4' {
88
- // prettier-ignore
88
+ // biome-ignore format: preserve layout
89
89
  switch (channels) {
90
90
  case 1: return 'float';
91
91
  case 2: return 'vec2';
@@ -98,7 +98,7 @@ function channelCountToType(channels: 1 | 2 | 3 | 4): 'float' | 'vec2' | 'vec3'
98
98
 
99
99
  /** Returns glsl instruction for converting to vec4 */
100
100
  export function convertToVec4(variable: string, channels: 1 | 2 | 3 | 4): string {
101
- // prettier-ignore
101
+ // biome-ignore format: preserve layout
102
102
  switch (channels) {
103
103
  case 1: return `vec4(${variable}, 0.0, 0.0, 1.0)`;
104
104
  case 2: return `vec4(${variable}, 0.0, 1.0)`;