@luma.gl/webgl 9.0.0-alpha.46 → 9.0.0-alpha.48

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 (88) hide show
  1. package/LICENSE +34 -0
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +73 -40
  4. package/dist/adapter/converters/device-parameters.js.map +1 -1
  5. package/dist/adapter/converters/sampler-parameters.js +60 -61
  6. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  7. package/dist/adapter/converters/shader-formats.js +12 -13
  8. package/dist/adapter/converters/shader-formats.js.map +1 -1
  9. package/dist/adapter/converters/texture-formats.js +179 -180
  10. package/dist/adapter/converters/texture-formats.js.map +1 -1
  11. package/dist/adapter/converters/vertex-formats.js +20 -21
  12. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  13. package/dist/adapter/device-helpers/device-features.js +2 -2
  14. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  15. package/dist/adapter/device-helpers/device-limits.js +53 -54
  16. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  17. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  18. package/dist/adapter/device-helpers/get-device-info.js +23 -12
  19. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  20. package/dist/adapter/helpers/decode-webgl-types.js +31 -32
  21. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -1
  22. package/dist/adapter/helpers/get-shader-layout.js +29 -30
  23. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  24. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  25. package/dist/adapter/helpers/parse-shader-compiler-log.js +16 -4
  26. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  27. package/dist/adapter/helpers/set-uniform.js +40 -41
  28. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  29. package/dist/adapter/helpers/webgl-topology-utils.js +38 -39
  30. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -1
  31. package/dist/adapter/objects/webgl-renderbuffer.js +5 -6
  32. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  33. package/dist/adapter/resources/webgl-buffer.js +14 -15
  34. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  35. package/dist/adapter/resources/webgl-command-buffer.js +25 -26
  36. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  37. package/dist/adapter/resources/webgl-framebuffer.js +22 -23
  38. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  39. package/dist/adapter/resources/webgl-render-pass.js +2 -3
  40. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  41. package/dist/adapter/resources/webgl-render-pipeline.js +7 -8
  42. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  43. package/dist/adapter/resources/webgl-sampler.js +2 -3
  44. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  45. package/dist/adapter/resources/webgl-shader.js +3 -4
  46. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  47. package/dist/adapter/resources/webgl-texture.js +27 -28
  48. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  49. package/dist/adapter/resources/webgl-transform-feedback.d.ts +5 -11
  50. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
  51. package/dist/adapter/resources/webgl-transform-feedback.js +16 -13
  52. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -1
  53. package/dist/adapter/resources/webgl-vertex-array.d.ts +2 -2
  54. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  55. package/dist/adapter/resources/webgl-vertex-array.js +5 -6
  56. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -1
  57. package/dist/adapter/webgl-device.js.map +1 -1
  58. package/dist/classic/accessor.js +4 -5
  59. package/dist/classic/accessor.js.map +1 -1
  60. package/dist/classic/copy-and-blit.js +16 -17
  61. package/dist/classic/copy-and-blit.js.map +1 -1
  62. package/dist/classic/format-utils.js +14 -15
  63. package/dist/classic/format-utils.js.map +1 -1
  64. package/dist/classic/typed-array-utils.d.ts +2 -0
  65. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  66. package/dist/classic/typed-array-utils.js +18 -19
  67. package/dist/classic/typed-array-utils.js.map +1 -1
  68. package/dist/context/debug/webgl-developer-tools.js +0 -1
  69. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  70. package/dist/context/parameters/webgl-parameter-tables.js +256 -257
  71. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  72. package/dist/context/polyfill/get-parameter-polyfill.js +34 -35
  73. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  74. package/dist/context/polyfill/polyfill-table.js +9 -10
  75. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  76. package/dist/context/polyfill/polyfill-vertex-array-object.js +17 -17
  77. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  78. package/dist/dist.dev.js +987 -2700
  79. package/dist/index.cjs +390 -267
  80. package/dist.min.js +39 -28
  81. package/package.json +5 -5
  82. package/src/adapter/converters/device-parameters.ts +40 -25
  83. package/src/adapter/device-helpers/get-device-info.ts +36 -8
  84. package/src/adapter/helpers/parse-shader-compiler-log.ts +21 -7
  85. package/src/adapter/resources/webgl-transform-feedback.ts +13 -16
  86. package/src/adapter/resources/webgl-vertex-array.ts +4 -3
  87. package/src/adapter/webgl-device.ts +3 -2
  88. package/src/classic/typed-array-utils.ts +2 -0
package/LICENSE ADDED
@@ -0,0 +1,34 @@
1
+ luma.gl is provided under the MIT license
2
+
3
+ Copyright (c) 2020 vis.gl contributors
4
+
5
+ This software includes parts initially developed by Uber and open sourced under MIT license.
6
+ Copyright (c) 2015 Uber Technologies, Inc.
7
+
8
+ This software includes parts of PhiloGL (https://github.com/philogb/philogl)
9
+ under MIT license. PhiloGL parts Copyright © 2013 Sencha Labs.
10
+
11
+ This software includes adaptations of some postprocessing code from
12
+ THREE.js (https://github.com/mrdoob/three.js/) under MIT license.
13
+ THREE.js parts Copyright © 2010-2018 three.js authors.
14
+
15
+ Additional attribution given in specific source files.
16
+
17
+ Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ of this software and associated documentation files (the "Software"), to deal
19
+ in the Software without restriction, including without limitation the rights
20
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ copies of the Software, and to permit persons to whom the Software is
22
+ furnished to do so, subject to the following conditions:
23
+
24
+ The above copyright notice and this permission notice shall be included in
25
+ all copies or substantial portions of the Software.
26
+
27
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
33
+ THE SOFTWARE.
34
+
@@ -1 +1 @@
1
- {"version":3,"file":"device-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/device-parameters.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,MAAM,EACN,UAAU,EACV,eAAe,EAIhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAOrD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,GAAG,OAAO,EACnD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAiBH;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,EAC9C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,QA+GzE;AAyBD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,EAAE,CAWpF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,eAAe,CAWtF"}
1
+ {"version":3,"file":"device-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/device-parameters.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,MAAM,EACN,UAAU,EACV,eAAe,EAMhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,EAAmC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAOvF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,GAAG,OAAO,EACnD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAiBH;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,EAC9C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,QA6GzE;AAyBD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,EAAE,CAWpF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,eAAe,CAWtF"}
@@ -1,5 +1,4 @@
1
1
  import { log, isObjectEmpty } from '@luma.gl/core';
2
- import { GL } from '@luma.gl/constants';
3
2
  import { pushContextState, popContextState } from "../../context/state-tracker/track-context-state.js";
4
3
  import { setGLParameters } from "../../context/parameters/unified-parameter-api.js";
5
4
  import { WebGLDevice } from "../webgl-device.js";
@@ -48,22 +47,22 @@ export function setDeviceParameters(device, parameters) {
48
47
  if (parameters.cullMode) {
49
48
  switch (parameters.cullMode) {
50
49
  case 'none':
51
- gl.disable(GL.CULL_FACE);
50
+ gl.disable(2884);
52
51
  break;
53
52
  case 'front':
54
- gl.enable(GL.CULL_FACE);
55
- gl.cullFace(GL.FRONT);
53
+ gl.enable(2884);
54
+ gl.cullFace(1028);
56
55
  break;
57
56
  case 'back':
58
- gl.enable(GL.CULL_FACE);
59
- gl.cullFace(GL.BACK);
57
+ gl.enable(2884);
58
+ gl.cullFace(1029);
60
59
  break;
61
60
  }
62
61
  }
63
62
  if (parameters.frontFace) {
64
63
  gl.frontFace(map('frontFace', parameters.frontFace, {
65
- ccw: GL.CCW,
66
- cw: GL.CW
64
+ ccw: 2305,
65
+ cw: 2304
67
66
  }));
68
67
  }
69
68
  if (parameters.depthBias !== undefined) {
@@ -73,13 +72,13 @@ export function setDeviceParameters(device, parameters) {
73
72
  gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));
74
73
  }
75
74
  if (parameters.depthCompare) {
76
- parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);
75
+ parameters.depthCompare !== 'always' ? gl.enable(2929) : gl.disable(2929);
77
76
  gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));
