@deck.gl/extensions 9.0.0-beta.5 → 9.0.0-beta.7

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 (46) hide show
  1. package/dist/brushing/shader-module.d.ts.map +1 -1
  2. package/dist/brushing/shader-module.js +52 -57
  3. package/dist/clip/clip-extension.d.ts.map +1 -1
  4. package/dist/clip/clip-extension.js +6 -6
  5. package/dist/collision-filter/shader-module.d.ts.map +1 -1
  6. package/dist/collision-filter/shader-module.js +46 -56
  7. package/dist/data-filter/aggregator.d.ts.map +1 -1
  8. package/dist/data-filter/aggregator.js +11 -14
  9. package/dist/data-filter/data-filter-extension.d.ts.map +1 -1
  10. package/dist/data-filter/data-filter-extension.js +2 -5
  11. package/dist/data-filter/shader-module.d.ts.map +1 -1
  12. package/dist/data-filter/shader-module.js +70 -78
  13. package/dist/dist.dev.js +799 -1007
  14. package/dist/fill-style/fill-style-extension.js +1 -1
  15. package/dist/fill-style/{shaders.glsl.d.ts → shader-module.d.ts} +1 -1
  16. package/dist/fill-style/shader-module.d.ts.map +1 -0
  17. package/dist/fill-style/{shaders.glsl.js → shader-module.js} +27 -33
  18. package/dist/fp64/project64.glsl.js +41 -60
  19. package/dist/index.cjs +363 -430
  20. package/dist/index.cjs.map +4 -4
  21. package/dist/mask/mask-pass.js +2 -2
  22. package/dist/mask/shader-module.d.ts.map +1 -1
  23. package/dist/mask/shader-module.js +33 -37
  24. package/dist/path-style/shaders.glsl.js +42 -47
  25. package/dist/terrain/shader-module.d.ts.map +1 -1
  26. package/dist/terrain/shader-module.js +30 -32
  27. package/dist/terrain/terrain-pass.js +2 -2
  28. package/dist/terrain/utils.js +2 -2
  29. package/dist/utils/syntax-tags.d.ts +6 -0
  30. package/dist/utils/syntax-tags.d.ts.map +1 -0
  31. package/dist/utils/syntax-tags.js +5 -0
  32. package/dist.min.js +862 -1120
  33. package/package.json +8 -12
  34. package/src/brushing/shader-module.ts +4 -3
  35. package/src/clip/clip-extension.ts +10 -9
  36. package/src/collision-filter/shader-module.ts +6 -4
  37. package/src/data-filter/aggregator.ts +8 -13
  38. package/src/data-filter/data-filter-extension.ts +2 -5
  39. package/src/data-filter/shader-module.ts +7 -6
  40. package/src/fill-style/fill-style-extension.ts +1 -1
  41. package/src/fill-style/{shaders.glsl.ts → shader-module.ts} +6 -5
  42. package/src/mask/shader-module.ts +7 -6
  43. package/src/terrain/shader-module.ts +11 -10
  44. package/src/terrain/utils.ts +1 -1
  45. package/src/utils/syntax-tags.ts +5 -0
  46. package/dist/fill-style/shaders.glsl.d.ts.map +0 -1