78
77
  }
79
78
  if (parameters.stencilWriteMask) {
80
79
  const mask = parameters.stencilWriteMask;
81
- gl.stencilMaskSeparate(GL.FRONT, mask);
82
- gl.stencilMaskSeparate(GL.BACK, mask);
80
+ gl.stencilMaskSeparate(1028, mask);
81
+ gl.stencilMaskSeparate(1029, mask);
83
82
  }
84
83
  if (parameters.stencilReadMask) {
85
84
  log.warn('stencilReadMask not supported under WebGL');
@@ -87,52 +86,86 @@ export function setDeviceParameters(device, parameters) {
87
86
  if (parameters.stencilCompare) {
88
87
  const mask = parameters.stencilReadMask || 0xffffffff;
89
88
  const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);
90
- parameters.stencilCompare !== 'always' ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST);
91
- gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);
92
- gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);
89
+ parameters.stencilCompare !== 'always' ? gl.enable(2960) : gl.disable(2960);
90
+ gl.stencilFuncSeparate(1028, glValue, 0, mask);
91
+ gl.stencilFuncSeparate(1029, glValue, 0, mask);
93
92
  }
94
93
  if (parameters.stencilPassOperation && parameters.stencilFailOperation && parameters.stencilDepthFailOperation) {
95
94
  const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);
96
95
  const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);
97
96
  const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);
98
- gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
99
- gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);
97
+ gl.stencilOpSeparate(1028, sfail, dpfail, dppass);
98
+ gl.stencilOpSeparate(1029, sfail, dpfail, dppass);
99
+ }
100
+ if (parameters.blendColorOperation || parameters.blendAlphaOperation) {
101
+ gl.enable(3042);
102
+ const colorEquation = convertBlendOperationToEquation('blendColorOperation', parameters.blendColorOperation || 'add');
103
+ const alphaEquation = convertBlendOperationToEquation('blendAlphaOperation', parameters.blendAlphaOperation || 'add');
104
+ gl.blendEquationSeparate(colorEquation, alphaEquation);
105
+ const colorSrcFactor = convertBlendFactorToFunction('blendColorSrcFactor', parameters.blendColorSrcFactor || 'one');
106
+ const colorDstFactor = convertBlendFactorToFunction('blendColorDstFactor', parameters.blendColorDstFactor || 'zero');
107
+ const alphaSrcFactor = convertBlendFactorToFunction('blendAlphaSrcFactor', parameters.blendAlphaSrcFactor || 'one');
108
+ const alphaDstFactor = convertBlendFactorToFunction('blendAlphaDstFactor', parameters.blendAlphaDstFactor || 'zero');
109
+ gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);
100
110
  }
101
111
  }
102
112
  export function convertCompareFunction(parameter, value) {
103
113
  return map(parameter, value, {
104
- never: GL.NEVER,
105
- less: GL.LESS,
106
- equal: GL.EQUAL,
107
- 'less-equal': GL.LEQUAL,
108
- greater: GL.GREATER,
109
- 'not-equal': GL.NOTEQUAL,
110
- 'greater-equal': GL.GEQUAL,
111
- always: GL.ALWAYS
114
+ never: 512,
115
+ less: 513,
116
+ equal: 514,
117
+ 'less-equal': 515,
118
+ greater: 516,
119
+ 'not-equal': 517,
120
+ 'greater-equal': 518,
121
+ always: 519
112
122
  });
113
123
  }
114
124
  export function convertToCompareFunction(parameter, value) {
115
125
  return map(parameter, value, {
116
- [GL.NEVER]: 'never',
117
- [GL.LESS]: 'less',
118
- [GL.EQUAL]: 'equal',
119
- [GL.LEQUAL]: 'less-equal',
120
- [GL.GREATER]: 'greater',
121
- [GL.NOTEQUAL]: 'not-equal',
122
- [GL.GEQUAL]: 'greater-equal',
123
- [GL.ALWAYS]: 'always'
126
+ [512]: 'never',
127
+ [513]: 'less',
128
+ [514]: 'equal',
129
+ [515]: 'less-equal',
130
+ [516]: 'greater',
131
+ [517]: 'not-equal',
132
+ [518]: 'greater-equal',
133
+ [519]: 'always'
124
134
  });
125
135
  }
126
136
  function convertStencilOperation(parameter, value) {
127
137
  return map(parameter, value, {
128
- keep: GL.KEEP,
129
- zero: GL.ZERO,
130
- replace: GL.REPLACE,
131
- invert: GL.INVERT,
132
- 'increment-clamp': GL.INCR,
133
- 'decrement-clamp': GL.DECR,
134
- 'increment-wrap': GL.INCR_WRAP,
135
- 'decrement-wrap': GL.DECR_WRAP
138
+ keep: 7680,
139
+ zero: 0,
140
+ replace: 7681,
141
+ invert: 5386,
142
+ 'increment-clamp': 7682,
143
+ 'decrement-clamp': 7683,
144
+ 'increment-wrap': 34055,
145
+ 'decrement-wrap': 34056
146
+ });
147
+ }
148
+ function convertBlendOperationToEquation(parameter, value) {
149
+ return map(parameter, value, {
150
+ 'add': 32774,
151
+ 'subtract': 32778,
152
+ 'reverse-subtract': 32779,
153
+ 'min': 32775,
154
+ 'max': 32776
155
+ });
156
+ }
157
+ function convertBlendFactorToFunction(parameter, value) {
158
+ return map(parameter, value, {
159
+ 'one': 1,
160
+ 'zero': 0,
161
+ 'src-color': 768,
162
+ 'one-minus-src-color': 769,
163
+ 'dst-color': 774,
164
+ 'one-minus-dst-color': 775,
165
+ 'src-alpha': 770,
166
+ 'one-minus-src-alpha': 771,
167
+ 'dst-alpha': 772,
168
+ 'one-minus-dst-alpha': 773
136
169
  });
137
170
  }