package/dist/dist.dev.js CHANGED
@@ -79,7 +79,12 @@ var __exports__ = (() => {
79
79
 
80
80
  // src/brushing/shader-module.ts
81
81
  var import_core2 = __toESM(require_core(), 1);
82
- var vs = `
82
+
83
+ // src/utils/syntax-tags.ts
84
+ var glsl = (s) => `${s}`;
85
+
86
+ // src/brushing/shader-module.ts
87
+ var vs = glsl`
83
88
  uniform bool brushing_enabled;
84
89
  uniform int brushing_target;
85
90
  uniform vec2 brushing_mousePos;
@@ -112,7 +117,7 @@ var __exports__ = (() => {
112
117
  brushing_isVisible = float(visible);
113
118
  }
114
119
  `;
115
- var fs = `
120
+ var fs = glsl`
116
121
  uniform bool brushing_enabled;
117
122
  in float brushing_isVisible;
118
123
  `;
@@ -123,7 +128,7 @@ var __exports__ = (() => {
123
128
  source_target: 3
124
129
  };
125
130
  var inject = {
126
- "vs:DECKGL_FILTER_GL_POSITION": `
131
+ "vs:DECKGL_FILTER_GL_POSITION": glsl`
127
132
  vec2 brushingTarget;
128
133
  vec2 brushingSource;
129
134
  if (brushing_target == 3) {
@@ -237,8 +242,202 @@ var __exports__ = (() => {
237
242
  BrushingExtension.defaultProps = defaultProps;
238
243
  BrushingExtension.extensionName = "BrushingExtension";
239
244
 
240
- // ../../node_modules/@luma.gl/constants/dist/constants-enum.js
241
- var GLEnum = function(GLEnum2) {
245
+ // src/data-filter/data-filter-extension.ts
246
+ var import_core4 = __toESM(require_core(), 1);
247
+
248
+ // src/data-filter/shader-module.ts
249
+ var vs2 = glsl`
250
+ uniform DATAFILTER_TYPE filter_min;
251
+ uniform DATAFILTER_TYPE filter_softMin;
252
+ uniform DATAFILTER_TYPE filter_softMax;
253
+ uniform DATAFILTER_TYPE filter_max;
254
+ uniform bool filter_useSoftMargin;
255
+ uniform bool filter_enabled;
256
+ uniform bool filter_transformSize;
257
+ uniform ivec4 filter_categoryBitMask;
258
+
259
+ #ifdef NON_INSTANCED_MODEL
260
+ #define DATAFILTER_ATTRIB filterValues
261
+ #define DATAFILTER_ATTRIB_64LOW filterValues64Low
262
+ #define DATACATEGORY_ATTRIB filterCategoryValues
263
+ #else
264
+ #define DATAFILTER_ATTRIB instanceFilterValues
265
+ #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low
266
+ #define DATACATEGORY_ATTRIB instanceFilterCategoryValues
267
+ #endif
268
+
269
+ in DATAFILTER_TYPE DATAFILTER_ATTRIB;
270
+ #ifdef DATAFILTER_DOUBLE
271
+ in DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;
272
+
273
+ uniform DATAFILTER_TYPE filter_min64High;
274
+ uniform DATAFILTER_TYPE filter_max64High;
275
+ #endif
276
+ in DATACATEGORY_TYPE DATACATEGORY_ATTRIB;
277
+
278
+ out float dataFilter_value;
279
+
280
+ float dataFilter_reduceValue(float value) {
281
+ return value;
282
+ }
283
+ float dataFilter_reduceValue(vec2 value) {
284
+ return min(value.x, value.y);
285
+ }
286
+ float dataFilter_reduceValue(vec3 value) {
287
+ return min(min(value.x, value.y), value.z);
288
+ }
289
+ float dataFilter_reduceValue(vec4 value) {
290
+ return min(min(value.x, value.y), min(value.z, value.w));
291
+ }
292
+ void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax, DATACATEGORY_TYPE category) {
293
+ if (filter_enabled) {
294
+ if (filter_useSoftMargin) {
295
+ dataFilter_value = dataFilter_reduceValue(
296
+ smoothstep(filter_min, filter_softMin, valueFromMin) *
297
+ (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))
298
+ );
299
+ } else {
300
+ dataFilter_value = dataFilter_reduceValue(
301
+ step(filter_min, valueFromMin) * step(valueFromMax, filter_max)
302
+ );
303
+ }
304
+
305
+ #if DATACATEGORY_CHANNELS == 1 // One 128-bit mask
306
+ int dataFilter_masks = filter_categoryBitMask[int(category / 32.0)];
307
+ #elif DATACATEGORY_CHANNELS == 2 // Two 64-bit masks
308
+ ivec2 dataFilter_masks = ivec2(
309
+ filter_categoryBitMask[int(category.x / 32.0)],
310
+ filter_categoryBitMask[int(category.y / 32.0) + 2]
311
+ );
312
+ #elif DATACATEGORY_CHANNELS == 3 // Three 32-bit masks
313
+ ivec3 dataFilter_masks = filter_categoryBitMask.xyz;
314
+ #else // Four 32-bit masks
315
+ ivec4 dataFilter_masks = filter_categoryBitMask;
316
+ #endif
317
+
318
+ // Shift mask and extract relevant bits
319
+ DATACATEGORY_TYPE dataFilter_bits = DATACATEGORY_TYPE(dataFilter_masks) / pow(DATACATEGORY_TYPE(2.0), mod(category, 32.0));
320
+ dataFilter_bits = mod(floor(dataFilter_bits), 2.0);
321
+
322
+ #if DATACATEGORY_CHANNELS == 1
323
+ if(dataFilter_bits == 0.0) dataFilter_value = 0.0;
324
+ #else
325
+ if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0.0)))) dataFilter_value = 0.0;
326
+ #endif
327
+ } else {
328
+ dataFilter_value = 1.0;
329
+ }
330
+ }
331
+ `;
332
+ var fs2 = glsl`
333
+ uniform bool filter_transformColor;
334
+ in float dataFilter_value;
335
+ `;
336
+ function getUniforms(opts) {
337
+ if (!opts || !("extensions" in opts)) {
338
+ return {};
339
+ }
340
+ const {
341
+ filterRange = [-1, 1],
342
+ filterEnabled = true,
343
+ filterTransformSize = true,
344
+ filterTransformColor = true
345
+ } = opts;
346
+ const filterSoftRange = opts.filterSoftRange || filterRange;
347
+ return {
348
+ ...Number.isFinite(filterRange[0]) ? {
349
+ filter_min: filterRange[0],
350
+ filter_softMin: filterSoftRange[0],
351
+ filter_softMax: filterSoftRange[1],
352
+ filter_max: filterRange[1]
353
+ } : {
354
+ filter_min: filterRange.map((r) => r[0]),
355
+ filter_softMin: filterSoftRange.map((r) => r[0]),
356
+ filter_softMax: filterSoftRange.map((r) => r[1]),
357
+ filter_max: filterRange.map((r) => r[1])
358
+ },
359
+ filter_enabled: filterEnabled,
360
+ filter_useSoftMargin: Boolean(opts.filterSoftRange),
361
+ filter_transformSize: filterEnabled && filterTransformSize,
362
+ filter_transformColor: filterEnabled && filterTransformColor
363
+ };
364
+ }
365
+ function getUniforms64(opts) {
366
+ if (!opts || !("extensions" in opts)) {
367
+ return {};
368
+ }
369
+ const uniforms = getUniforms(opts);
370
+ if (Number.isFinite(uniforms.filter_min)) {
371
+ const min64High = Math.fround(uniforms.filter_min);
372
+ uniforms.filter_min -= min64High;
373
+ uniforms.filter_softMin -= min64High;
374
+ uniforms.filter_min64High = min64High;
375
+ const max64High = Math.fround(uniforms.filter_max);
376
+ uniforms.filter_max -= max64High;
377
+ uniforms.filter_softMax -= max64High;
378
+ uniforms.filter_max64High = max64High;
379
+ } else {
380
+ const min64High = uniforms.filter_min.map(Math.fround);
381
+ uniforms.filter_min = uniforms.filter_min.map((x, i) => x - min64High[i]);
382
+ uniforms.filter_softMin = uniforms.filter_softMin.map((x, i) => x - min64High[i]);
383
+ uniforms.filter_min64High = min64High;
384
+ const max64High = uniforms.filter_max.map(Math.fround);
385
+ uniforms.filter_max = uniforms.filter_max.map((x, i) => x - max64High[i]);
386
+ uniforms.filter_softMax = uniforms.filter_softMax.map((x, i) => x - max64High[i]);
387
+ uniforms.filter_max64High = max64High;
388
+ }
389
+ return uniforms;
390
+ }
391
+ var inject2 = {
392
+ "vs:#main-start": glsl`
393
+ #ifdef DATAFILTER_DOUBLE
394
+ dataFilter_setValue(
395
+ DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,
396
+ DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW,
397
+ DATACATEGORY_ATTRIB
398
+ );
399
+ #else
400
+ dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB, DATACATEGORY_ATTRIB);
401
+ #endif
402
+ `,
403
+ "vs:#main-end": glsl`
404
+ if (dataFilter_value == 0.0) {
405
+ gl_Position = vec4(0.);
406
+ }
407
+ `,
408
+ "vs:DECKGL_FILTER_SIZE": glsl`
409
+ if (filter_transformSize) {
410
+ size = size * dataFilter_value;
411
+ }
412
+ `,
413
+ "fs:DECKGL_FILTER_COLOR": glsl`
414
+ if (dataFilter_value == 0.0) discard;
415
+ if (filter_transformColor) {
416
+ color.a *= dataFilter_value;
417
+ }
418
+ `
419
+ };
420
+ var shaderModule = {
421
+ name: "data-filter",
422
+ vs: vs2,
423
+ fs: fs2,
424
+ inject: inject2,
425
+ getUniforms
426
+ };
427
+ var shaderModule64 = {
428
+ name: "data-filter-fp64",
429
+ vs: vs2,
430
+ fs: fs2,
431
+ inject: inject2,
432
+ getUniforms: getUniforms64
433
+ };
434
+
435
+ // src/data-filter/aggregator.ts
436
+ var import_engine = __toESM(require_engine(), 1);
437
+
438
+ // ../../node_modules/@luma.gl/constants/dist/webgl-constants.js
439
+ var GLEnum;
440
+ (function(GLEnum2) {
242
441
  GLEnum2[GLEnum2["DEPTH_BUFFER_BIT"] = 256] = "DEPTH_BUFFER_BIT";
243
442
  GLEnum2[GLEnum2["STENCIL_BUFFER_BIT"] = 1024] = "STENCIL_BUFFER_BIT";
244
443
  GLEnum2[GLEnum2["COLOR_BUFFER_BIT"] = 16384] = "COLOR_BUFFER_BIT";
@@ -771,15 +970,10 @@ var __exports__ = (() => {
771
970
  GLEnum2[GLEnum2["INVALID_INDEX"] = 4294967295] = "INVALID_INDEX";
772
971
  GLEnum2[GLEnum2["TIMEOUT_IGNORED"] = -1] = "TIMEOUT_IGNORED";
773
972
  GLEnum2[GLEnum2["MAX_CLIENT_WAIT_TIMEOUT_WEBGL"] = 37447] = "MAX_CLIENT_WAIT_TIMEOUT_WEBGL";
774
- GLEnum2[GLEnum2["VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE"] = 35070] = "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE";
775
973
  GLEnum2[GLEnum2["UNMASKED_VENDOR_WEBGL"] = 37445] = "UNMASKED_VENDOR_WEBGL";
776
974
  GLEnum2[GLEnum2["UNMASKED_RENDERER_WEBGL"] = 37446] = "UNMASKED_RENDERER_WEBGL";
777
975
  GLEnum2[GLEnum2["MAX_TEXTURE_MAX_ANISOTROPY_EXT"] = 34047] = "MAX_TEXTURE_MAX_ANISOTROPY_EXT";
778
976
  GLEnum2[GLEnum2["TEXTURE_MAX_ANISOTROPY_EXT"] = 34046] = "TEXTURE_MAX_ANISOTROPY_EXT";
779
- GLEnum2[GLEnum2["SRGB_EXT"] = 35904] = "SRGB_EXT";
780
- GLEnum2[GLEnum2["SRGB_ALPHA_EXT"] = 35906] = "SRGB_ALPHA_EXT";
781
- GLEnum2[GLEnum2["SRGB8_ALPHA8_EXT"] = 35907] = "SRGB8_ALPHA8_EXT";
782
- GLEnum2[GLEnum2["FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT"] = 33296] = "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT";
783
977
  GLEnum2[GLEnum2["R16_EXT"] = 33322] = "R16_EXT";
784
978
  GLEnum2[GLEnum2["RG16_EXT"] = 33324] = "RG16_EXT";
785
979
  GLEnum2[GLEnum2["RGB16_EXT"] = 32852] = "RGB16_EXT";
@@ -841,261 +1035,58 @@ var __exports__ = (() => {
841
1035
  GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR"] = 37842] = "COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR";
842
1036
  GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR"] = 37843] = "COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR";
843
1037
  GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR"] = 37844] = "COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR";
844
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR"] = 37845] = "COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR";
845
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR"] = 37846] = "COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR";
846
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR"] = 37847] = "COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR";
847
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR"] = 37848] = "COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR";
848
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR"] = 37849] = "COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR";
849
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR"] = 37850] = "COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR";
850
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR"] = 37851] = "COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR";
851
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR"] = 37852] = "COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR";
852
- GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR"] = 37853] = "COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR";
853
- GLEnum2[GLEnum2["UNSIGNED_INT_24_8_WEBGL"] = 34042] = "UNSIGNED_INT_24_8_WEBGL";
854
- GLEnum2[GLEnum2["HALF_FLOAT_OES"] = 36193] = "HALF_FLOAT_OES";
855
- GLEnum2[GLEnum2["RGBA32F_EXT"] = 34836] = "RGBA32F_EXT";
856
- GLEnum2[GLEnum2["RGB32F_EXT"] = 34837] = "RGB32F_EXT";
857
- GLEnum2[GLEnum2["FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT"] = 33297] = "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT";
858
- GLEnum2[GLEnum2["UNSIGNED_NORMALIZED_EXT"] = 35863] = "UNSIGNED_NORMALIZED_EXT";
859
- GLEnum2[GLEnum2["MIN_EXT"] = 32775] = "MIN_EXT";
860
- GLEnum2[GLEnum2["MAX_EXT"] = 32776] = "MAX_EXT";
861
- GLEnum2[GLEnum2["FRAGMENT_SHADER_DERIVATIVE_HINT_OES"] = 35723] = "FRAGMENT_SHADER_DERIVATIVE_HINT_OES";
862
- GLEnum2[GLEnum2["COLOR_ATTACHMENT0_WEBGL"] = 36064] = "COLOR_ATTACHMENT0_WEBGL";
863
- GLEnum2[GLEnum2["COLOR_ATTACHMENT1_WEBGL"] = 36065] = "COLOR_ATTACHMENT1_WEBGL";
864
- GLEnum2[GLEnum2["COLOR_ATTACHMENT2_WEBGL"] = 36066] = "COLOR_ATTACHMENT2_WEBGL";
865
- GLEnum2[GLEnum2["COLOR_ATTACHMENT3_WEBGL"] = 36067] = "COLOR_ATTACHMENT3_WEBGL";
866
- GLEnum2[GLEnum2["COLOR_ATTACHMENT4_WEBGL"] = 36068] = "COLOR_ATTACHMENT4_WEBGL";
867
- GLEnum2[GLEnum2["COLOR_ATTACHMENT5_WEBGL"] = 36069] = "COLOR_ATTACHMENT5_WEBGL";
868
- GLEnum2[GLEnum2["COLOR_ATTACHMENT6_WEBGL"] = 36070] = "COLOR_ATTACHMENT6_WEBGL";
869
- GLEnum2[GLEnum2["COLOR_ATTACHMENT7_WEBGL"] = 36071] = "COLOR_ATTACHMENT7_WEBGL";
870
- GLEnum2[GLEnum2["COLOR_ATTACHMENT8_WEBGL"] = 36072] = "COLOR_ATTACHMENT8_WEBGL";
871
- GLEnum2[GLEnum2["COLOR_ATTACHMENT9_WEBGL"] = 36073] = "COLOR_ATTACHMENT9_WEBGL";
872
- GLEnum2[GLEnum2["COLOR_ATTACHMENT10_WEBGL"] = 36074] = "COLOR_ATTACHMENT10_WEBGL";
873
- GLEnum2[GLEnum2["COLOR_ATTACHMENT11_WEBGL"] = 36075] = "COLOR_ATTACHMENT11_WEBGL";
874
- GLEnum2[GLEnum2["COLOR_ATTACHMENT12_WEBGL"] = 36076] = "COLOR_ATTACHMENT12_WEBGL";
875
- GLEnum2[GLEnum2["COLOR_ATTACHMENT13_WEBGL"] = 36077] = "COLOR_ATTACHMENT13_WEBGL";
876
- GLEnum2[GLEnum2["COLOR_ATTACHMENT14_WEBGL"] = 36078] = "COLOR_ATTACHMENT14_WEBGL";
877
- GLEnum2[GLEnum2["COLOR_ATTACHMENT15_WEBGL"] = 36079] = "COLOR_ATTACHMENT15_WEBGL";
878
- GLEnum2[GLEnum2["DRAW_BUFFER0_WEBGL"] = 34853] = "DRAW_BUFFER0_WEBGL";
879
- GLEnum2[GLEnum2["DRAW_BUFFER1_WEBGL"] = 34854] = "DRAW_BUFFER1_WEBGL";
880
- GLEnum2[GLEnum2["DRAW_BUFFER2_WEBGL"] = 34855] = "DRAW_BUFFER2_WEBGL";
881
- GLEnum2[GLEnum2["DRAW_BUFFER3_WEBGL"] = 34856] = "DRAW_BUFFER3_WEBGL";
882
- GLEnum2[GLEnum2["DRAW_BUFFER4_WEBGL"] = 34857] = "DRAW_BUFFER4_WEBGL";
883
- GLEnum2[GLEnum2["DRAW_BUFFER5_WEBGL"] = 34858] = "DRAW_BUFFER5_WEBGL";
884
- GLEnum2[GLEnum2["DRAW_BUFFER6_WEBGL"] = 34859] = "DRAW_BUFFER6_WEBGL";
885
- GLEnum2[GLEnum2["DRAW_BUFFER7_WEBGL"] = 34860] = "DRAW_BUFFER7_WEBGL";
886
- GLEnum2[GLEnum2["DRAW_BUFFER8_WEBGL"] = 34861] = "DRAW_BUFFER8_WEBGL";
887
- GLEnum2[GLEnum2["DRAW_BUFFER9_WEBGL"] = 34862] = "DRAW_BUFFER9_WEBGL";
888
- GLEnum2[GLEnum2["DRAW_BUFFER10_WEBGL"] = 34863] = "DRAW_BUFFER10_WEBGL";
889
- GLEnum2[GLEnum2["DRAW_BUFFER11_WEBGL"] = 34864] = "DRAW_BUFFER11_WEBGL";
890
- GLEnum2[GLEnum2["DRAW_BUFFER12_WEBGL"] = 34865] = "DRAW_BUFFER12_WEBGL";
891
- GLEnum2[GLEnum2["DRAW_BUFFER13_WEBGL"] = 34866] = "DRAW_BUFFER13_WEBGL";
892
- GLEnum2[GLEnum2["DRAW_BUFFER14_WEBGL"] = 34867] = "DRAW_BUFFER14_WEBGL";
893
- GLEnum2[GLEnum2["DRAW_BUFFER15_WEBGL"] = 34868] = "DRAW_BUFFER15_WEBGL";
894
- GLEnum2[GLEnum2["MAX_COLOR_ATTACHMENTS_WEBGL"] = 36063] = "MAX_COLOR_ATTACHMENTS_WEBGL";
895
- GLEnum2[GLEnum2["MAX_DRAW_BUFFERS_WEBGL"] = 34852] = "MAX_DRAW_BUFFERS_WEBGL";
896
- GLEnum2[GLEnum2["VERTEX_ARRAY_BINDING_OES"] = 34229] = "VERTEX_ARRAY_BINDING_OES";
897
- GLEnum2[GLEnum2["QUERY_COUNTER_BITS_EXT"] = 34916] = "QUERY_COUNTER_BITS_EXT";
898
- GLEnum2[GLEnum2["CURRENT_QUERY_EXT"] = 34917] = "CURRENT_QUERY_EXT";
899
- GLEnum2[GLEnum2["QUERY_RESULT_EXT"] = 34918] = "QUERY_RESULT_EXT";
900
- GLEnum2[GLEnum2["QUERY_RESULT_AVAILABLE_EXT"] = 34919] = "QUERY_RESULT_AVAILABLE_EXT";
901
- GLEnum2[GLEnum2["TIME_ELAPSED_EXT"] = 35007] = "TIME_ELAPSED_EXT";
902
- GLEnum2[GLEnum2["TIMESTAMP_EXT"] = 36392] = "TIMESTAMP_EXT";
903
- GLEnum2[GLEnum2["GPU_DISJOINT_EXT"] = 36795] = "GPU_DISJOINT_EXT";
904
- return GLEnum2;
905
- }(GLEnum || {});
906
-
907
- // src/data-filter/data-filter-extension.ts
908
- var import_core4 = __toESM(require_core(), 1);
909
-
910
- // src/data-filter/shader-module.ts
911
- var vs2 = `
912
- uniform DATAFILTER_TYPE filter_min;
913
- uniform DATAFILTER_TYPE filter_softMin;
914
- uniform DATAFILTER_TYPE filter_softMax;
915
- uniform DATAFILTER_TYPE filter_max;
916
- uniform bool filter_useSoftMargin;
917
- uniform bool filter_enabled;
918
- uniform bool filter_transformSize;
919
- uniform ivec4 filter_categoryBitMask;
920
-
921
- #ifdef NON_INSTANCED_MODEL
922
- #define DATAFILTER_ATTRIB filterValues
923
- #define DATAFILTER_ATTRIB_64LOW filterValues64Low
924
- #define DATACATEGORY_ATTRIB filterCategoryValues
925
- #else
926
- #define DATAFILTER_ATTRIB instanceFilterValues
927
- #define DATAFILTER_ATTRIB_64LOW instanceFilterValues64Low
928
- #define DATACATEGORY_ATTRIB instanceFilterCategoryValues
929
- #endif
930
-
931
- in DATAFILTER_TYPE DATAFILTER_ATTRIB;
932
- #ifdef DATAFILTER_DOUBLE
933
- in DATAFILTER_TYPE DATAFILTER_ATTRIB_64LOW;
934
-
935
- uniform DATAFILTER_TYPE filter_min64High;
936
- uniform DATAFILTER_TYPE filter_max64High;
937
- #endif
938
- in DATACATEGORY_TYPE DATACATEGORY_ATTRIB;
939
-
940
- out float dataFilter_value;
941
-
942
- float dataFilter_reduceValue(float value) {
943
- return value;
944
- }
945
- float dataFilter_reduceValue(vec2 value) {
946
- return min(value.x, value.y);
947
- }
948
- float dataFilter_reduceValue(vec3 value) {
949
- return min(min(value.x, value.y), value.z);
950
- }
951
- float dataFilter_reduceValue(vec4 value) {
952
- return min(min(value.x, value.y), min(value.z, value.w));
953
- }
954
- void dataFilter_setValue(DATAFILTER_TYPE valueFromMin, DATAFILTER_TYPE valueFromMax, DATACATEGORY_TYPE category) {
955
- if (filter_enabled) {
956
- if (filter_useSoftMargin) {
957
- dataFilter_value = dataFilter_reduceValue(
958
- smoothstep(filter_min, filter_softMin, valueFromMin) *
959
- (1.0 - smoothstep(filter_softMax, filter_max, valueFromMax))
960
- );
961
- } else {
962
- dataFilter_value = dataFilter_reduceValue(
963
- step(filter_min, valueFromMin) * step(valueFromMax, filter_max)
964
- );
965
- }
966
-
967
- #if DATACATEGORY_CHANNELS == 1 // One 128-bit mask
968
- int dataFilter_masks = filter_categoryBitMask[int(category / 32.0)];
969
- #elif DATACATEGORY_CHANNELS == 2 // Two 64-bit masks
970
- ivec2 dataFilter_masks = ivec2(
971
- filter_categoryBitMask[int(category.x / 32.0)],
972
- filter_categoryBitMask[int(category.y / 32.0) + 2]
973
- );
974
- #elif DATACATEGORY_CHANNELS == 3 // Three 32-bit masks
975
- ivec3 dataFilter_masks = filter_categoryBitMask.xyz;
976
- #else // Four 32-bit masks
977
- ivec4 dataFilter_masks = filter_categoryBitMask;
978
- #endif
979
-
980
- // Shift mask and extract relevant bits
981
- DATACATEGORY_TYPE dataFilter_bits = DATACATEGORY_TYPE(dataFilter_masks) / pow(DATACATEGORY_TYPE(2.0), mod(category, 32.0));
982
- dataFilter_bits = mod(floor(dataFilter_bits), 2.0);
983
-
984
- #if DATACATEGORY_CHANNELS == 1
985
- if(dataFilter_bits == 0.0) dataFilter_value = 0.0;
986
- #else
987
- if(any(equal(dataFilter_bits, DATACATEGORY_TYPE(0.0)))) dataFilter_value = 0.0;
988
- #endif
989
- } else {
990
- dataFilter_value = 1.0;
991
- }
992
- }
993
- `;
994
- var fs2 = `
995
- uniform bool filter_transformColor;
996
- in float dataFilter_value;
997
- `;
998
- function getUniforms(opts) {
999
- if (!opts || !("extensions" in opts)) {
1000
- return {};
1001
- }
1002
- const {
1003
- filterRange = [-1, 1],
1004
- filterEnabled = true,
1005
- filterTransformSize = true,
1006
- filterTransformColor = true
1007
- } = opts;
1008
- const filterSoftRange = opts.filterSoftRange || filterRange;
1009
- return {
1010
- ...Number.isFinite(filterRange[0]) ? {
1011
- filter_min: filterRange[0],
1012
- filter_softMin: filterSoftRange[0],
1013
- filter_softMax: filterSoftRange[1],
1014
- filter_max: filterRange[1]
1015
- } : {
1016
- filter_min: filterRange.map((r) => r[0]),
1017
- filter_softMin: filterSoftRange.map((r) => r[0]),
1018
- filter_softMax: filterSoftRange.map((r) => r[1]),
1019
- filter_max: filterRange.map((r) => r[1])
1020
- },
1021
- filter_enabled: filterEnabled,
1022
- filter_useSoftMargin: Boolean(opts.filterSoftRange),
1023
- filter_transformSize: filterEnabled && filterTransformSize,
1024
- filter_transformColor: filterEnabled && filterTransformColor
1025
- };
1026
- }
1027
- function getUniforms64(opts) {
1028
- if (!opts || !("extensions" in opts)) {
1029
- return {};
1030
- }
1031
- const uniforms = getUniforms(opts);
1032
- if (Number.isFinite(uniforms.filter_min)) {
1033
- const min64High = Math.fround(uniforms.filter_min);
1034
- uniforms.filter_min -= min64High;
1035
- uniforms.filter_softMin -= min64High;
1036
- uniforms.filter_min64High = min64High;
1037
- const max64High = Math.fround(uniforms.filter_max);
1038
- uniforms.filter_max -= max64High;
1039
- uniforms.filter_softMax -= max64High;
1040
- uniforms.filter_max64High = max64High;
1041
- } else {
1042
- const min64High = uniforms.filter_min.map(Math.fround);
1043
- uniforms.filter_min = uniforms.filter_min.map((x, i) => x - min64High[i]);
1044
- uniforms.filter_softMin = uniforms.filter_softMin.map((x, i) => x - min64High[i]);
1045
- uniforms.filter_min64High = min64High;
1046
- const max64High = uniforms.filter_max.map(Math.fround);
1047
- uniforms.filter_max = uniforms.filter_max.map((x, i) => x - max64High[i]);
1048
- uniforms.filter_softMax = uniforms.filter_softMax.map((x, i) => x - max64High[i]);
1049
- uniforms.filter_max64High = max64High;
1050
- }
1051
- return uniforms;
1052
- }
1053
- var inject2 = {
1054
- "vs:#main-start": `
1055
- #ifdef DATAFILTER_DOUBLE
1056
- dataFilter_setValue(
1057
- DATAFILTER_ATTRIB - filter_min64High + DATAFILTER_ATTRIB_64LOW,
1058
- DATAFILTER_ATTRIB - filter_max64High + DATAFILTER_ATTRIB_64LOW,
1059
- DATACATEGORY_ATTRIB
1060
- );
1061
- #else
1062
- dataFilter_setValue(DATAFILTER_ATTRIB, DATAFILTER_ATTRIB, DATACATEGORY_ATTRIB);
1063
- #endif
1064
- `,
1065
- "vs:#main-end": `
1066
- if (dataFilter_value == 0.0) {
1067
- gl_Position = vec4(0.);
1068
- }
1069
- `,
1070
- "vs:DECKGL_FILTER_SIZE": `
1071
- if (filter_transformSize) {
1072
- size = size * dataFilter_value;
1073
- }
1074
- `,
1075
- "fs:DECKGL_FILTER_COLOR": `
1076
- if (dataFilter_value == 0.0) discard;
1077
- if (filter_transformColor) {
1078
- color.a *= dataFilter_value;
1079
- }
1080
- `
1081
- };
1082
- var shaderModule = {
1083
- name: "data-filter",
1084
- vs: vs2,
1085
- fs: fs2,
1086
- inject: inject2,
1087
- getUniforms
1088
- };
1089
- var shaderModule64 = {
1090
- name: "data-filter-fp64",
1091
- vs: vs2,
1092
- fs: fs2,
1093
- inject: inject2,
1094
- getUniforms: getUniforms64
1095
- };
1038
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR"] = 37845] = "COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR";
1039
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR"] = 37846] = "COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR";
1040
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR"] = 37847] = "COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR";
1041
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR"] = 37848] = "COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR";
1042
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR"] = 37849] = "COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR";
1043
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR"] = 37850] = "COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR";
1044
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR"] = 37851] = "COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR";
1045
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR"] = 37852] = "COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR";
1046
+ GLEnum2[GLEnum2["COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR"] = 37853] = "COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR";
1047
+ GLEnum2[GLEnum2["QUERY_COUNTER_BITS_EXT"] = 34916] = "QUERY_COUNTER_BITS_EXT";
1048
+ GLEnum2[GLEnum2["CURRENT_QUERY_EXT"] = 34917] = "CURRENT_QUERY_EXT";
1049
+ GLEnum2[GLEnum2["QUERY_RESULT_EXT"] = 34918] = "QUERY_RESULT_EXT";
1050
+ GLEnum2[GLEnum2["QUERY_RESULT_AVAILABLE_EXT"] = 34919] = "QUERY_RESULT_AVAILABLE_EXT";
1051
+ GLEnum2[GLEnum2["TIME_ELAPSED_EXT"] = 35007] = "TIME_ELAPSED_EXT";
1052
+ GLEnum2[GLEnum2["TIMESTAMP_EXT"] = 36392] = "TIMESTAMP_EXT";
1053
+ GLEnum2[GLEnum2["GPU_DISJOINT_EXT"] = 36795] = "GPU_DISJOINT_EXT";
1054
+ GLEnum2[GLEnum2["COMPLETION_STATUS_KHR"] = 37297] = "COMPLETION_STATUS_KHR";
1055
+ GLEnum2[GLEnum2["DEPTH_CLAMP_EXT"] = 34383] = "DEPTH_CLAMP_EXT";
1056
+ GLEnum2[GLEnum2["FIRST_VERTEX_CONVENTION_WEBGL"] = 36429] = "FIRST_VERTEX_CONVENTION_WEBGL";
1057
+ GLEnum2[GLEnum2["LAST_VERTEX_CONVENTION_WEBGL"] = 36430] = "LAST_VERTEX_CONVENTION_WEBGL";
1058
+ GLEnum2[GLEnum2["PROVOKING_VERTEX_WEBL"] = 36431] = "PROVOKING_VERTEX_WEBL";
1059
+ GLEnum2[GLEnum2["POLYGON_MODE_WEBGL"] = 2880] = "POLYGON_MODE_WEBGL";
1060
+ GLEnum2[GLEnum2["POLYGON_OFFSET_LINE_WEBGL"] = 10754] = "POLYGON_OFFSET_LINE_WEBGL";
1061
+ GLEnum2[GLEnum2["LINE_WEBGL"] = 6913] = "LINE_WEBGL";
1062
+ GLEnum2[GLEnum2["FILL_WEBGL"] = 6914] = "FILL_WEBGL";
1063
+ GLEnum2[GLEnum2["MAX_CLIP_DISTANCES_WEBGL"] = 3378] = "MAX_CLIP_DISTANCES_WEBGL";
1064
+ GLEnum2[GLEnum2["MAX_CULL_DISTANCES_WEBGL"] = 33529] = "MAX_CULL_DISTANCES_WEBGL";
1065
+ GLEnum2[GLEnum2["MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL"] = 33530] = "MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL";
1066
+ GLEnum2[GLEnum2["CLIP_DISTANCE0_WEBGL"] = 12288] = "CLIP_DISTANCE0_WEBGL";
1067
+ GLEnum2[GLEnum2["CLIP_DISTANCE1_WEBGL"] = 12289] = "CLIP_DISTANCE1_WEBGL";
1068
+ GLEnum2[GLEnum2["CLIP_DISTANCE2_WEBGL"] = 12290] = "CLIP_DISTANCE2_WEBGL";
1069
+ GLEnum2[GLEnum2["CLIP_DISTANCE3_WEBGL"] = 12291] = "CLIP_DISTANCE3_WEBGL";
1070
+ GLEnum2[GLEnum2["CLIP_DISTANCE4_WEBGL"] = 12292] = "CLIP_DISTANCE4_WEBGL";
1071
+ GLEnum2[GLEnum2["CLIP_DISTANCE5_WEBGL"] = 12293] = "CLIP_DISTANCE5_WEBGL";
1072
+ GLEnum2[GLEnum2["CLIP_DISTANCE6_WEBGL"] = 12294] = "CLIP_DISTANCE6_WEBGL";
1073
+ GLEnum2[GLEnum2["CLIP_DISTANCE7_WEBGL"] = 12295] = "CLIP_DISTANCE7_WEBGL";
1074
+ GLEnum2[GLEnum2["POLYGON_OFFSET_CLAMP_EXT"] = 36379] = "POLYGON_OFFSET_CLAMP_EXT";
1075
+ GLEnum2[GLEnum2["LOWER_LEFT_EXT"] = 36001] = "LOWER_LEFT_EXT";
1076
+ GLEnum2[GLEnum2["UPPER_LEFT_EXT"] = 36002] = "UPPER_LEFT_EXT";
1077
+ GLEnum2[GLEnum2["NEGATIVE_ONE_TO_ONE_EXT"] = 37726] = "NEGATIVE_ONE_TO_ONE_EXT";
1078
+ GLEnum2[GLEnum2["ZERO_TO_ONE_EXT"] = 37727] = "ZERO_TO_ONE_EXT";
1079
+ GLEnum2[GLEnum2["CLIP_ORIGIN_EXT"] = 37724] = "CLIP_ORIGIN_EXT";
1080
+ GLEnum2[GLEnum2["CLIP_DEPTH_MODE_EXT"] = 37725] = "CLIP_DEPTH_MODE_EXT";
1081
+ GLEnum2[GLEnum2["SRC1_COLOR_WEBGL"] = 35065] = "SRC1_COLOR_WEBGL";
1082
+ GLEnum2[GLEnum2["SRC1_ALPHA_WEBGL"] = 34185] = "SRC1_ALPHA_WEBGL";
1083
+ GLEnum2[GLEnum2["ONE_MINUS_SRC1_COLOR_WEBGL"] = 35066] = "ONE_MINUS_SRC1_COLOR_WEBGL";
1084
+ GLEnum2[GLEnum2["ONE_MINUS_SRC1_ALPHA_WEBGL"] = 35067] = "ONE_MINUS_SRC1_ALPHA_WEBGL";
1085
+ GLEnum2[GLEnum2["MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL"] = 35068] = "MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL";
1086
+ GLEnum2[GLEnum2["MIRROR_CLAMP_TO_EDGE_EXT"] = 34627] = "MIRROR_CLAMP_TO_EDGE_EXT";
1087
+ })(GLEnum || (GLEnum = {}));
1096
1088
 
1097
1089
  // src/data-filter/aggregator.ts
1098
- var import_engine = __toESM(require_engine(), 1);
1099
1090
  var AGGREGATE_VS = `#version 300 es
1100
1091
  #define SHADER_NAME data-filter-vertex-shader
1101
1092
 
@@ -1143,11 +1134,12 @@ void main() {
1143
1134
  fragColor = vColor;
1144
1135
  }
1145
1136
  `;
1137
+ var FLOAT_TARGET_FEATURES = [
1138
+ "float32-renderable-webgl",
1139
+ "texture-blend-float-webgl"
1140
+ ];
1146
1141
  function supportsFloatTarget(device) {
1147
- const gl = device.gl;
1148
- return Boolean(
1149
- gl.getExtension("EXT_float_blend") && (gl.getExtension("EXT_color_buffer_float") || gl.getExtension("WEBGL_color_buffer_float"))
1150
- );
1142
+ return FLOAT_TARGET_FEATURES.every((feature) => device.features.has(feature));
1151
1143
  }
1152
1144
  function getFramebuffer(device, useFloatTarget) {
1153
1145
  if (useFloatTarget) {
@@ -1156,7 +1148,7 @@ void main() {
1156
1148
  height: 1,
1157
1149
  colorAttachments: [
1158
1150
  device.createTexture({
1159
- format: device.info.type === "webgl2" ? "rgba32float" : "rgba8unorm",
1151
+ format: "rgba32float",
1160
1152
  type: GLEnum.FLOAT,
1161
1153
  mipmaps: false
1162
1154
  })
@@ -1238,7 +1230,7 @@ void main() {
1238
1230
  attributeManager.add({
1239
1231
  filterValues: {
1240
1232
  size: filterSize,
1241
- type: fp642 ? GLEnum.DOUBLE : GLEnum.FLOAT,
1233
+ type: fp642 ? "float64" : "float32",
1242
1234
  accessor: "getFilterValue",
1243
1235
  shaderAttributes: {
1244
1236
  filterValues: {
@@ -1251,7 +1243,6 @@ void main() {
1251
1243
  },
1252
1244
  filterCategoryValues: {
1253
1245
  size: categorySize,
1254
- type: GLEnum.FLOAT,
1255
1246
  accessor: "getFilterCategory",
1256
1247
  transform: categorySize === 1 ? (d) => extension._getCategoryKey.call(this, d, 0) : (d) => d.map((x, i) => extension._getCategoryKey.call(this, x, i)),
1257
1248
  shaderAttributes: {
@@ -1272,8 +1263,7 @@ void main() {
1272
1263
  filterIndices: {
1273
1264
  size: useFloatTarget ? 1 : 2,
1274
1265
  vertexOffset: 1,
1275
- type: GLEnum.UNSIGNED_BYTE,
1276
- normalized: true,
1266
+ type: "unorm8",
1277
1267
  accessor: (object, { index }) => {
1278
1268
  const i = object && object.__source ? object.__source.index : index;
1279
1269
  return useFloatTarget ? (i + 1) % 255 : [(i + 1) % 255, Math.floor(i / 255) % 255];
@@ -1402,13 +1392,8 @@ void main() {
1402
1392
  // src/fp64/fp64-extension.ts
1403
1393
  var import_core6 = __toESM(require_core(), 1);
1404
1394
 
1405
- // ../../node_modules/@luma.gl/shadertools/dist/lib/glsl-utils/highlight.js
1406
- var glsl = (x) => `${x}`;
1407
-
1408
1395
  // ../../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-utils.js
1409
- function fp64ify(a) {
1410
- let out = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
1411
- let startIndex = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;
1396
+ function fp64ify(a, out = [], startIndex = 0) {
1412
1397
  const hiPart = Math.fround(a);
1413
1398
  const loPart = a - hiPart;
1414
1399
  out[startIndex] = hiPart;
@@ -1429,178 +1414,143 @@ void main() {
1429
1414
  return matrixFP64;
1430
1415
  }
1431
1416
 
1432
- // ../../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-arithmetic.glsl.js
1433
- var fp64arithmeticShader = glsl`\
1434
- uniform float ONE;
1435
-
1436
- /*
1437
- About LUMA_FP64_CODE_ELIMINATION_WORKAROUND
1438
-
1439
- The purpose of this workaround is to prevent shader compilers from
1440
- optimizing away necessary arithmetic operations by swapping their sequences
1441
- or transform the equation to some 'equivalent' form.
1442
-
1443
- The method is to multiply an artifical variable, ONE, which will be known to
1444
- the compiler to be 1 only at runtime. The whole expression is then represented
1445
- as a polynomial with respective to ONE. In the coefficients of all terms, only one a
1446
- and one b should appear
1447
-
1448
- err = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE
1449
- */
1450
-
1451
- // Divide float number to high and low floats to extend fraction bits
1417
+ // ../../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-arithmetic-glsl.js
1418
+ var fp64arithmeticShader = `uniform float ONE;
1452
1419
  vec2 split(float a) {
1453
- const float SPLIT = 4097.0;
1454
- float t = a * SPLIT;
1420
+ const float SPLIT = 4097.0;
1421
+ float t = a * SPLIT;
1455
1422
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1456
- float a_hi = t * ONE - (t - a);
1457
- float a_lo = a * ONE - a_hi;
1423
+ float a_hi = t * ONE - (t - a);
1424
+ float a_lo = a * ONE - a_hi;
1458
1425
  #else
1459
- float a_hi = t - (t - a);
1460
- float a_lo = a - a_hi;
1426
+ float a_hi = t - (t - a);
1427
+ float a_lo = a - a_hi;
1461
1428
  #endif
1462
- return vec2(a_hi, a_lo);
1429
+ return vec2(a_hi, a_lo);
1463
1430
  }
1464
-
1465
- // Divide float number again when high float uses too many fraction bits
1466
1431
  vec2 split2(vec2 a) {
1467
- vec2 b = split(a.x);
1468
- b.y += a.y;
1469
- return b;
1432
+ vec2 b = split(a.x);
1433
+ b.y += a.y;
1434
+ return b;
1470
1435
  }
1471
-
1472
- // Special sum operation when a > b
1473
1436
  vec2 quickTwoSum(float a, float b) {
1474
1437
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1475
- float sum = (a + b) * ONE;
1476
- float err = b - (sum - a) * ONE;
1438
+ float sum = (a + b) * ONE;
1439
+ float err = b - (sum - a) * ONE;
1477
1440
  #else
1478
- float sum = a + b;
1479
- float err = b - (sum - a);
1441
+ float sum = a + b;
1442
+ float err = b - (sum - a);
1480
1443
  #endif
1481
- return vec2(sum, err);
1444
+ return vec2(sum, err);
1482
1445
  }
1483
-
1484
- // General sum operation
1485
1446
  vec2 twoSum(float a, float b) {
1486
- float s = (a + b);
1447
+ float s = (a + b);
1487
1448
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1488
- float v = (s * ONE - a) * ONE;
1489
- float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
1449
+ float v = (s * ONE - a) * ONE;
1450
+ float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
1490
1451
  #else
1491
- float v = s - a;
1492
- float err = (a - (s - v)) + (b - v);
1452
+ float v = s - a;
1453
+ float err = (a - (s - v)) + (b - v);
1493
1454
  #endif
1494
- return vec2(s, err);
1455
+ return vec2(s, err);
1495
1456
  }
1496
-
1497
1457
  vec2 twoSub(float a, float b) {
1498
- float s = (a - b);
1458
+ float s = (a - b);
1499
1459
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1500
- float v = (s * ONE - a) * ONE;
1501
- float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
1460
+ float v = (s * ONE - a) * ONE;
1461
+ float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
1502
1462
  #else
1503
- float v = s - a;
1504
- float err = (a - (s - v)) - (b + v);
1463
+ float v = s - a;
1464
+ float err = (a - (s - v)) - (b + v);
1505
1465
  #endif
1506
- return vec2(s, err);
1466
+ return vec2(s, err);
1507
1467
  }
1508
-
1509
1468
  vec2 twoSqr(float a) {
1510
- float prod = a * a;
1511
- vec2 a_fp64 = split(a);
1469
+ float prod = a * a;
1470
+ vec2 a_fp64 = split(a);
1512
1471
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1513
- float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
1514
- a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
1472
+ float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
1473
+ a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
1515
1474
  #else
1516
- float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
1475
+ float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
1517
1476
  #endif
1518
- return vec2(prod, err);
1477
+ return vec2(prod, err);
1519
1478
  }
1520
-
1521
1479
  vec2 twoProd(float a, float b) {
1522
- float prod = a * b;
1523
- vec2 a_fp64 = split(a);
1524
- vec2 b_fp64 = split(b);
1525
- float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
1526
- a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
1527
- return vec2(prod, err);
1480
+ float prod = a * b;
1481
+ vec2 a_fp64 = split(a);
1482
+ vec2 b_fp64 = split(b);
1483
+ float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
1484
+ a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
1485
+ return vec2(prod, err);
1528
1486
  }
1529
-
1530
1487
  vec2 sum_fp64(vec2 a, vec2 b) {
1531
- vec2 s, t;
1532
- s = twoSum(a.x, b.x);
1533
- t = twoSum(a.y, b.y);
1534
- s.y += t.x;
1535
- s = quickTwoSum(s.x, s.y);
1536
- s.y += t.y;
1537
- s = quickTwoSum(s.x, s.y);
1538
- return s;
1488
+ vec2 s, t;
1489
+ s = twoSum(a.x, b.x);
1490
+ t = twoSum(a.y, b.y);
1491
+ s.y += t.x;
1492
+ s = quickTwoSum(s.x, s.y);
1493
+ s.y += t.y;
1494
+ s = quickTwoSum(s.x, s.y);
1495
+ return s;
1539
1496
  }
1540
-
1541
1497
  vec2 sub_fp64(vec2 a, vec2 b) {
1542
- vec2 s, t;
1543
- s = twoSub(a.x, b.x);
1544
- t = twoSub(a.y, b.y);
1545
- s.y += t.x;
1546
- s = quickTwoSum(s.x, s.y);
1547
- s.y += t.y;
1548
- s = quickTwoSum(s.x, s.y);
1549
- return s;
1498
+ vec2 s, t;
1499
+ s = twoSub(a.x, b.x);
1500
+ t = twoSub(a.y, b.y);
1501
+ s.y += t.x;
1502
+ s = quickTwoSum(s.x, s.y);
1503
+ s.y += t.y;
1504
+ s = quickTwoSum(s.x, s.y);
1505
+ return s;
1550
1506
  }
1551
-
1552
1507
  vec2 mul_fp64(vec2 a, vec2 b) {
1553
- vec2 prod = twoProd(a.x, b.x);
1554
- // y component is for the error
1555
- prod.y += a.x * b.y;
1508
+ vec2 prod = twoProd(a.x, b.x);
1509
+ prod.y += a.x * b.y;
1556
1510
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
1557
- prod = split2(prod);
1511
+ prod = split2(prod);
1558
1512
  #endif
1559
- prod = quickTwoSum(prod.x, prod.y);
1560
- prod.y += a.y * b.x;
1513
+ prod = quickTwoSum(prod.x, prod.y);
1514
+ prod.y += a.y * b.x;
1561
1515
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
1562
- prod = split2(prod);
1516
+ prod = split2(prod);
1563
1517
  #endif
1564
- prod = quickTwoSum(prod.x, prod.y);
1565
- return prod;
1518
+ prod = quickTwoSum(prod.x, prod.y);
1519
+ return prod;
1566
1520
  }
1567
-
1568
1521
  vec2 div_fp64(vec2 a, vec2 b) {
1569
- float xn = 1.0 / b.x;
1522
+ float xn = 1.0 / b.x;
1570
1523
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
1571
- vec2 yn = mul_fp64(a, vec2(xn, 0));
1524
+ vec2 yn = mul_fp64(a, vec2(xn, 0));
1572
1525
  #else
1573
- vec2 yn = a * xn;
1526
+ vec2 yn = a * xn;
1574
1527
  #endif
1575
- float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
1576
- vec2 prod = twoProd(xn, diff);
1577
- return sum_fp64(yn, prod);
1528
+ float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
1529
+ vec2 prod = twoProd(xn, diff);
1530
+ return sum_fp64(yn, prod);
1578
1531
  }
1579
-
1580
1532
  vec2 sqrt_fp64(vec2 a) {
1581
- if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
1582
- if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
1583
-
1584
- float x = 1.0 / sqrt(a.x);
1585
- float yn = a.x * x;
1533
+ if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
1534
+ if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
1535
+ float x = 1.0 / sqrt(a.x);
1536
+ float yn = a.x * x;
1586
1537
  #if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
1587
- vec2 yn_sqr = twoSqr(yn) * ONE;
1538
+ vec2 yn_sqr = twoSqr(yn) * ONE;
1588
1539
  #else
1589
- vec2 yn_sqr = twoSqr(yn);
1540
+ vec2 yn_sqr = twoSqr(yn);
1590
1541
  #endif
1591
- float diff = sub_fp64(a, yn_sqr).x;
1592
- vec2 prod = twoProd(x * 0.5, diff);
1542
+ float diff = sub_fp64(a, yn_sqr).x;
1543
+ vec2 prod = twoProd(x * 0.5, diff);
1593
1544
  #if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
1594
- return sum_fp64(split(yn), prod);
1545
+ return sum_fp64(split(yn), prod);
1595
1546
  #else
1596
- return sum_fp64(vec2(yn, 0.0), prod);
1547
+ return sum_fp64(vec2(yn, 0.0), prod);
1597
1548
  #endif
1598
1549
  }
1599
1550
  `;
1600
1551
 
1601
- // ../../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-functions.glsl.js
1602
- var fp64functionShader = glsl`\
1603
- const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
1552
+ // ../../node_modules/@luma.gl/shadertools/dist/modules-webgl1/math/fp64/fp64-functions-glsl.js
1553
+ var fp64functionShader = `const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
1604
1554
  const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
1605
1555
  const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
1606
1556
  const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
@@ -1610,664 +1560,508 @@ const vec2 PI_16_FP64 = vec2(0.19634954631328583, -5.463923757886846e-9);
1610
1560
  const vec2 PI_16_2_FP64 = vec2(0.39269909262657166, -1.0927847515773692e-8);
1611
1561
  const vec2 PI_16_3_FP64 = vec2(0.5890486240386963, -1.4906100798128818e-9);
1612
1562
  const vec2 PI_180_FP64 = vec2(0.01745329238474369, 1.3519960498364902e-10);
1613
-
1614
1563
  const vec2 SIN_TABLE_0_FP64 = vec2(0.19509032368659973, -1.6704714833615242e-9);
1615
1564
  const vec2 SIN_TABLE_1_FP64 = vec2(0.3826834261417389, 6.22335089017767e-9);
1616
1565
  const vec2 SIN_TABLE_2_FP64 = vec2(0.5555702447891235, -1.1769521357507529e-8);
1617
1566
  const vec2 SIN_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617041793133e-8);
1618
-
1619
1567
  const vec2 COS_TABLE_0_FP64 = vec2(0.9807852506637573, 2.9739473106360492e-8);
1620
1568
  const vec2 COS_TABLE_1_FP64 = vec2(0.9238795042037964, 2.8307490351764386e-8);
1621
1569
  const vec2 COS_TABLE_2_FP64 = vec2(0.8314695954322815, 1.6870263741530778e-8);
1622
1570
  const vec2 COS_TABLE_3_FP64 = vec2(0.7071067690849304, 1.2101617152815436e-8);
1623
-
1624
- const vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09); // 1/3!
1625
- const vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09); // 1/4!
1626
- const vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10); // 1/5!
1627
- const vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11); // 1/6!
1628
- const vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12); // 1/7!
1629
- const vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13); // 1/8!
1630
- const vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14); // 1/9!
1631
- const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15); // 1/10!
1632
-
1571
+ const vec2 INVERSE_FACTORIAL_3_FP64 = vec2(1.666666716337204e-01, -4.967053879312289e-09);
1572
+ const vec2 INVERSE_FACTORIAL_4_FP64 = vec2(4.16666679084301e-02, -1.2417634698280722e-09);
1573
+ const vec2 INVERSE_FACTORIAL_5_FP64 = vec2(8.333333767950535e-03, -4.34617203337595e-10);
1574
+ const vec2 INVERSE_FACTORIAL_6_FP64 = vec2(1.3888889225199819e-03, -3.3631094437103215e-11);
1575
+ const vec2 INVERSE_FACTORIAL_7_FP64 = vec2(1.9841270113829523e-04, -2.725596874933456e-12);
1576
+ const vec2 INVERSE_FACTORIAL_8_FP64 = vec2(2.4801587642286904e-05, -3.406996025904184e-13);
1577
+ const vec2 INVERSE_FACTORIAL_9_FP64 = vec2(2.75573188446287533e-06, 3.7935713937038186e-14);
1578
+ const vec2 INVERSE_FACTORIAL_10_FP64 = vec2(2.755731998149713e-07, -7.575112367869873e-15);
1633
1579
  float nint(float d) {
1634
- if (d == floor(d)) return d;
1635
- return floor(d + 0.5);
1580
+ if (d == floor(d)) return d;
1581
+ return floor(d + 0.5);
1636
1582
  }
1637
-
1638
1583
  vec2 nint_fp64(vec2 a) {
1639
- float hi = nint(a.x);
1640
- float lo;
1641
- vec2 tmp;
1642
- if (hi == a.x) {
1643
- lo = nint(a.y);
1644
- tmp = quickTwoSum(hi, lo);
1645
- } else {
1646
- lo = 0.0;
1647
- if (abs(hi - a.x) == 0.5 && a.y < 0.0) {
1648
- hi -= 1.0;
1649
- }
1650
- tmp = vec2(hi, lo);
1651
- }
1652
- return tmp;
1584
+ float hi = nint(a.x);
1585
+ float lo;
1586
+ vec2 tmp;
1587
+ if (hi == a.x) {
1588
+ lo = nint(a.y);
1589
+ tmp = quickTwoSum(hi, lo);
1590
+ } else {
1591
+ lo = 0.0;
1592
+ if (abs(hi - a.x) == 0.5 && a.y < 0.0) {
1593
+ hi -= 1.0;
1594
+ }
1595
+ tmp = vec2(hi, lo);
1596
+ }
1597
+ return tmp;
1653
1598
  }
1654
-
1655
- /* k_power controls how much range reduction we would like to have
1656
- Range reduction uses the following method:
1657
- assume a = k_power * r + m * log(2), k and m being integers.
1658
- Set k_power = 4 (we can choose other k to trade accuracy with performance.
1659
- we only need to calculate exp(r) and using exp(a) = 2^m * exp(r)^k_power;
1660
- */
1661
-
1662
1599
  vec2 exp_fp64(vec2 a) {
1663
- // We need to make sure these two numbers match
1664
- // as bit-wise shift is not available in GLSL 1.0
1665
- const int k_power = 4;
1666
- const float k = 16.0;
1667
-
1668
- const float inv_k = 1.0 / k;
1669
-
1670
- if (a.x <= -88.0) return vec2(0.0, 0.0);
1671
- if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);
1672
- if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);
1673
- if (a.x == 1.0 && a.y == 0.0) return E_FP64;
1674
-
1675
- float m = floor(a.x / LOG2_FP64.x + 0.5);
1676
- vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;
1677
- vec2 s, t, p;
1678
-
1679
- p = mul_fp64(r, r);
1680
- s = sum_fp64(r, p * 0.5);
1681
- p = mul_fp64(p, r);
1682
- t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);
1683
-
1684
- s = sum_fp64(s, t);
1685
- p = mul_fp64(p, r);
1686
- t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);
1687
-
1688
- s = sum_fp64(s, t);
1689
- p = mul_fp64(p, r);
1690
- t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
1691
-
1692
- // s = sum_fp64(s, t);
1693
- // p = mul_fp64(p, r);
1694
- // t = mul_fp64(p, INVERSE_FACTORIAL_6_FP64);
1695
-
1696
- // s = sum_fp64(s, t);
1697
- // p = mul_fp64(p, r);
1698
- // t = mul_fp64(p, INVERSE_FACTORIAL_7_FP64);
1699
-
1700
- s = sum_fp64(s, t);
1701
-
1702
-
1703
- // At this point, s = exp(r) - 1; but after following 4 recursions, we will get exp(r) ^ 512 - 1.
1704
- for (int i = 0; i < k_power; i++) {
1705
- s = sum_fp64(s * 2.0, mul_fp64(s, s));
1706
- }
1707
-
1600
+ const int k_power = 4;
1601
+ const float k = 16.0;
1602
+ const float inv_k = 1.0 / k;
1603
+ if (a.x <= -88.0) return vec2(0.0, 0.0);
1604
+ if (a.x >= 88.0) return vec2(1.0 / 0.0, 1.0 / 0.0);
1605
+ if (a.x == 0.0 && a.y == 0.0) return vec2(1.0, 0.0);
1606
+ if (a.x == 1.0 && a.y == 0.0) return E_FP64;
1607
+ float m = floor(a.x / LOG2_FP64.x + 0.5);
1608
+ vec2 r = sub_fp64(a, mul_fp64(LOG2_FP64, vec2(m, 0.0))) * inv_k;
1609
+ vec2 s, t, p;
1610
+ p = mul_fp64(r, r);
1611
+ s = sum_fp64(r, p * 0.5);
1612
+ p = mul_fp64(p, r);
1613
+ t = mul_fp64(p, INVERSE_FACTORIAL_3_FP64);
1614
+ s = sum_fp64(s, t);
1615
+ p = mul_fp64(p, r);
1616
+ t = mul_fp64(p, INVERSE_FACTORIAL_4_FP64);
1617
+ s = sum_fp64(s, t);
1618
+ p = mul_fp64(p, r);
1619
+ t = mul_fp64(p, INVERSE_FACTORIAL_5_FP64);
1620
+ s = sum_fp64(s, t);
1621
+ for (int i = 0; i < k_power; i++) {
1622
+ s = sum_fp64(s * 2.0, mul_fp64(s, s));
1623
+ }
1708
1624
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
1709
- s = sum_fp64(s, vec2(ONE, 0.0));
1625
+ s = sum_fp64(s, vec2(ONE, 0.0));
1710
1626
  #else
1711
- s = sum_fp64(s, vec2(1.0, 0.0));
1627
+ s = sum_fp64(s, vec2(1.0, 0.0));
1712
1628
  #endif
1713
-
1714
- return s * pow(2.0, m);
1715
- // return r;
1629
+ return s * pow(2.0, m);
1716
1630
  }
1717
-
1718
1631
  vec2 log_fp64(vec2 a)
1719
1632
  {
1720
- if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);
1721
- if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
1722
- vec2 x = vec2(log(a.x), 0.0);
1723
- vec2 s;
1633
+ if (a.x == 1.0 && a.y == 0.0) return vec2(0.0, 0.0);
1634
+ if (a.x <= 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
1635
+ vec2 x = vec2(log(a.x), 0.0);
1636
+ vec2 s;
1724
1637
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
1725
- s = vec2(ONE, 0.0);
1638
+ s = vec2(ONE, 0.0);
1726
1639
  #else
1727
- s = vec2(1.0, 0.0);
1640
+ s = vec2(1.0, 0.0);
1728
1641
  #endif
1729
-
1730
- x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);
1731
- return x;
1642
+ x = sub_fp64(sum_fp64(x, mul_fp64(a, exp_fp64(-x))), s);
1643
+ return x;
1732
1644
  }
1733
-
1734
1645
  vec2 sin_taylor_fp64(vec2 a) {
1735
- vec2 r, s, t, x;
1736
-
1737
- if (a.x == 0.0 && a.y == 0.0) {
1738
- return vec2(0.0, 0.0);
1739
- }
1740
-
1741
- x = -mul_fp64(a, a);
1742
- s = a;
1743
- r = a;
1744
-
1745
- r = mul_fp64(r, x);
1746
- t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);
1747
- s = sum_fp64(s, t);
1748
-
1749
- r = mul_fp64(r, x);
1750
- t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
1751
- s = sum_fp64(s, t);
1752
-
1753
- /* keep the following commented code in case we need them
1754
- for extra accuracy from the Taylor expansion*/
1755
-
1756
- // r = mul_fp64(r, x);
1757
- // t = mul_fp64(r, INVERSE_FACTORIAL_7_FP64);
1758
- // s = sum_fp64(s, t);
1759
-
1760
- // r = mul_fp64(r, x);
1761
- // t = mul_fp64(r, INVERSE_FACTORIAL_9_FP64);
1762
- // s = sum_fp64(s, t);
1763
-
1764
- return s;
1646
+ vec2 r, s, t, x;
1647
+ if (a.x == 0.0 && a.y == 0.0) {
1648
+ return vec2(0.0, 0.0);
1649
+ }
1650
+ x = -mul_fp64(a, a);
1651
+ s = a;
1652
+ r = a;
1653
+ r = mul_fp64(r, x);
1654
+ t = mul_fp64(r, INVERSE_FACTORIAL_3_FP64);
1655
+ s = sum_fp64(s, t);
1656
+ r = mul_fp64(r, x);
1657
+ t = mul_fp64(r, INVERSE_FACTORIAL_5_FP64);
1658
+ s = sum_fp64(s, t);
1659
+ return s;
1765
1660
  }
1766
-
1767
1661
  vec2 cos_taylor_fp64(vec2 a) {
1768
- vec2 r, s, t, x;
1769
-
1770
- if (a.x == 0.0 && a.y == 0.0) {
1771
- return vec2(1.0, 0.0);
1772
- }
1773
-
1774
- x = -mul_fp64(a, a);
1775
- r = x;
1776
- s = sum_fp64(vec2(1.0, 0.0), r * 0.5);
1777
-
1778
- r = mul_fp64(r, x);
1779
- t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);
1780
- s = sum_fp64(s, t);
1781
-
1782
- r = mul_fp64(r, x);
1783
- t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
1784
- s = sum_fp64(s, t);
1785
-
1786
- /* keep the following commented code in case we need them
1787
- for extra accuracy from the Taylor expansion*/
1788
-
1789
- // r = mul_fp64(r, x);
1790
- // t = mul_fp64(r, INVERSE_FACTORIAL_8_FP64);
1791
- // s = sum_fp64(s, t);
1792
-
1793
- // r = mul_fp64(r, x);
1794
- // t = mul_fp64(r, INVERSE_FACTORIAL_10_FP64);
1795
- // s = sum_fp64(s, t);
1796
-
1797
- return s;
1662
+ vec2 r, s, t, x;
1663
+ if (a.x == 0.0 && a.y == 0.0) {
1664
+ return vec2(1.0, 0.0);
1665
+ }
1666
+ x = -mul_fp64(a, a);
1667
+ r = x;
1668
+ s = sum_fp64(vec2(1.0, 0.0), r * 0.5);
1669
+ r = mul_fp64(r, x);
1670
+ t = mul_fp64(r, INVERSE_FACTORIAL_4_FP64);
1671
+ s = sum_fp64(s, t);
1672
+ r = mul_fp64(r, x);
1673
+ t = mul_fp64(r, INVERSE_FACTORIAL_6_FP64);
1674
+ s = sum_fp64(s, t);
1675
+ return s;
1798
1676
  }
1799
-
1800
1677
  void sincos_taylor_fp64(vec2 a, out vec2 sin_t, out vec2 cos_t) {
1801
- if (a.x == 0.0 && a.y == 0.0) {
1802
- sin_t = vec2(0.0, 0.0);
1803
- cos_t = vec2(1.0, 0.0);
1804
- }
1805
-
1806
- sin_t = sin_taylor_fp64(a);
1807
- cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
1678
+ if (a.x == 0.0 && a.y == 0.0) {
1679
+ sin_t = vec2(0.0, 0.0);
1680
+ cos_t = vec2(1.0, 0.0);
1681
+ }
1682
+ sin_t = sin_taylor_fp64(a);
1683
+ cos_t = sqrt_fp64(sub_fp64(vec2(1.0, 0.0), mul_fp64(sin_t, sin_t)));
1808
1684
  }
1809
-
1810
1685
  vec2 sin_fp64(vec2 a) {
1811
- if (a.x == 0.0 && a.y == 0.0) {
1812
- return vec2(0.0, 0.0);
1813
- }
1814
-
1815
- // 2pi range reduction
1816
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1817
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1818
-
1819
- vec2 t;
1820
- float q = floor(r.x / PI_2_FP64.x + 0.5);
1821
- int j = int(q);
1822
-
1823
- if (j < -2 || j > 2) {
1824
- return vec2(0.0 / 0.0, 0.0 / 0.0);
1825
- }
1826
-
1827
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1828
-
1829
- q = floor(t.x / PI_16_FP64.x + 0.5);
1830
- int k = int(q);
1831
-
1832
- if (k == 0) {
1833
- if (j == 0) {
1834
- return sin_taylor_fp64(t);
1835
- } else if (j == 1) {
1836
- return cos_taylor_fp64(t);
1837
- } else if (j == -1) {
1838
- return -cos_taylor_fp64(t);
1839
- } else {
1840
- return -sin_taylor_fp64(t);
1841
- }
1842
- }
1843
-
1844
- int abs_k = int(abs(float(k)));
1845
-
1846
- if (abs_k > 4) {
1847
- return vec2(0.0 / 0.0, 0.0 / 0.0);
1848
- } else {
1849
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1850
- }
1851
-
1852
- vec2 u = vec2(0.0, 0.0);
1853
- vec2 v = vec2(0.0, 0.0);
1854
-
1686
+ if (a.x == 0.0 && a.y == 0.0) {
1687
+ return vec2(0.0, 0.0);
1688
+ }
1689
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1690
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1691
+ vec2 t;
1692
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
1693
+ int j = int(q);
1694
+ if (j < -2 || j > 2) {
1695
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1696
+ }
1697
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1698
+ q = floor(t.x / PI_16_FP64.x + 0.5);
1699
+ int k = int(q);
1700
+ if (k == 0) {
1701
+ if (j == 0) {
1702
+ return sin_taylor_fp64(t);
1703
+ } else if (j == 1) {
1704
+ return cos_taylor_fp64(t);
1705
+ } else if (j == -1) {
1706
+ return -cos_taylor_fp64(t);
1707
+ } else {
1708
+ return -sin_taylor_fp64(t);
1709
+ }
1710
+ }
1711
+ int abs_k = int(abs(float(k)));
1712
+ if (abs_k > 4) {
1713
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1714
+ } else {
1715
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1716
+ }
1717
+ vec2 u = vec2(0.0, 0.0);
1718
+ vec2 v = vec2(0.0, 0.0);
1855
1719
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
1856
- if (abs(float(abs_k) - 1.0) < 0.5) {
1857
- u = COS_TABLE_0_FP64;
1858
- v = SIN_TABLE_0_FP64;
1859
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
1860
- u = COS_TABLE_1_FP64;
1861
- v = SIN_TABLE_1_FP64;
1862
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
1863
- u = COS_TABLE_2_FP64;
1864
- v = SIN_TABLE_2_FP64;
1865
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
1866
- u = COS_TABLE_3_FP64;
1867
- v = SIN_TABLE_3_FP64;
1868
- }
1720
+ if (abs(float(abs_k) - 1.0) < 0.5) {
1721
+ u = COS_TABLE_0_FP64;
1722
+ v = SIN_TABLE_0_FP64;
1723
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
1724
+ u = COS_TABLE_1_FP64;
1725
+ v = SIN_TABLE_1_FP64;
1726
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
1727
+ u = COS_TABLE_2_FP64;
1728
+ v = SIN_TABLE_2_FP64;
1729
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
1730
+ u = COS_TABLE_3_FP64;
1731
+ v = SIN_TABLE_3_FP64;
1732
+ }
1869
1733
  #else
1870
- if (abs_k == 1) {
1871
- u = COS_TABLE_0_FP64;
1872
- v = SIN_TABLE_0_FP64;
1873
- } else if (abs_k == 2) {
1874
- u = COS_TABLE_1_FP64;
1875
- v = SIN_TABLE_1_FP64;
1876
- } else if (abs_k == 3) {
1877
- u = COS_TABLE_2_FP64;
1878
- v = SIN_TABLE_2_FP64;
1879
- } else if (abs_k == 4) {
1880
- u = COS_TABLE_3_FP64;
1881
- v = SIN_TABLE_3_FP64;
1882
- }
1734
+ if (abs_k == 1) {
1735
+ u = COS_TABLE_0_FP64;
1736
+ v = SIN_TABLE_0_FP64;
1737
+ } else if (abs_k == 2) {
1738
+ u = COS_TABLE_1_FP64;
1739
+ v = SIN_TABLE_1_FP64;
1740
+ } else if (abs_k == 3) {
1741
+ u = COS_TABLE_2_FP64;
1742
+ v = SIN_TABLE_2_FP64;
1743
+ } else if (abs_k == 4) {
1744
+ u = COS_TABLE_3_FP64;
1745
+ v = SIN_TABLE_3_FP64;
1746
+ }
1883
1747
  #endif
1884
-
1885
- vec2 sin_t, cos_t;
1886
- sincos_taylor_fp64(t, sin_t, cos_t);
1887
-
1888
-
1889
-
1890
- vec2 result = vec2(0.0, 0.0);
1891
- if (j == 0) {
1892
- if (k > 0) {
1893
- result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1894
- } else {
1895
- result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1896
- }
1897
- } else if (j == 1) {
1898
- if (k > 0) {
1899
- result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1900
- } else {
1901
- result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1902
- }
1903
- } else if (j == -1) {
1904
- if (k > 0) {
1905
- result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1906
- } else {
1907
- result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1908
- }
1909
- } else {
1910
- if (k > 0) {
1911
- result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1912
- } else {
1913
- result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
1914
- }
1915
- }
1916
-
1917
- return result;
1748
+ vec2 sin_t, cos_t;
1749
+ sincos_taylor_fp64(t, sin_t, cos_t);
1750
+ vec2 result = vec2(0.0, 0.0);
1751
+ if (j == 0) {
1752
+ if (k > 0) {
1753
+ result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1754
+ } else {
1755
+ result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1756
+ }
1757
+ } else if (j == 1) {
1758
+ if (k > 0) {
1759
+ result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1760
+ } else {
1761
+ result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1762
+ }
1763
+ } else if (j == -1) {
1764
+ if (k > 0) {
1765
+ result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1766
+ } else {
1767
+ result = -sum_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1768
+ }
1769
+ } else {
1770
+ if (k > 0) {
1771
+ result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1772
+ } else {
1773
+ result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
1774
+ }
1775
+ }
1776
+ return result;
1918
1777
  }
1919
-
1920
1778
  vec2 cos_fp64(vec2 a) {
1921
- if (a.x == 0.0 && a.y == 0.0) {
1922
- return vec2(1.0, 0.0);
1923
- }
1924
-
1925
- // 2pi range reduction
1926
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1927
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1928
-
1929
- vec2 t;
1930
- float q = floor(r.x / PI_2_FP64.x + 0.5);
1931
- int j = int(q);
1932
-
1933
- if (j < -2 || j > 2) {
1934
- return vec2(0.0 / 0.0, 0.0 / 0.0);
1935
- }
1936
-
1937
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1938
-
1939
- q = floor(t.x / PI_16_FP64.x + 0.5);
1940
- int k = int(q);
1941
-
1942
- if (k == 0) {
1943
- if (j == 0) {
1944
- return cos_taylor_fp64(t);
1945
- } else if (j == 1) {
1946
- return -sin_taylor_fp64(t);
1947
- } else if (j == -1) {
1948
- return sin_taylor_fp64(t);
1949
- } else {
1950
- return -cos_taylor_fp64(t);
1951
- }
1952
- }
1953
-
1954
- int abs_k = int(abs(float(k)));
1955
-
1956
- if (abs_k > 4) {
1957
- return vec2(0.0 / 0.0, 0.0 / 0.0);
1958
- } else {
1959
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1960
- }
1961
-
1962
- vec2 u = vec2(0.0, 0.0);
1963
- vec2 v = vec2(0.0, 0.0);
1964
-
1779
+ if (a.x == 0.0 && a.y == 0.0) {
1780
+ return vec2(1.0, 0.0);
1781
+ }
1782
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1783
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1784
+ vec2 t;
1785
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
1786
+ int j = int(q);
1787
+ if (j < -2 || j > 2) {
1788
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1789
+ }
1790
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1791
+ q = floor(t.x / PI_16_FP64.x + 0.5);
1792
+ int k = int(q);
1793
+ if (k == 0) {
1794
+ if (j == 0) {
1795
+ return cos_taylor_fp64(t);
1796
+ } else if (j == 1) {
1797
+ return -sin_taylor_fp64(t);
1798
+ } else if (j == -1) {
1799
+ return sin_taylor_fp64(t);
1800
+ } else {
1801
+ return -cos_taylor_fp64(t);
1802
+ }
1803
+ }
1804
+ int abs_k = int(abs(float(k)));
1805
+ if (abs_k > 4) {
1806
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1807
+ } else {
1808
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1809
+ }
1810
+ vec2 u = vec2(0.0, 0.0);
1811
+ vec2 v = vec2(0.0, 0.0);
1965
1812
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
1966
- if (abs(float(abs_k) - 1.0) < 0.5) {
1967
- u = COS_TABLE_0_FP64;
1968
- v = SIN_TABLE_0_FP64;
1969
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
1970
- u = COS_TABLE_1_FP64;
1971
- v = SIN_TABLE_1_FP64;
1972
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
1973
- u = COS_TABLE_2_FP64;
1974
- v = SIN_TABLE_2_FP64;
1975
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
1976
- u = COS_TABLE_3_FP64;
1977
- v = SIN_TABLE_3_FP64;
1978
- }
1813
+ if (abs(float(abs_k) - 1.0) < 0.5) {
1814
+ u = COS_TABLE_0_FP64;
1815
+ v = SIN_TABLE_0_FP64;
1816
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
1817
+ u = COS_TABLE_1_FP64;
1818
+ v = SIN_TABLE_1_FP64;
1819
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
1820
+ u = COS_TABLE_2_FP64;
1821
+ v = SIN_TABLE_2_FP64;
1822
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
1823
+ u = COS_TABLE_3_FP64;
1824
+ v = SIN_TABLE_3_FP64;
1825
+ }
1979
1826
  #else
1980
- if (abs_k == 1) {
1981
- u = COS_TABLE_0_FP64;
1982
- v = SIN_TABLE_0_FP64;
1983
- } else if (abs_k == 2) {
1984
- u = COS_TABLE_1_FP64;
1985
- v = SIN_TABLE_1_FP64;
1986
- } else if (abs_k == 3) {
1987
- u = COS_TABLE_2_FP64;
1988
- v = SIN_TABLE_2_FP64;
1989
- } else if (abs_k == 4) {
1990
- u = COS_TABLE_3_FP64;
1991
- v = SIN_TABLE_3_FP64;
1992
- }
1827
+ if (abs_k == 1) {
1828
+ u = COS_TABLE_0_FP64;
1829
+ v = SIN_TABLE_0_FP64;
1830
+ } else if (abs_k == 2) {
1831
+ u = COS_TABLE_1_FP64;
1832
+ v = SIN_TABLE_1_FP64;
1833
+ } else if (abs_k == 3) {
1834
+ u = COS_TABLE_2_FP64;
1835
+ v = SIN_TABLE_2_FP64;
1836
+ } else if (abs_k == 4) {
1837
+ u = COS_TABLE_3_FP64;
1838
+ v = SIN_TABLE_3_FP64;
1839
+ }
1993
1840
  #endif
1994
-
1995
- vec2 sin_t, cos_t;
1996
- sincos_taylor_fp64(t, sin_t, cos_t);
1997
-
1998
- vec2 result = vec2(0.0, 0.0);
1999
- if (j == 0) {
2000
- if (k > 0) {
2001
- result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
2002
- } else {
2003
- result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
2004
- }
2005
- } else if (j == 1) {
2006
- if (k > 0) {
2007
- result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2008
- } else {
2009
- result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
2010
- }
2011
- } else if (j == -1) {
2012
- if (k > 0) {
2013
- result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2014
- } else {
2015
- result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2016
- }
2017
- } else {
2018
- if (k > 0) {
2019
- result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
2020
- } else {
2021
- result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
2022
- }
2023
- }
2024
-
2025
- return result;
1841
+ vec2 sin_t, cos_t;
1842
+ sincos_taylor_fp64(t, sin_t, cos_t);
1843
+ vec2 result = vec2(0.0, 0.0);
1844
+ if (j == 0) {
1845
+ if (k > 0) {
1846
+ result = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1847
+ } else {
1848
+ result = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1849
+ }
1850
+ } else if (j == 1) {
1851
+ if (k > 0) {
1852
+ result = -sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1853
+ } else {
1854
+ result = sub_fp64(mul_fp64(v, cos_t), mul_fp64(u, sin_t));
1855
+ }
1856
+ } else if (j == -1) {
1857
+ if (k > 0) {
1858
+ result = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1859
+ } else {
1860
+ result = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1861
+ }
1862
+ } else {
1863
+ if (k > 0) {
1864
+ result = sub_fp64(mul_fp64(v, sin_t), mul_fp64(u, cos_t));
1865
+ } else {
1866
+ result = -sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1867
+ }
1868
+ }
1869
+ return result;
2026
1870
  }
2027
-
2028
1871
  vec2 tan_fp64(vec2 a) {
2029
- vec2 sin_a;
2030
- vec2 cos_a;
2031
-
2032
- if (a.x == 0.0 && a.y == 0.0) {
2033
- return vec2(0.0, 0.0);
2034
- }
2035
-
2036
- // 2pi range reduction
2037
- vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
2038
- vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
2039
-
2040
- vec2 t;
2041
- float q = floor(r.x / PI_2_FP64.x + 0.5);
2042
- int j = int(q);
2043
-
2044
-
2045
- if (j < -2 || j > 2) {
2046
- return vec2(0.0 / 0.0, 0.0 / 0.0);
2047
- }
2048
-
2049
- t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
2050
-
2051
- q = floor(t.x / PI_16_FP64.x + 0.5);
2052
- int k = int(q);
2053
- int abs_k = int(abs(float(k)));
2054
-
2055
- // We just can't get PI/16 * 3.0 very accurately.
2056
- // so let's just store it
2057
- if (abs_k > 4) {
2058
- return vec2(0.0 / 0.0, 0.0 / 0.0);
2059
- } else {
2060
- t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
2061
- }
2062
-
2063
-
2064
- vec2 u = vec2(0.0, 0.0);
2065
- vec2 v = vec2(0.0, 0.0);
2066
-
2067
- vec2 sin_t, cos_t;
2068
- vec2 s, c;
2069
- sincos_taylor_fp64(t, sin_t, cos_t);
2070
-
2071
- if (k == 0) {
2072
- s = sin_t;
2073
- c = cos_t;
2074
- } else {
1872
+ vec2 sin_a;
1873
+ vec2 cos_a;
1874
+ if (a.x == 0.0 && a.y == 0.0) {
1875
+ return vec2(0.0, 0.0);
1876
+ }
1877
+ vec2 z = nint_fp64(div_fp64(a, TWO_PI_FP64));
1878
+ vec2 r = sub_fp64(a, mul_fp64(TWO_PI_FP64, z));
1879
+ vec2 t;
1880
+ float q = floor(r.x / PI_2_FP64.x + 0.5);
1881
+ int j = int(q);
1882
+ if (j < -2 || j > 2) {
1883
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1884
+ }
1885
+ t = sub_fp64(r, mul_fp64(PI_2_FP64, vec2(q, 0.0)));
1886
+ q = floor(t.x / PI_16_FP64.x + 0.5);
1887
+ int k = int(q);
1888
+ int abs_k = int(abs(float(k)));
1889
+ if (abs_k > 4) {
1890
+ return vec2(0.0 / 0.0, 0.0 / 0.0);
1891
+ } else {
1892
+ t = sub_fp64(t, mul_fp64(PI_16_FP64, vec2(q, 0.0)));
1893
+ }
1894
+ vec2 u = vec2(0.0, 0.0);
1895
+ vec2 v = vec2(0.0, 0.0);
1896
+ vec2 sin_t, cos_t;
1897
+ vec2 s, c;
1898
+ sincos_taylor_fp64(t, sin_t, cos_t);
1899
+ if (k == 0) {
1900
+ s = sin_t;
1901
+ c = cos_t;
1902
+ } else {
2075
1903
  #if defined(NVIDIA_FP64_WORKAROUND) || defined(INTEL_FP64_WORKAROUND)
2076
- if (abs(float(abs_k) - 1.0) < 0.5) {
2077
- u = COS_TABLE_0_FP64;
2078
- v = SIN_TABLE_0_FP64;
2079
- } else if (abs(float(abs_k) - 2.0) < 0.5) {
2080
- u = COS_TABLE_1_FP64;
2081
- v = SIN_TABLE_1_FP64;
2082
- } else if (abs(float(abs_k) - 3.0) < 0.5) {
2083
- u = COS_TABLE_2_FP64;
2084
- v = SIN_TABLE_2_FP64;
2085
- } else if (abs(float(abs_k) - 4.0) < 0.5) {
2086
- u = COS_TABLE_3_FP64;
2087
- v = SIN_TABLE_3_FP64;
2088
- }
1904
+ if (abs(float(abs_k) - 1.0) < 0.5) {
1905
+ u = COS_TABLE_0_FP64;
1906
+ v = SIN_TABLE_0_FP64;
1907
+ } else if (abs(float(abs_k) - 2.0) < 0.5) {
1908
+ u = COS_TABLE_1_FP64;
1909
+ v = SIN_TABLE_1_FP64;
1910
+ } else if (abs(float(abs_k) - 3.0) < 0.5) {
1911
+ u = COS_TABLE_2_FP64;
1912
+ v = SIN_TABLE_2_FP64;
1913
+ } else if (abs(float(abs_k) - 4.0) < 0.5) {
1914
+ u = COS_TABLE_3_FP64;
1915
+ v = SIN_TABLE_3_FP64;
1916
+ }
2089
1917
  #else
2090
- if (abs_k == 1) {
2091
- u = COS_TABLE_0_FP64;
2092
- v = SIN_TABLE_0_FP64;
2093
- } else if (abs_k == 2) {
2094
- u = COS_TABLE_1_FP64;
2095
- v = SIN_TABLE_1_FP64;
2096
- } else if (abs_k == 3) {
2097
- u = COS_TABLE_2_FP64;
2098
- v = SIN_TABLE_2_FP64;
2099
- } else if (abs_k == 4) {
2100
- u = COS_TABLE_3_FP64;
2101
- v = SIN_TABLE_3_FP64;
2102
- }
1918
+ if (abs_k == 1) {
1919
+ u = COS_TABLE_0_FP64;
1920
+ v = SIN_TABLE_0_FP64;
1921
+ } else if (abs_k == 2) {
1922
+ u = COS_TABLE_1_FP64;
1923
+ v = SIN_TABLE_1_FP64;
1924
+ } else if (abs_k == 3) {
1925
+ u = COS_TABLE_2_FP64;
1926
+ v = SIN_TABLE_2_FP64;
1927
+ } else if (abs_k == 4) {
1928
+ u = COS_TABLE_3_FP64;
1929
+ v = SIN_TABLE_3_FP64;
1930
+ }
2103
1931
  #endif
2104
- if (k > 0) {
2105
- s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2106
- c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
2107
- } else {
2108
- s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
2109
- c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
2110
- }
2111
- }
2112
-
2113
- if (j == 0) {
2114
- sin_a = s;
2115
- cos_a = c;
2116
- } else if (j == 1) {
2117
- sin_a = c;
2118
- cos_a = -s;
2119
- } else if (j == -1) {
2120
- sin_a = -c;
2121
- cos_a = s;
2122
- } else {
2123
- sin_a = -s;
2124
- cos_a = -c;
2125
- }
2126
- return div_fp64(sin_a, cos_a);
1932
+ if (k > 0) {
1933
+ s = sum_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1934
+ c = sub_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1935
+ } else {
1936
+ s = sub_fp64(mul_fp64(u, sin_t), mul_fp64(v, cos_t));
1937
+ c = sum_fp64(mul_fp64(u, cos_t), mul_fp64(v, sin_t));
1938
+ }
1939
+ }
1940
+ if (j == 0) {
1941
+ sin_a = s;
1942
+ cos_a = c;
1943
+ } else if (j == 1) {
1944
+ sin_a = c;
1945
+ cos_a = -s;
1946
+ } else if (j == -1) {
1947
+ sin_a = -c;
1948
+ cos_a = s;
1949
+ } else {
1950
+ sin_a = -s;
1951
+ cos_a = -c;
1952
+ }
1953
+ return div_fp64(sin_a, cos_a);
2127
1954
  }
2128
-
2129
1955
  vec2 radians_fp64(vec2 degree) {
2130
- return mul_fp64(degree, PI_180_FP64);
1956
+ return mul_fp64(degree, PI_180_FP64);
2131
1957
  }
2132
-
2133
1958
  vec2 mix_fp64(vec2 a, vec2 b, float x) {
2134
- vec2 range = sub_fp64(b, a);
2135
- return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));
1959
+ vec2 range = sub_fp64(b, a);
1960
+ return sum_fp64(a, mul_fp64(range, vec2(x, 0.0)));
2136
1961
  }
2137
-
2138
- // Vector functions
2139
- // vec2 functions
2140
1962
  void vec2_sum_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
2141
- out_val[0] = sum_fp64(a[0], b[0]);
2142
- out_val[1] = sum_fp64(a[1], b[1]);
1963
+ out_val[0] = sum_fp64(a[0], b[0]);
1964
+ out_val[1] = sum_fp64(a[1], b[1]);
2143
1965
  }
2144
-
2145
1966
  void vec2_sub_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
2146
- out_val[0] = sub_fp64(a[0], b[0]);
2147
- out_val[1] = sub_fp64(a[1], b[1]);
1967
+ out_val[0] = sub_fp64(a[0], b[0]);
1968
+ out_val[1] = sub_fp64(a[1], b[1]);
2148
1969
  }
2149
-
2150
1970
  void vec2_mul_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
2151
- out_val[0] = mul_fp64(a[0], b[0]);
2152
- out_val[1] = mul_fp64(a[1], b[1]);
1971
+ out_val[0] = mul_fp64(a[0], b[0]);
1972
+ out_val[1] = mul_fp64(a[1], b[1]);
2153
1973
  }
2154
-
2155
1974
  void vec2_div_fp64(vec2 a[2], vec2 b[2], out vec2 out_val[2]) {
2156
- out_val[0] = div_fp64(a[0], b[0]);
2157
- out_val[1] = div_fp64(a[1], b[1]);
1975
+ out_val[0] = div_fp64(a[0], b[0]);
1976
+ out_val[1] = div_fp64(a[1], b[1]);
2158
1977
  }
2159
-
2160
1978
  void vec2_mix_fp64(vec2 x[2], vec2 y[2], float a, out vec2 out_val[2]) {
2161
- vec2 range[2];
2162
- vec2_sub_fp64(y, x, range);
2163
- vec2 portion[2];
2164
- portion[0] = range[0] * a;
2165
- portion[1] = range[1] * a;
2166
- vec2_sum_fp64(x, portion, out_val);
1979
+ vec2 range[2];
1980
+ vec2_sub_fp64(y, x, range);
1981
+ vec2 portion[2];
1982
+ portion[0] = range[0] * a;
1983
+ portion[1] = range[1] * a;
1984
+ vec2_sum_fp64(x, portion, out_val);
2167
1985
  }
2168
-
2169
1986
  vec2 vec2_length_fp64(vec2 x[2]) {
2170
- return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));
1987
+ return sqrt_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])));
2171
1988
  }
2172
-
2173
1989
  void vec2_normalize_fp64(vec2 x[2], out vec2 out_val[2]) {
2174
- vec2 length = vec2_length_fp64(x);
2175
- vec2 length_vec2[2];
2176
- length_vec2[0] = length;
2177
- length_vec2[1] = length;
2178
-
2179
- vec2_div_fp64(x, length_vec2, out_val);
1990
+ vec2 length = vec2_length_fp64(x);
1991
+ vec2 length_vec2[2];
1992
+ length_vec2[0] = length;
1993
+ length_vec2[1] = length;
1994
+ vec2_div_fp64(x, length_vec2, out_val);
2180
1995
  }
2181
-
2182
1996
  vec2 vec2_distance_fp64(vec2 x[2], vec2 y[2]) {
2183
- vec2 diff[2];
2184
- vec2_sub_fp64(x, y, diff);
2185
- return vec2_length_fp64(diff);
1997
+ vec2 diff[2];
1998
+ vec2_sub_fp64(x, y, diff);
1999
+ return vec2_length_fp64(diff);
2186
2000
  }
2187
-
2188
2001
  vec2 vec2_dot_fp64(vec2 a[2], vec2 b[2]) {
2189
- vec2 v[2];
2190
-
2191
- v[0] = mul_fp64(a[0], b[0]);
2192
- v[1] = mul_fp64(a[1], b[1]);
2193
-
2194
- return sum_fp64(v[0], v[1]);
2002
+ vec2 v[2];
2003
+ v[0] = mul_fp64(a[0], b[0]);
2004
+ v[1] = mul_fp64(a[1], b[1]);
2005
+ return sum_fp64(v[0], v[1]);
2195
2006
  }
2196
-
2197
- // vec3 functions
2198
2007
  void vec3_sub_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
2199
- for (int i = 0; i < 3; i++) {
2200
- out_val[i] = sum_fp64(a[i], b[i]);
2201
- }
2008
+ for (int i = 0; i < 3; i++) {
2009
+ out_val[i] = sum_fp64(a[i], b[i]);
2010
+ }
2202
2011
  }
2203
-
2204
2012
  void vec3_sum_fp64(vec2 a[3], vec2 b[3], out vec2 out_val[3]) {
2205
- for (int i = 0; i < 3; i++) {
2206
- out_val[i] = sum_fp64(a[i], b[i]);
2207
- }
2013
+ for (int i = 0; i < 3; i++) {
2014
+ out_val[i] = sum_fp64(a[i], b[i]);
2015
+ }
2208
2016
  }
2209
-
2210
2017
  vec2 vec3_length_fp64(vec2 x[3]) {
2211
- return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),
2212
- mul_fp64(x[2], x[2])));
2018
+ return sqrt_fp64(sum_fp64(sum_fp64(mul_fp64(x[0], x[0]), mul_fp64(x[1], x[1])),
2019
+ mul_fp64(x[2], x[2])));
2213
2020
  }
2214
-
2215
2021
  vec2 vec3_distance_fp64(vec2 x[3], vec2 y[3]) {
2216
- vec2 diff[3];
2217
- vec3_sub_fp64(x, y, diff);
2218
- return vec3_length_fp64(diff);
2022
+ vec2 diff[3];
2023
+ vec3_sub_fp64(x, y, diff);
2024
+ return vec3_length_fp64(diff);
2219
2025
  }
2220
-
2221
- // vec4 functions
2222
2026
  void vec4_fp64(vec4 a, out vec2 out_val[4]) {
2223
- out_val[0].x = a[0];
2224
- out_val[0].y = 0.0;
2225
-
2226
- out_val[1].x = a[1];
2227
- out_val[1].y = 0.0;
2228
-
2229
- out_val[2].x = a[2];
2230
- out_val[2].y = 0.0;
2231
-
2232
- out_val[3].x = a[3];
2233
- out_val[3].y = 0.0;
2027
+ out_val[0].x = a[0];
2028
+ out_val[0].y = 0.0;
2029
+ out_val[1].x = a[1];
2030
+ out_val[1].y = 0.0;
2031
+ out_val[2].x = a[2];
2032
+ out_val[2].y = 0.0;
2033
+ out_val[3].x = a[3];
2034
+ out_val[3].y = 0.0;
2234
2035
  }
2235
-
2236
2036
  void vec4_scalar_mul_fp64(vec2 a[4], vec2 b, out vec2 out_val[4]) {
2237
- out_val[0] = mul_fp64(a[0], b);
2238
- out_val[1] = mul_fp64(a[1], b);
2239
- out_val[2] = mul_fp64(a[2], b);
2240
- out_val[3] = mul_fp64(a[3], b);
2037
+ out_val[0] = mul_fp64(a[0], b);
2038
+ out_val[1] = mul_fp64(a[1], b);
2039
+ out_val[2] = mul_fp64(a[2], b);
2040
+ out_val[3] = mul_fp64(a[3], b);
2241
2041
  }
2242
-
2243
2042
  void vec4_sum_fp64(vec2 a[4], vec2 b[4], out vec2 out_val[4]) {
2244
- for (int i = 0; i < 4; i++) {
2245
- out_val[i] = sum_fp64(a[i], b[i]);
2246
- }
2043
+ for (int i = 0; i < 4; i++) {
2044
+ out_val[i] = sum_fp64(a[i], b[i]);
2045
+ }
2247
2046
  }
2248
-
2249
2047
  void vec4_dot_fp64(vec2 a[4], vec2 b[4], out vec2 out_val) {
2250
- vec2 v[4];
2251
-
2252
- v[0] = mul_fp64(a[0], b[0]);
2253
- v[1] = mul_fp64(a[1], b[1]);
2254
- v[2] = mul_fp64(a[2], b[2]);
2255
- v[3] = mul_fp64(a[3], b[3]);
2256
-
2257
- out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
2048
+ vec2 v[4];
2049
+ v[0] = mul_fp64(a[0], b[0]);
2050
+ v[1] = mul_fp64(a[1], b[1]);
2051
+ v[2] = mul_fp64(a[2], b[2]);
2052
+ v[3] = mul_fp64(a[3], b[3]);
2053
+ out_val = sum_fp64(sum_fp64(v[0], v[1]), sum_fp64(v[2], v[3]));
2258
2054
  }
2259
-
2260
2055
  void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
2261
- vec2 tmp[4];
2262
-
2263
- for (int i = 0; i < 4; i++)
2264
- {
2265
- for (int j = 0; j < 4; j++)
2266
- {
2267
- tmp[j] = b[j + i * 4];
2268
- }
2269
- vec4_dot_fp64(a, tmp, out_val[i]);
2270
- }
2056
+ vec2 tmp[4];
2057
+ for (int i = 0; i < 4; i++)
2058
+ {
2059
+ for (int j = 0; j < 4; j++)
2060
+ {
2061
+ tmp[j] = b[j + i * 4];
2062
+ }
2063
+ vec4_dot_fp64(a, tmp, out_val[i]);
2064
+ }
2271
2065
  }
2272
2066
  `;
2273
2067
 
@@ -3098,9 +2892,9 @@ in float instanceOffsets;
3098
2892
  // src/fill-style/fill-style-extension.ts
3099
2893
  var import_core10 = __toESM(require_core(), 1);
3100
2894
 
3101
- // src/fill-style/shaders.glsl.ts
2895
+ // src/fill-style/shader-module.ts
3102
2896
  var import_core9 = __toESM(require_core(), 1);
3103
- var patternVs = `
2897
+ var patternVs = glsl`
3104
2898
  #ifdef NON_INSTANCED_MODEL
3105
2899
  #define FILL_PATTERN_FRAME_ATTRIB fillPatternFrames
3106
2900
  #define FILL_PATTERN_SCALE_ATTRIB fillPatternScales
@@ -3122,7 +2916,7 @@ out vec2 fill_uv;
3122
2916
  out vec4 fill_patternBounds;
3123
2917
  out vec4 fill_patternPlacement;
3124
2918
  `;
3125
- var patternFs = `
2919
+ var patternFs = glsl`
3126
2920
  uniform bool fill_patternEnabled;
3127
2921
  uniform bool fill_patternMask;
3128
2922
  uniform sampler2D fill_patternTexture;
@@ -3136,17 +2930,17 @@ in vec2 fill_uv;
3136
2930
  const float FILL_UV_SCALE = 512.0 / 40000000.0;
3137
2931
  `;
3138
2932
  var inject3 = {
3139
- "vs:DECKGL_FILTER_GL_POSITION": `
2933
+ "vs:DECKGL_FILTER_GL_POSITION": glsl`
3140
2934
  fill_uv = geometry.position.xy;
3141
2935
  `,
3142
- "vs:DECKGL_FILTER_COLOR": `
2936
+ "vs:DECKGL_FILTER_COLOR": glsl`
3143
2937
  if (fill_patternEnabled) {
3144
2938
  fill_patternBounds = FILL_PATTERN_FRAME_ATTRIB / vec4(fill_patternTextureSize, fill_patternTextureSize);
3145
2939
  fill_patternPlacement.xy = FILL_PATTERN_OFFSET_ATTRIB;
3146
2940
  fill_patternPlacement.zw = FILL_PATTERN_SCALE_ATTRIB * FILL_PATTERN_FRAME_ATTRIB.zw;
3147
2941
  }
3148
2942
  `,
3149
- "fs:DECKGL_FILTER_COLOR": `
2943
+ "fs:DECKGL_FILTER_COLOR": glsl`
3150
2944
  if (fill_patternEnabled) {
3151
2945
  vec2 scale = FILL_UV_SCALE * fill_patternPlacement.zw;
3152
2946
  vec2 patternUV = mod(mod(fill_uvCoordinateOrigin, scale) + fill_uvCoordinateOrigin64Low + fill_uv, scale) / scale;
@@ -3321,7 +3115,7 @@ const float FILL_UV_SCALE = 512.0 / 40000000.0;
3321
3115
  clipBounds: [0, 0, 1, 1],
3322
3116
  clipByInstance: void 0
3323
3117
  };
3324
- var shaderFunction = `
3118
+ var shaderFunction = glsl`
3325
3119
  uniform vec4 clip_bounds;
3326
3120
 
3327
3121
  bool clip_isInBounds(vec2 position) {
@@ -3333,16 +3127,16 @@ bool clip_isInBounds(vec2 position) {
3333
3127
  vs: shaderFunction
3334
3128
  };
3335
3129
  var injectionVs = {
3336
- "vs:#decl": `
3130
+ "vs:#decl": glsl`
3337
3131
  out float clip_isVisible;
3338
3132
  `,
3339
- "vs:DECKGL_FILTER_GL_POSITION": `
3133
+ "vs:DECKGL_FILTER_GL_POSITION": glsl`
3340
3134
  clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
3341
3135
  `,
3342
- "fs:#decl": `
3136
+ "fs:#decl": glsl`
3343
3137
  in float clip_isVisible;
3344
3138
  `,
3345
- "fs:DECKGL_FILTER_COLOR": `
3139
+ "fs:DECKGL_FILTER_COLOR": glsl`
3346
3140
  if (clip_isVisible < 0.5) discard;
3347
3141
  `
3348
3142
  };
@@ -3351,16 +3145,16 @@ in float clip_isVisible;
3351
3145
  fs: shaderFunction
3352
3146
  };
3353
3147
  var injectionFs = {
3354
- "vs:#decl": `
3148
+ "vs:#decl": glsl`
3355
3149
  out vec2 clip_commonPosition;
3356
3150
  `,
3357
- "vs:DECKGL_FILTER_GL_POSITION": `
3151
+ "vs:DECKGL_FILTER_GL_POSITION": glsl`
3358
3152
  clip_commonPosition = geometry.position.xy;
3359
3153
  `,
3360
- "fs:#decl": `
3154
+ "fs:#decl": glsl`
3361
3155
  in vec2 clip_commonPosition;
3362
3156
  `,
3363
- "fs:DECKGL_FILTER_COLOR": `
3157
+ "fs:DECKGL_FILTER_COLOR": glsl`
3364
3158
  if (!clip_isInBounds(clip_commonPosition)) discard;
3365
3159
  `
3366
3160
  };
@@ -3403,7 +3197,7 @@ in vec2 clip_commonPosition;
3403
3197
 
3404
3198
  // src/collision-filter/shader-module.ts
3405
3199
  var import_core12 = __toESM(require_core(), 1);
3406
- var vs3 = `
3200
+ var vs3 = glsl`
3407
3201
  #ifdef NON_INSTANCED_MODEL
3408
3202
  in float collisionPriorities;
3409
3203
  #else
@@ -3454,10 +3248,10 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
3454
3248
  }
3455
3249
  `;
3456
3250
  var inject4 = {
3457
- "vs:#decl": `
3251
+ "vs:#decl": glsl`
3458
3252
  float collision_fade = 1.0;
3459
3253
  `,
3460
- "vs:DECKGL_FILTER_GL_POSITION": `
3254
+ "vs:DECKGL_FILTER_GL_POSITION": glsl`
3461
3255
  if (collision_sort) {
3462
3256
  #ifdef NON_INSTANCED_MODEL
3463
3257
  float collisionPriority = collisionPriorities;
@@ -3477,7 +3271,7 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
3477
3271
  }
3478
3272
  }
3479
3273
  `,
3480
- "vs:DECKGL_FILTER_COLOR": `
3274
+ "vs:DECKGL_FILTER_COLOR": glsl`
3481
3275
  color.a *= collision_fade;
3482
3276
  `
3483
3277
  };
@@ -4096,14 +3890,14 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
4096
3890
 
4097
3891
  // src/mask/shader-module.ts
4098
3892
  var import_core21 = __toESM(require_core(), 1);
4099
- var vs4 = `
3893
+ var vs4 = glsl`
4100
3894
  uniform vec4 mask_bounds;
4101
3895
  uniform bool mask_maskByInstance;
4102
3896
  vec2 mask_getCoords(vec4 position) {
4103
3897
  return (position.xy - mask_bounds.xy) / (mask_bounds.zw - mask_bounds.xy);
4104
3898
  }
4105
3899
  `;
4106
- var fs3 = `
3900
+ var fs3 = glsl`
4107
3901
  uniform sampler2D mask_texture;
4108
3902
  uniform int mask_channel;
4109
3903
  uniform bool mask_enabled;
@@ -4132,10 +3926,10 @@ bool mask_isInBounds(vec2 texCoords) {
4132
3926
  }
4133
3927
  `;
4134
3928
  var inject5 = {
4135
- "vs:#decl": `
3929
+ "vs:#decl": glsl`
4136
3930
  out vec2 mask_texCoords;
4137
3931
  `,
4138
- "vs:#main-end": `
3932
+ "vs:#main-end": glsl`
4139
3933
  vec4 mask_common_position;
4140
3934
  if (mask_maskByInstance) {
4141
3935
  mask_common_position = project_position(vec4(geometry.worldPosition, 1.0));
@@ -4144,10 +3938,10 @@ out vec2 mask_texCoords;
4144
3938
  }
4145
3939
  mask_texCoords = mask_getCoords(mask_common_position);
4146
3940
  `,
4147
- "fs:#decl": `
3941
+ "fs:#decl": glsl`
4148
3942
  in vec2 mask_texCoords;
4149
3943
  `,
4150
- "fs:#main-start": `
3944
+ "fs:#main-start": glsl`
4151
3945
  if (mask_enabled) {
4152
3946
  bool mask = mask_isInBounds(mask_texCoords);
4153
3947
 
@@ -4246,20 +4040,19 @@ in vec2 mask_texCoords;
4246
4040
  name: "terrain",
4247
4041
  dependencies: [import_core23.project],
4248
4042
  inject: {
4249
- "vs:#decl": `
4043
+ "vs:#decl": glsl`
4250
4044
  uniform float terrain_mode;
4251
4045
  uniform sampler2D terrain_map;
4252
4046
  uniform vec4 terrain_bounds;
4253
4047
  out vec3 commonPos;
4254
- ${TERRAIN_MODE_CONSTANTS}
4255
- `,
4256
- "vs:#main-start": `
4048
+ ` + TERRAIN_MODE_CONSTANTS,
4049
+ "vs:#main-start": glsl`
4257
4050
  if (terrain_mode == TERRAIN_MODE_SKIP) {
4258
4051
  gl_Position = vec4(0.0);
4259
4052
  return;
4260
4053
  }
4261
4054
  `,
4262
- "vs:DECKGL_FILTER_GL_POSITION": `
4055
+ "vs:DECKGL_FILTER_GL_POSITION": glsl`
4263
4056
  commonPos = geometry.position.xyz;
4264
4057
  if (terrain_mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {
4265
4058
  vec2 texCoords = (commonPos.xy - terrain_bounds.xy) / terrain_bounds.zw;
@@ -4278,20 +4071,19 @@ if (terrain_mode == TERRAIN_MODE_USE_HEIGHT_MAP) {
4278
4071
  }
4279
4072
  }
4280
4073
  `,
4281
- "fs:#decl": `
4074
+ "fs:#decl": glsl`
4282
4075
  uniform float terrain_mode;
4283
4076
  uniform sampler2D terrain_map;
4284
4077
  uniform vec4 terrain_bounds;
4285
4078
  in vec3 commonPos;
4286
- ${TERRAIN_MODE_CONSTANTS}
4287
- `,
4288
- "fs:#main-start": `
4079
+ ` + TERRAIN_MODE_CONSTANTS,
4080
+ "fs:#main-start": glsl`
4289
4081
  if (terrain_mode == TERRAIN_MODE_WRITE_HEIGHT_MAP) {
4290
4082
  fragColor = vec4(commonPos.z, 0.0, 0.0, 1.0);
4291
4083
  return;
4292
4084
  }
4293
4085
  `,
4294
- "fs:DECKGL_FILTER_COLOR": `
4086
+ "fs:DECKGL_FILTER_COLOR": glsl`
4295
4087
  if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_USE_COVER_ONLY)) {
4296
4088
  vec2 texCoords = (commonPos.xy - terrain_bounds.xy) / terrain_bounds.zw;
4297
4089
  vec4 pixel = texture(terrain_map, texCoords);
@@ -4362,7 +4154,7 @@ if ((terrain_mode == TERRAIN_MODE_USE_COVER) || (terrain_mode == TERRAIN_MODE_US
4362
4154
  colorAttachments: [
4363
4155
  device.createTexture({
4364
4156
  ...opts.float && {
4365
- format: device.info.type === "webgl2" ? "rgba32float" : "rgba8unorm",
4157
+ format: "rgba32float",
4366
4158
  type: GLEnum.FLOAT
4367
4159
  },
4368
4160
  mipmaps: false,