138
171
  function message(parameter, value) {
@@ -1 +1 @@
1
- {"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","GL","pushContextState","popContextState","setGLParameters","WebGLDevice","withDeviceAndGLParameters","device","parameters","glParameters","func","gl","setDeviceParameters","withGLParameters","withDeviceParameters","webglDevice","attach","cullMode","disable","CULL_FACE","enable","cullFace","FRONT","BACK","frontFace","map","ccw","CCW","cw","CW","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","DEPTH_TEST","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","STENCIL_TEST","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","parameter","value","never","NEVER","less","LESS","equal","EQUAL","LEQUAL","greater","GREATER","NOTEQUAL","GEQUAL","always","ALWAYS","convertToCompareFunction","keep","KEEP","zero","ZERO","replace","REPLACE","invert","INVERT","INCR","DECR","INCR_WRAP","DECR_WRAP","message","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLParameters} from '@luma.gl/constants';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setGLParameters} from '../../context/parameters/unified-parameter-api';\nimport {WebGLDevice} from '../webgl-device';\n\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceAndGLParameters<T = unknown>(\n device: Device, \n parameters: Parameters,\n glParameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n setGLParameters(device, glParameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters<T = unknown>(\n device: Device,\n parameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setGLParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(\n device: Device,\n parameters: Parameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(\n map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n })\n );\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(GL.STENCIL_TEST)\n : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (\n parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation\n ) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation(\n 'stencilDepthFailOperation',\n parameters.stencilDepthFailOperation\n );\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n // if (parameters.blend) {\n // gl.enable(GL.BLEND);\n\n // const blend = parameters.blend;\n\n // let colorEquation = (blend && blend.color && blend.color.operation) || 'add';\n // let alphaEquation = (blend && blend.alpha && blend.alpha.operation) || 'add';\n // gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n // let colorSrcFactor = (blend && blend.color && blend.color.srcFactor) || 'one';\n // let colorDstFactor = (blend && blend.color && blend.color.dstFactor) || 'zero';\n // let alphaSrcFactor = (blend && blend.alpha && blend.alpha.srcFactor) || 'one';\n // let alphaDstFactor = (blend && blend.alpha && blend.alpha.dstFactor) || 'zero';\n // gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n // }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n never: GL.NEVER,\n less: GL.LESS,\n equal: GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n greater: GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n always: GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n keep: GL.KEEP,\n zero: GL.ZERO,\n replace: GL.REPLACE,\n invert: GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\n// function convertBlendOperationToEquation(parameter: string, value: string): number {\n// return map(parameter, value, {\n// 'add': GL.FUNC_ADD,\n// 'sub': GL.FUNC_SUBTRACT,\n// 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n// // When using a WebGL 2 context, the following values are available additionally:\n// 'min': GL.MIN,\n// 'max': GL.MAX\n// });\n// }\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","pushContextState","popContextState","setGLParameters","WebGLDevice","withDeviceAndGLParameters","device","parameters","glParameters","func","gl","setDeviceParameters","withGLParameters","withDeviceParameters","webglDevice","attach","cullMode","disable","enable","cullFace","frontFace","map","ccw","cw","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","blendColorOperation","blendAlphaOperation","colorEquation","convertBlendOperationToEquation","alphaEquation","blendEquationSeparate","colorSrcFactor","convertBlendFactorToFunction","blendColorSrcFactor","colorDstFactor","blendColorDstFactor","alphaSrcFactor","blendAlphaSrcFactor","alphaDstFactor","blendAlphaDstFactor","blendFuncSeparate","parameter","value","never","less","equal","greater","always","convertToCompareFunction","keep","zero","replace","invert","message","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty,\n BlendOperation,\n BlendFactor\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLBlendEquation, GLBlendFunction, GLParameters} from '@luma.gl/constants';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setGLParameters} from '../../context/parameters/unified-parameter-api';\nimport {WebGLDevice} from '../webgl-device';\n\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceAndGLParameters<T = unknown>(\n device: Device, \n parameters: Parameters,\n glParameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n setGLParameters(device, glParameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters<T = unknown>(\n device: Device,\n parameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setGLParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(\n device: Device,\n parameters: Parameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(\n map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n })\n );\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(GL.STENCIL_TEST)\n : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (\n parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation\n ) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation(\n 'stencilDepthFailOperation',\n parameters.stencilDepthFailOperation\n );\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n if (parameters.blendColorOperation || parameters.blendAlphaOperation) {\n gl.enable(GL.BLEND);\n\n const colorEquation = convertBlendOperationToEquation('blendColorOperation', parameters.blendColorOperation || 'add');\n const alphaEquation = convertBlendOperationToEquation('blendAlphaOperation', parameters.blendAlphaOperation || 'add');\n gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n const colorSrcFactor = convertBlendFactorToFunction('blendColorSrcFactor', parameters.blendColorSrcFactor || 'one');\n const colorDstFactor = convertBlendFactorToFunction('blendColorDstFactor', parameters.blendColorDstFactor || 'zero');\n const alphaSrcFactor = convertBlendFactorToFunction('blendAlphaSrcFactor', parameters.blendAlphaSrcFactor || 'one');\n const alphaDstFactor = convertBlendFactorToFunction('blendAlphaDstFactor', parameters.blendAlphaDstFactor || 'zero');\n gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n never: GL.NEVER,\n less: GL.LESS,\n equal: GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n greater: GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n always: GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n keep: GL.KEEP,\n zero: GL.ZERO,\n replace: GL.REPLACE,\n invert: GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\nfunction convertBlendOperationToEquation(parameter: string, value: BlendOperation): GLBlendEquation {\n return map(parameter, value, {\n 'add': GL.FUNC_ADD,\n 'subtract': GL.FUNC_SUBTRACT,\n 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n // When using a WebGL 2 context, the following values are available additionally:\n 'min': GL.MIN,\n 'max': GL.MAX\n } as Record<BlendOperation, GLBlendEquation>);\n}\n\nfunction convertBlendFactorToFunction(parameter: string, value: BlendFactor): GLBlendFunction {\n return map(parameter, value, {\n 'one': GL.ONE,\n 'zero': GL.ZERO,\n 'src-color': GL.SRC_COLOR,\n 'one-minus-src-color': GL.ONE_MINUS_SRC_COLOR,\n 'dst-color': GL.DST_COLOR,\n 'one-minus-dst-color': GL.ONE_MINUS_DST_COLOR,\n 'src-alpha': GL.SRC_ALPHA,\n 'one-minus-src-alpha': GL.ONE_MINUS_SRC_ALPHA,\n 'dst-alpha': GL.DST_ALPHA,\n 'one-minus-dst-alpha': GL.ONE_MINUS_DST_ALPHA,\n } as Record<BlendFactor, GLBlendFunction>);\n}\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"mappings":"AAGA,SAKEA,GAAG,EACHC,aAAa,QAGR,eAAe;AAAC,SAGfC,gBAAgB,EAAEC,eAAe;AAAA,SACjCC,eAAe;AAAA,SACfC,WAAW;AAYnB,OAAO,SAASC,yBAAyBA,CACvCC,MAAc,EACdC,UAAsB,EACtBC,YAA0B,EAC1BC,IAA4B,EACzB;EACH,IAAIT,aAAa,CAACO,UAAU,CAAC,EAAE;IAE7B,OAAOE,IAAI,CAACH,MAAM,CAAC;EACrB;EAIAL,gBAAgB,CAACK,MAAM,CAACI,EAAE,CAAC;EAC3B,IAAI;IACFC,mBAAmB,CAACL,MAAM,EAAEC,UAAU,CAAC;IACvCJ,eAAe,CAACG,MAAM,EAAEE,YAAY,CAAC;IACrC,OAAOC,IAAI,CAACH,MAAM,CAAC;EACrB,CAAC,SAAS;IAERJ,eAAe,CAACI,MAAM,CAACI,EAAE,CAAC;EAC5B;AACF;AAWA,OAAO,SAASE,gBAAgBA,CAC9BN,MAAc,EACdC,UAAwB,EACxBE,IAA4B,EACzB;EACH,IAAIT,aAAa,CAACO,UAAU,CAAC,EAAE;IAE7B,OAAOE,IAAI,CAACH,MAAM,CAAC;EACrB;EAIAL,gBAAgB,CAACK,MAAM,CAACI,EAAE,CAAC;EAC3B,IAAI;IACFP,eAAe,CAACG,MAAM,EAAEC,UAAU,CAAC;IACnC,OAAOE,IAAI,CAACH,MAAM,CAAC;EACrB,CAAC,SAAS;IAERJ,eAAe,CAACI,MAAM,CAACI,EAAE,CAAC;EAC5B;AACF;AAUA,OAAO,SAASG,oBAAoBA,CAClCP,MAAc,EACdC,UAAsB,EACtBE,IAA4B,EACzB;EACH,IAAIT,aAAa,CAACO,UAAU,CAAC,EAAE;IAE7B,OAAOE,IAAI,CAACH,MAAM,CAAC;EACrB;EAIAL,gBAAgB,CAACK,MAAM,CAACI,EAAE,CAAC;EAC3B,IAAI;IACFC,mBAAmB,CAACL,MAAM,EAAEC,UAAU,CAAC;IACvC,OAAOE,IAAI,CAACH,MAAM,CAAC;EACrB,CAAC,SAAS;IAERJ,eAAe,CAACI,MAAM,CAACI,EAAE,CAAC;EAC5B;AACF;AAGA,OAAO,SAASC,mBAAmBA,CAACL,MAAc,EAAEC,UAAsB,EAAE;EAC1E,MAAMO,WAAW,GAAGV,WAAW,CAACW,MAAM,CAACT,MAAM,CAAC;EAC9C,MAAM;IAACI;EAAE,CAAC,GAAGI,WAAW;EAGxB,IAAIP,UAAU,CAACS,QAAQ,EAAE;IACvB,QAAQT,UAAU,CAACS,QAAQ;MACzB,KAAK,MAAM;QACTN,EAAE,CAACO,OAAO,KAAa,CAAC;QACxB;MACF,KAAK,OAAO;QACVP,EAAE,CAACQ,MAAM,KAAa,CAAC;QACvBR,EAAE,CAACS,QAAQ,KAAS,CAAC;QACrB;MACF,KAAK,MAAM;QACTT,EAAE,CAACQ,MAAM,KAAa,CAAC;QACvBR,EAAE,CAACS,QAAQ,KAAQ,CAAC;QACpB;IACJ;EACF;EAEA,IAAIZ,UAAU,CAACa,SAAS,EAAE;IACxBV,EAAE,CAACU,SAAS,CACVC,GAAG,CAAC,WAAW,EAAEd,UAAU,CAACa,SAAS,EAAE;MACrCE,GAAG,MAAQ;MACXC,EAAE;IACJ,CAAC,CACH,CAAC;EACH;EAEA,IAAIhB,UAAU,CAACiB,SAAS,KAAKC,SAAS,EAAE;IACtCf,EAAE,CAACgB,aAAa,CAACnB,UAAU,CAACiB,SAAS,EAAEjB,UAAU,CAACoB,mBAAmB,IAAI,CAAC,CAAC;EAC7E;EAQA,IAAIpB,UAAU,CAACqB,iBAAiB,KAAKH,SAAS,EAAE;IAC9Cf,EAAE,CAACmB,SAAS,CAACC,UAAU,CAAC,mBAAmB,EAAEvB,UAAU,CAACqB,iBAAiB,CAAC,CAAC;EAC7E;EAEA,IAAIrB,UAAU,CAACwB,YAAY,EAAE;IAC3BxB,UAAU,CAACwB,YAAY,KAAK,QAAQ,GAAGrB,EAAE,CAACQ,MAAM,KAAc,CAAC,GAAGR,EAAE,CAACO,OAAO,KAAc,CAAC;IAC3FP,EAAE,CAACsB,SAAS,CAACC,sBAAsB,CAAC,cAAc,EAAE1B,UAAU,CAACwB,YAAY,CAAC,CAAC;EAC/E;EAEA,IAAIxB,UAAU,CAAC2B,gBAAgB,EAAE;IAC/B,MAAMC,IAAI,GAAG5B,UAAU,CAAC2B,gBAAgB;IACxCxB,EAAE,CAAC0B,mBAAmB,OAAWD,IAAI,CAAC;IACtCzB,EAAE,CAAC0B,mBAAmB,OAAUD,IAAI,CAAC;EACvC;EAEA,IAAI5B,UAAU,CAAC8B,eAAe,EAAE;IAE9BtC,GAAG,CAACuC,IAAI,CAAC,2CAA2C,CAAC;EACvD;EAEA,IAAI/B,UAAU,CAACgC,cAAc,EAAE;IAC7B,MAAMJ,IAAI,GAAG5B,UAAU,CAAC8B,eAAe,IAAI,UAAU;IACrD,MAAMG,OAAO,GAAGP,sBAAsB,CAAC,cAAc,EAAE1B,UAAU,CAACgC,cAAc,CAAC;IAEjFhC,UAAU,CAACgC,cAAc,KAAK,QAAQ,GAClC7B,EAAE,CAACQ,MAAM,KAAgB,CAAC,GAC1BR,EAAE,CAACO,OAAO,KAAgB,CAAC;IAC/BP,EAAE,CAAC+B,mBAAmB,OAAWD,OAAO,EAAE,CAAC,EAAEL,IAAI,CAAC;IAClDzB,EAAE,CAAC+B,mBAAmB,OAAUD,OAAO,EAAE,CAAC,EAAEL,IAAI,CAAC;EACnD;EAEA,IACE5B,UAAU,CAACmC,oBAAoB,IAC/BnC,UAAU,CAACoC,oBAAoB,IAC/BpC,UAAU,CAACqC,yBAAyB,EACpC;IACA,MAAMC,MAAM,GAAGC,uBAAuB,CAAC,sBAAsB,EAAEvC,UAAU,CAACmC,oBAAoB,CAAC;IAC/F,MAAMK,KAAK,GAAGD,uBAAuB,CAAC,sBAAsB,EAAEvC,UAAU,CAACoC,oBAAoB,CAAC;IAC9F,MAAMK,MAAM,GAAGF,uBAAuB,CACpC,2BAA2B,EAC3BvC,UAAU,CAACqC,yBACb,CAAC;IACDlC,EAAE,CAACuC,iBAAiB,OAAWF,KAAK,EAAEC,MAAM,EAAEH,MAAM,CAAC;IACrDnC,EAAE,CAACuC,iBAAiB,OAAUF,KAAK,EAAEC,MAAM,EAAEH,MAAM,CAAC;EACtD;EAYA,IAAItC,UAAU,CAAC2C,mBAAmB,IAAI3C,UAAU,CAAC4C,mBAAmB,EAAE;IACpEzC,EAAE,CAACQ,MAAM,KAAS,CAAC;IAEnB,MAAMkC,aAAa,GAAGC,+BAA+B,CAAC,qBAAqB,EAAE9C,UAAU,CAAC2C,mBAAmB,IAAI,KAAK,CAAC;IACrH,MAAMI,aAAa,GAAGD,+BAA+B,CAAC,qBAAqB,EAAE9C,UAAU,CAAC4C,mBAAmB,IAAI,KAAK,CAAC;IACrHzC,EAAE,CAAC6C,qBAAqB,CAACH,aAAa,EAAEE,aAAa,CAAC;IAEtD,MAAME,cAAc,GAAGC,4BAA4B,CAAC,qBAAqB,EAAElD,UAAU,CAACmD,mBAAmB,IAAI,KAAK,CAAC;IACnH,MAAMC,cAAc,GAAGF,4BAA4B,CAAC,qBAAqB,EAAElD,UAAU,CAACqD,mBAAmB,IAAI,MAAM,CAAC;IACpH,MAAMC,cAAc,GAAGJ,4BAA4B,CAAC,qBAAqB,EAAElD,UAAU,CAACuD,mBAAmB,IAAI,KAAK,CAAC;IACnH,MAAMC,cAAc,GAAGN,4BAA4B,CAAC,qBAAqB,EAAElD,UAAU,CAACyD,mBAAmB,IAAI,MAAM,CAAC;IACpHtD,EAAE,CAACuD,iBAAiB,CAACT,cAAc,EAAEG,cAAc,EAAEE,cAAc,EAAEE,cAAc,CAAC;EACtF;AACF;AAyBA,OAAO,SAAS9B,sBAAsBA,CAACiC,SAAiB,EAAEC,KAAsB,EAAM;EACpF,OAAO9C,GAAG,CAAC6C,SAAS,EAAEC,KAAK,EAAE;IAC3BC,KAAK,KAAU;IACfC,IAAI,KAAS;IACbC,KAAK,KAAU;IACf,YAAY,KAAW;IACvBC,OAAO,KAAY;IACnB,WAAW,KAAa;IACxB,eAAe,KAAW;IAC1BC,MAAM;EACR,CAAC,CAAC;AACJ;AAEA,OAAO,SAASC,wBAAwBA,CAACP,SAAiB,EAAEC,KAAS,EAAmB;EACtF,OAAO9C,GAAG,CAAC6C,SAAS,EAAEC,KAAK,EAAE;IAC3B,OAAY,OAAO;IACnB,OAAW,MAAM;IACjB,OAAY,OAAO;IACnB,OAAa,YAAY;IACzB,OAAc,SAAS;IACvB,OAAe,WAAW;IAC1B,OAAa,eAAe;IAC5B,OAAa;EACf,CAAC,CAAC;AACJ;AAEA,SAASrB,uBAAuBA,CAACoB,SAAiB,EAAEC,KAAuB,EAAM;EAC/E,OAAO9C,GAAG,CAAC6C,SAAS,EAAEC,KAAK,EAAE;IAC3BO,IAAI,MAAS;IACbC,IAAI,GAAS;IACbC,OAAO,MAAY;IACnBC,MAAM,MAAW;IACjB,iBAAiB,MAAS;IAC1B,iBAAiB,MAAS;IAC1B,gBAAgB,OAAc;IAC9B,gBAAgB;EAClB,CAAC,CAAC;AACJ;AAEA,SAASxB,+BAA+BA,CAACa,SAAiB,EAAEC,KAAqB,EAAmB;EAClG,OAAO9C,GAAG,CAAC6C,SAAS,EAAEC,KAAK,EAAE;IAC3B,KAAK,OAAa;IAClB,UAAU,OAAkB;IAC5B,kBAAkB,OAA0B;IAE5C,KAAK,OAAQ;IACb,KAAK;EACP,CAA4C,CAAC;AAC/C;AAEA,SAASV,4BAA4BA,CAACS,SAAiB,EAAEC,KAAkB,EAAmB;EAC5F,OAAO9C,GAAG,CAAC6C,SAAS,EAAEC,KAAK,EAAE;IAC3B,KAAK,GAAQ;IACb,MAAM,GAAS;IACf,WAAW,KAAc;IACzB,qBAAqB,KAAwB;IAC7C,WAAW,KAAc;IACzB,qBAAqB,KAAwB;IAC7C,WAAW,KAAc;IACzB,qBAAqB,KAAwB;IAC7C,WAAW,KAAc;IACzB,qBAAqB;EACvB,CAAyC,CAAC;AAC5C;AAEA,SAASW,OAAOA,CAACZ,SAAiB,EAAEC,KAAU,EAAU;EACtD,OAAQ,qBAAoBA,KAAM,QAAOD,SAAU,EAAC;AACtD;AAEA,SAAS7C,GAAGA,CAAC6C,SAAiB,EAAEC,KAAU,EAAEY,QAA6B,EAAO;EAC9E,IAAI,EAAEZ,KAAK,IAAIY,QAAQ,CAAC,EAAE;IACxB,MAAM,IAAIC,KAAK,CAACF,OAAO,CAACZ,SAAS,EAAEC,KAAK,CAAC,CAAC;EAC5C;EACA,OAAOY,QAAQ,CAACZ,KAAK,CAAC;AACxB;AAEA,SAASrC,UAAUA,CAACoC,SAAiB,EAAEC,KAAc,EAAW;EAC9D,OAAOA,KAAK;AACd"}
@@ -1,55 +1,54 @@
1
- import { GL } from '@luma.gl/constants';
2
1
  import { convertCompareFunction, convertToCompareFunction } from "./device-parameters.js";
3
2
  export function convertSamplerParametersToWebGL(props) {
4
3
  const params = {};
5
4
  if (props.addressModeU) {
6
- params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);
5
+ params[10242] = convertAddressMode(props.addressModeU);
7
6
  }
8
7
  if (props.addressModeV) {
9
- params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);
8
+ params[10243] = convertAddressMode(props.addressModeV);
10
9
  }
11
10
  if (props.addressModeW) {
12
- params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);
11
+ params[32882] = convertAddressMode(props.addressModeW);
13
12
  }
14
13
  if (props.magFilter) {
15
- params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);
14
+ params[10240] = convertMaxFilterMode(props.magFilter);
16
15
  }
17
16
  if (props.minFilter || props.mipmapFilter) {
18
- params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);
17
+ params[10241] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);
19
18
  }
20
19
  if (props.lodMinClamp !== undefined) {
21
- params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;
20
+ params[33082] = props.lodMinClamp;
22
21
  }
23
22
  if (props.lodMaxClamp !== undefined) {
24
- params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;
23
+ params[33083] = props.lodMaxClamp;
25
24
  }
26
25
  if (props.type === 'comparison-sampler') {
27
- params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;
26
+ params[34892] = 34894;
28
27
  }
29
28
  if (props.compare) {
30
- params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);
29
+ params[34893] = convertCompareFunction('compare', props.compare);
31
30
  }
32
31
  if (props.maxAnisotropy) {
33
- params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;
32
+ params[34046] = props.maxAnisotropy;
34
33
  }
35
34
  return params;
36
35
  }
37
36
  function convertAddressMode(addressMode) {
38
37
  switch (addressMode) {
39
38
  case 'clamp-to-edge':
40
- return GL.CLAMP_TO_EDGE;
39
+ return 33071;
41
40
  case 'repeat':
42
- return GL.REPEAT;
41
+ return 10497;
43
42
  case 'mirror-repeat':
44
- return GL.MIRRORED_REPEAT;
43
+ return 33648;
45
44
  }
46
45
  }
47
46
  function convertMaxFilterMode(maxFilter) {
48
47
  switch (maxFilter) {
49
48
  case 'nearest':
50
- return GL.NEAREST;
49
+ return 9728;
51
50
  case 'linear':
52
- return GL.LINEAR;
51
+ return 9729;
53
52
  }
54
53
  }
55
54
  function convertMinFilterMode(minFilter, mipmapFilter) {
@@ -58,55 +57,55 @@ function convertMinFilterMode(minFilter, mipmapFilter) {
58
57
  }
59
58
  switch (minFilter) {
60
59
  case 'nearest':
61
- return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;
60
+ return mipmapFilter === 'nearest' ? 9984 : 9986;
62
61
  case 'linear':
63
- return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;
62
+ return mipmapFilter === 'nearest' ? 9985 : 9987;
64
63
  }
65
64
  }
66
65
  export function convertToSamplerParameters(params) {
67
66
  const props = {};
68
- if (params[GL.TEXTURE_WRAP_S]) {
69
- props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);
67
+ if (params[10242]) {
68
+ props.addressModeU = convertToAddressMode(params[10242]);
70
69
  }
71
- if (params[GL.TEXTURE_WRAP_T]) {
72
- props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);
70
+ if (params[10243]) {
71
+ props.addressModeV = convertToAddressMode(params[10243]);
73
72
  }
74
- if (params[GL.TEXTURE_WRAP_R]) {
75
- props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);
73
+ if (params[32882]) {
74
+ props.addressModeW = convertToAddressMode(params[32882]);
76
75
  }
77
- if (params[GL.TEXTURE_MAG_FILTER]) {
78
- props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);
76
+ if (params[10240]) {
77
+ props.magFilter = convertToMaxFilterMode(params[10240]);
79
78
  }
80
- if (params[GL.TEXTURE_MIN_FILTER]) {
81
- props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);
79
+ if (params[10241]) {
80
+ props.minFilter = convertToMinFilterMode(params[10241]);
82
81
  }
83
- if (params[GL.TEXTURE_MIN_FILTER]) {
84
- props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);
82
+ if (params[10241]) {
83
+ props.mipmapFilter = convertToMipmapFilterMode(params[10241]);
85
84
  }
86
- if (params[GL.TEXTURE_MIN_LOD]) {
87
- props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];
85
+ if (params[33082]) {
86
+ props.lodMinClamp = params[33082];
88
87
  }
89
- if (params[GL.TEXTURE_MAX_LOD]) {
90
- props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];
88
+ if (params[33083]) {
89
+ props.lodMaxClamp = params[33083];
91
90
  }
92
- if (params[GL.TEXTURE_COMPARE_MODE]) {
93
- props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';
91
+ if (params[34892]) {
92
+ props.type = params[34892] === 34894 ? 'comparison-sampler' : 'color-sampler';
94
93
  }
95
- if (params[GL.TEXTURE_COMPARE_FUNC]) {
96
- props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);
94
+ if (params[34893]) {
95
+ props.compare = convertToCompareFunction('compare', params[34893]);
97
96
  }
98
- if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {
99
- props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];
97
+ if (params[34046]) {
98
+ props.maxAnisotropy = params[34046];
100
99
  }
101
100
  return props;
102
101
  }
103
102
  function convertToAddressMode(addressMode) {
104
103
  switch (addressMode) {
105
- case GL.CLAMP_TO_EDGE:
104
+ case 33071:
106
105
  return 'clamp-to-edge';
107
- case GL.REPEAT:
106
+ case 10497:
108
107
  return 'repeat';
109
- case GL.MIRRORED_REPEAT:
108
+ case 33648:
110
109
  return 'mirror-repeat';
111
110
  default:
112
111
  throw new Error('address');
@@ -114,9 +113,9 @@ function convertToAddressMode(addressMode) {
114
113
  }
115
114
  function convertToMaxFilterMode(filterMode) {
116
115
  switch (filterMode) {
117
- case GL.NEAREST:
116
+ case 9728:
118
117
  return 'nearest';
119
- case GL.LINEAR:
118
+ case 9729:
120
119
  return 'linear';
121
120
  default:
122
121
  throw new Error('maxfilter');
@@ -124,17 +123,17 @@ function convertToMaxFilterMode(filterMode) {
124
123
  }
125
124
  function convertToMinFilterMode(filterMode) {
126
125
  switch (filterMode) {
127
- case GL.NEAREST:
126
+ case 9728:
128
127
  return 'nearest';
129
- case GL.LINEAR:
128
+ case 9729:
130
129
  return 'linear';
131
- case GL.NEAREST_MIPMAP_NEAREST:
130
+ case 9984:
132
131
  return 'nearest';
133
- case GL.LINEAR_MIPMAP_NEAREST:
132
+ case 9985:
134
133
  return 'linear';
135
- case GL.NEAREST_MIPMAP_LINEAR:
134
+ case 9986:
136
135
  return 'nearest';
137
- case GL.LINEAR_MIPMAP_LINEAR:
136
+ case 9987:
138
137
  return 'linear';
139
138
  default:
140
139
  throw new Error('minfilter');
@@ -142,17 +141,17 @@ function convertToMinFilterMode(filterMode) {
142
141
  }
143
142
  function convertToMipmapFilterMode(filterMode) {
144
143
  switch (filterMode) {
145
- case GL.NEAREST:
144
+ case 9728:
146
145
  return 'nearest';
147
- case GL.LINEAR:
146
+ case 9729:
148
147
  return 'linear';
149
- case GL.NEAREST_MIPMAP_NEAREST:
148
+ case 9984:
150
149
  return 'nearest';
151
- case GL.LINEAR_MIPMAP_NEAREST:
150
+ case 9985:
152
151
  return 'nearest';
153
- case GL.NEAREST_MIPMAP_LINEAR:
152
+ case 9986:
154
153
  return 'linear';
155
- case GL.LINEAR_MIPMAP_LINEAR:
154
+ case 9987:
156
155
  return 'linear';
157
156
  default:
158
157
  throw new Error('mipmap');
@@ -162,11 +161,11 @@ export function updateSamplerParametersForNPOT(parameters) {
162
161
  const newParameters = {
163
162
  ...parameters
164
163
  };
165
- if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {
166
- newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;
164
+ if (parameters[10241] !== 9728) {
165
+ newParameters[10241] = 9729;
167
166
  }
168
- newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;
169
- newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;
167
+ newParameters[10242] = 33071;
168
+ newParameters[10243] = 33071;
170
169
  return newParameters;
171
170
  }
172
171
  //# sourceMappingURL=sampler-parameters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sampler-parameters.js","names":["GL","convertCompareFunction","convertToCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","TEXTURE_WRAP_S","convertAddressMode","addressModeV","TEXTURE_WRAP_T","addressModeW","TEXTURE_WRAP_R","magFilter","TEXTURE_MAG_FILTER","convertMaxFilterMode","minFilter","mipmapFilter","TEXTURE_MIN_FILTER","convertMinFilterMode","lodMinClamp","undefined","TEXTURE_MIN_LOD","lodMaxClamp","TEXTURE_MAX_LOD","type","TEXTURE_COMPARE_MODE","COMPARE_REF_TO_TEXTURE","compare","TEXTURE_COMPARE_FUNC","maxAnisotropy","TEXTURE_MAX_ANISOTROPY_EXT","addressMode","CLAMP_TO_EDGE","REPEAT","MIRRORED_REPEAT","maxFilter","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","convertToSamplerParameters","convertToAddressMode","convertToMaxFilterMode","convertToMinFilterMode","convertToMipmapFilterMode","Error","filterMode","updateSamplerParametersForNPOT","parameters","newParameters"],"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// SAMPLER FILTERS\nimport {SamplerParameters} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertCompareFunction, convertToCompareFunction} from './device-parameters';\n\n/* eslint-disable consistent-return */\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerParameters): GLSamplerParameters {\n const params: Record<number, number> = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n }\n if (props.compare) {\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL {\n switch (addressMode) {\n case 'clamp-to-edge': return GL.CLAMP_TO_EDGE;\n case 'repeat': return GL.REPEAT;\n case 'mirror-repeat': return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL {\n switch (maxFilter) {\n case 'nearest': return GL.NEAREST;\n case 'linear': return GL.LINEAR;\n }\n}\n\n/** \n * WebGPU has separate min filter and mipmap filter, \n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'nearest' | 'linear'): GL {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest': return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear': return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n\n// Convert from WebGL to WebGPU\n\n/**\n * Convert WebGL-style sampler props to WebGPU\n * @param props\n * @returns\n */\nexport function convertToSamplerParameters(params: GLSamplerParameters): SamplerParameters {\n const props: SamplerParameters = {};\n if (params[GL.TEXTURE_WRAP_S]) {\n props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);\n }\n if (params[GL.TEXTURE_WRAP_T]) {\n props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);\n }\n if (params[GL.TEXTURE_WRAP_R]) {\n props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);\n }\n if (params[GL.TEXTURE_MAG_FILTER]) {\n props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_LOD]) {\n props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];\n }\n if (params[GL.TEXTURE_MAX_LOD]) {\n props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];\n }\n if (params[GL.TEXTURE_COMPARE_MODE]) {\n props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';\n }\n if (params[GL.TEXTURE_COMPARE_FUNC]) {\n props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);\n }\n // NOTE depends on extension (very common)\n if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {\n props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];\n }\n return props;\n}\n\n/** Convert address more */\nfunction convertToAddressMode(addressMode: number): 'clamp-to-edge' | 'repeat' | 'mirror-repeat' {\n switch (addressMode) {\n case GL.CLAMP_TO_EDGE: return 'clamp-to-edge';\n case GL.REPEAT: return 'repeat';\n case GL.MIRRORED_REPEAT: return 'mirror-repeat';\n default: throw new Error('address');\n }\n}\n\nfunction convertToMaxFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n default: throw new Error('maxfilter');\n }\n}\n\n/** WebGPU has separate min filter and mipmap filter, WebGL is combined */\nfunction convertToMinFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'linear';\n case GL.NEAREST_MIPMAP_LINEAR: return 'nearest';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('minfilter');\n }\n}\n\nfunction convertToMipmapFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'nearest';\n case GL.NEAREST_MIPMAP_LINEAR: return 'linear';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('mipmap');\n }\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n*/\nexport function updateSamplerParametersForNPOT(parameters: GLSamplerParameters): GLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sampler-parameters.js","names":["convertCompareFunction","convertToCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","convertAddressMode","addressModeV","addressModeW","magFilter","convertMaxFilterMode","minFilter","mipmapFilter","convertMinFilterMode","lodMinClamp","undefined","lodMaxClamp","type","compare","maxAnisotropy","addressMode","maxFilter","convertToSamplerParameters","convertToAddressMode","convertToMaxFilterMode","convertToMinFilterMode","convertToMipmapFilterMode","Error","filterMode","updateSamplerParametersForNPOT","parameters","newParameters"],"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// SAMPLER FILTERS\nimport {SamplerParameters} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertCompareFunction, convertToCompareFunction} from './device-parameters';\n\n/* eslint-disable consistent-return */\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerParameters): GLSamplerParameters {\n const params: Record<number, number> = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n }\n if (props.compare) {\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL {\n switch (addressMode) {\n case 'clamp-to-edge': return GL.CLAMP_TO_EDGE;\n case 'repeat': return GL.REPEAT;\n case 'mirror-repeat': return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL {\n switch (maxFilter) {\n case 'nearest': return GL.NEAREST;\n case 'linear': return GL.LINEAR;\n }\n}\n\n/** \n * WebGPU has separate min filter and mipmap filter, \n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'nearest' | 'linear'): GL {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest': return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear': return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n\n// Convert from WebGL to WebGPU\n\n/**\n * Convert WebGL-style sampler props to WebGPU\n * @param props\n * @returns\n */\nexport function convertToSamplerParameters(params: GLSamplerParameters): SamplerParameters {\n const props: SamplerParameters = {};\n if (params[GL.TEXTURE_WRAP_S]) {\n props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);\n }\n if (params[GL.TEXTURE_WRAP_T]) {\n props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);\n }\n if (params[GL.TEXTURE_WRAP_R]) {\n props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);\n }\n if (params[GL.TEXTURE_MAG_FILTER]) {\n props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_LOD]) {\n props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];\n }\n if (params[GL.TEXTURE_MAX_LOD]) {\n props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];\n }\n if (params[GL.TEXTURE_COMPARE_MODE]) {\n props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';\n }\n if (params[GL.TEXTURE_COMPARE_FUNC]) {\n props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);\n }\n // NOTE depends on extension (very common)\n if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {\n props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];\n }\n return props;\n}\n\n/** Convert address more */\nfunction convertToAddressMode(addressMode: number): 'clamp-to-edge' | 'repeat' | 'mirror-repeat' {\n switch (addressMode) {\n case GL.CLAMP_TO_EDGE: return 'clamp-to-edge';\n case GL.REPEAT: return 'repeat';\n case GL.MIRRORED_REPEAT: return 'mirror-repeat';\n default: throw new Error('address');\n }\n}\n\nfunction convertToMaxFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n default: throw new Error('maxfilter');\n }\n}\n\n/** WebGPU has separate min filter and mipmap filter, WebGL is combined */\nfunction convertToMinFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'linear';\n case GL.NEAREST_MIPMAP_LINEAR: return 'nearest';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('minfilter');\n }\n}\n\nfunction convertToMipmapFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'nearest';\n case GL.NEAREST_MIPMAP_LINEAR: return 'linear';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('mipmap');\n }\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n*/\nexport function updateSamplerParametersForNPOT(parameters: GLSamplerParameters): GLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { GL } from '@luma.gl/constants';
2
1
  export function getShaderAttributeTypeFromGL(type, components) {
3
2
  const dataType = getShaderDataTypeFromGL(type);
4
3
  switch (components) {
@@ -16,21 +15,21 @@ export function getShaderAttributeTypeFromGL(type, components) {
16
15
  }
17
16
  export function getShaderDataTypeFromGL(type) {
18
17
  switch (type) {
19
- case GL.INT:
18
+ case 5124:
20
19
  return 'i32';
21
- case GL.UNSIGNED_INT:
20
+ case 5125:
22
21
  return 'u32';
23
- case GL.SHORT:
22
+ case 5122:
24
23
  return 'i32';
25
- case GL.UNSIGNED_SHORT:
24
+ case 5123:
26
25
  return 'u32';
27
- case GL.BYTE:
26
+ case 5120:
28
27
  return 'i32';
29
- case GL.UNSIGNED_BYTE:
28
+ case 5121:
30
29
  return 'u32';
31
- case GL.FLOAT:
30
+ case 5126:
32
31
  return 'f32';
33
- case GL.HALF_FLOAT:
32
+ case 5131:
34
33
  return 'f16';
35
34
  default:
36
35
  throw new Error(String(type));
@@ -39,13 +38,13 @@ export function getShaderDataTypeFromGL(type) {
39
38
  export function getGLFromShaderDataType(type) {
40
39
  switch (type) {
41
40
  case 'i32':
42
- return GL.INT;
41
+ return 5124;
43
42
  case 'u32':
44
- return GL.UNSIGNED_INT;
43
+ return 5125;
45
44
  case 'f32':
46
- return GL.FLOAT;
45
+ return 5126;
47
46
  case 'f16':
48
- return GL.HALF_FLOAT;
47
+ return 5131;
49
48
  default:
50
49
  throw new Error(String(type));
51
50
  }