@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
@@ -1,6 +1,5 @@
1
1
  import { RenderPipeline, cast, splitUniformsAndBindings, log } from '@luma.gl/core';
2
2
  import { mergeShaderLayout } from '@luma.gl/core';
3
- import { GL } from '@luma.gl/constants';
4
3
  import { getShaderLayout } from "../helpers/get-shader-layout.js";
5
4
  import { withDeviceAndGLParameters } from "../converters/device-parameters.js";
6
5
  import { setUniform } from "../helpers/set-uniform.js";
@@ -31,7 +30,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
31
30
  this.fs = cast(props.fs);
32
31
  const {
33
32
  varyings,
34
- bufferMode = GL.SEPARATE_ATTRIBS
33
+ bufferMode = 35981
35
34
  } = props;
36
35
  if (varyings && varyings.length > 0) {
37
36
  var _this$device$gl;
@@ -143,12 +142,12 @@ export class WEBGLRenderPipeline extends RenderPipeline {
143
142
  gl.linkProgram(this.handle);
144
143
  log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();
145
144
  if (!gl.debug && log.level === 0) {}
146
- const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);
145
+ const linked = gl.getProgramParameter(this.handle, 35714);
147
146
  if (!linked) {
148
147
  throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);
149
148
  }
150
149
  gl.validateProgram(this.handle);
151
- const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);
150
+ const validated = gl.getProgramParameter(this.handle, 35715);
152
151
  if (!validated) {
153
152
  throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);
154
153
  }
@@ -184,14 +183,14 @@ export class WEBGLRenderPipeline extends RenderPipeline {
184
183
  name
185
184
  } = binding;
186
185
  const location = gl2.getUniformBlockIndex(this.handle, name);
187
- if (location === GL.INVALID_INDEX) {
186
+ if (location === 4294967295) {
188
187
  throw new Error(`Invalid uniform block name ${name}`);
189
188
  }
190
189
  gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);
191
190
  if (value instanceof WEBGLBuffer) {
192
- gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);
191
+ gl2.bindBufferBase(35345, uniformBufferIndex, value.handle);
193
192
  } else {
194
- gl2.bindBufferRange(GL.UNIFORM_BUFFER, uniformBufferIndex, value.buffer.handle, value.offset || 0, value.size || value.buffer.byteLength - value.offset);
193
+ gl2.bindBufferRange(35345, uniformBufferIndex, value.buffer.handle, value.offset || 0, value.size || value.buffer.byteLength - value.offset);
195
194
  }
196
195
  uniformBufferIndex += 1;
197
196
  break;
@@ -208,7 +207,7 @@ export class WEBGLRenderPipeline extends RenderPipeline {
208
207
  } else {
209
208
  throw new Error('No texture');
210
209
  }
211
- gl2.activeTexture(GL.TEXTURE0 + textureUnit);
210
+ gl2.activeTexture(33984 + textureUnit);
212
211
  gl2.bindTexture(texture.target, texture.handle);
213
212
  textureUnit += 1;
214
213
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-render-pipeline.js","names":["RenderPipeline","cast","splitUniformsAndBindings","log","mergeShaderLayout","GL","getShaderLayout","withDeviceAndGLParameters","setUniform","WEBGLBuffer","WEBGLFramebuffer","WEBGLTexture","getGLDrawMode","LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","constructor","device","props","handle","vs","fs","introspectedLayout","uniforms","bindings","varyings","_uniformCount","_uniformSetters","gl","createProgram","setSpectorMetadata","id","bufferMode","SEPARATE_ATTRIBS","length","_this$device$gl","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","shaderLayout","destroy","deleteProgram","destroyed","setBindings","name","value","Object","entries","binding","find","validBindings","map","join","warn","type","buffer","Error","setUniforms","keys","forEach","assign","draw","options","_vertexArray$indexBuf","renderPass","vertexArray","vertexCount","instanceCount","firstVertex","transformFeedback","glDrawMode","topology","isIndexed","Boolean","indexBuffer","glIndexType","isInstanced","Number","_areTexturesRenderable","useProgram","bindBeforeRender","begin","_applyBindings","_applyUniforms","webglRenderPass","parameters","glParameters","_this$device$gl2","drawElementsInstanced","drawElements","_this$device$gl3","drawArraysInstanced","drawArrays","end","unbindAfterRender","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","LINK_STATUS","getProgramInfoLog","validateProgram","validated","VALIDATE_STATUS","texturesRenderable","texture","update","loaded","textureUnit","uniformBufferIndex","replace","location","getUniformBlockIndex","INVALID_INDEX","uniformBlockBinding","bindBufferBase","UNIFORM_BUFFER","bindBufferRange","offset","size","byteLength","colorAttachments","activeTexture","TEXTURE0","bindTexture","target","uniformLayout","_this$uniforms$name","undefined"],"sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {UniformValue, RenderPipelineProps, Binding} from '@luma.gl/core';\nimport type {ShaderLayout} from '@luma.gl/core';\nimport type {RenderPass, VertexArray} from '@luma.gl/core';\nimport {RenderPipeline, cast, splitUniformsAndBindings, log} from '@luma.gl/core';\nimport {mergeShaderLayout} from '@luma.gl/core';\n// import {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\n\nimport {getShaderLayout} from '../helpers/get-shader-layout';\nimport {withDeviceAndGLParameters} from '../converters/device-parameters';\nimport {setUniform} from '../helpers/set-uniform';\n// import {copyUniform, checkUniformValues} from '../../classes/uniforms';\n\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLBuffer} from './webgl-buffer';\nimport {WEBGLShader} from './webgl-shader';\nimport {WEBGLFramebuffer} from './webgl-framebuffer';\nimport {WEBGLTexture} from './webgl-texture';\n// import {WEBGLVertexArray} from './webgl-vertex-array';\nimport {WEBGLRenderPass} from './webgl-render-pass';\nimport {WEBGLTransformFeedback} from './webgl-transform-feedback';\nimport {getGLDrawMode} from '../helpers/webgl-topology-utils';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\n/** Creates a new render pipeline */\nexport class WEBGLRenderPipeline extends RenderPipeline {\n /** The WebGL device that created this render pipeline */\n device: WebGLDevice;\n /** Handle to underlying WebGL program */\n handle: WebGLProgram;\n /** vertex shader */\n vs: WEBGLShader;\n /** fragment shader */\n fs: WEBGLShader;\n /** The layout extracted from shader by WebGL introspection APIs */\n introspectedLayout: ShaderLayout;\n\n /** Uniforms set on this model */\n uniforms: Record<string, UniformValue> = {};\n /** Bindings set on this model */\n bindings: Record<string, Binding> = {};\n /** WebGL varyings */\n varyings: string[] | null = null;\n\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function> = {}; // TODO are these used?\n\n constructor(device: WebGLDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n this.device.setSpectorMetadata(this.handle, {id: this.props.id});\n\n // Create shaders if needed\n this.vs = cast<WEBGLShader>(props.vs);\n this.fs = cast<WEBGLShader>(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;\n if (varyings && varyings.length > 0) {\n this.device.assertWebGL2();\n this.varyings = varyings;\n this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);\n // Merge provided layout with introspected layout\n this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);\n // Merge layout with any buffer map overrides\n // this.bufferLayout = props.bufferLayout || [];\n // this.shaderLayout = mergeBufferMap(this.shaderLayout, this.bufferLayout);\n }\n\n override destroy(): void {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n // setIndexBuffer(indexBuffer: Buffer): void {\n // const webglBuffer = cast<WEBGLBuffer>(indexBuffer);\n // this.vertexArrayObject.setElementBuffer(webglBuffer);\n // this._indexBuffer = indexBuffer;\n // }\n\n // /** @todo needed for portable model */\n // setAttributes(attributes: Record<string, Buffer>): void {\n // for (const [name, buffer] of Object.entries(attributes)) {\n // const webglBuffer = cast<WEBGLBuffer>(buffer);\n // const attribute = getAttributeLayout(this.layout, name);\n // if (!attribute) {\n // log.warn(\n // `Ignoring buffer supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\" (buffer \"${buffer.id}\")`\n // )();\n // continue;\n // }\n // const decoded = decodeVertexFormat(attribute.format);\n // const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;\n // const divisor = attribute.stepMode === 'instance' ? 1 : 0;\n // const type = getWebGLDataType(typeString);\n // this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {\n // size,\n // type,\n // stride,\n // offset: 0,\n // normalized,\n // integer,\n // divisor\n // });\n // }\n // }\n\n /**\n * Bindings include: textures, samplers and uniform buffers\n * @todo needed for portable model\n */\n setBindings(bindings: Record<string, Binding>): void {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n\n for (const [name, value] of Object.entries(bindings)) {\n // Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block\n // This convention allows shaders to name uniform blocks as `uniform appUniforms {} app;`\n // and reference them as `app` from both GLSL and JS.\n // TODO - this is rather hacky - we could also remap the name directly in the shader layout.\n const binding =\n this.shaderLayout.bindings.find(binding => binding.name === name) ||\n this.shaderLayout.bindings.find(binding => binding.name === `${name}Uniforms`);\n\n if (!binding) {\n const validBindings = this.shaderLayout.bindings\n .map(binding => `\"${binding.name}\"`)\n .join(', ');\n log.warn(\n `Unknown binding \"${name}\" in render pipeline \"${this.id}\", expected one of ${validBindings}`\n )();\n continue; // eslint-disable-line no-continue\n }\n if (!value) {\n log.warn(`Unsetting binding \"${name}\" in render pipeline \"${this.id}\"`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n\n this.bindings[name] = value;\n }\n }\n\n setUniforms(uniforms: Record<string, UniformValue>) {\n const {bindings} = splitUniformsAndBindings(uniforms);\n Object.keys(bindings).forEach(name => {\n log.warn(\n `Unsupported value \"${bindings[name]}\" used in setUniforms() for key ${name}. Use setBindings() instead?`\n )();\n });\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options: {\n renderPass: RenderPass;\n /** vertex attributes */\n vertexArray: VertexArray;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n transformFeedback?: WEBGLTransformFeedback;\n }): boolean {\n const {\n renderPass,\n vertexArray,\n vertexCount,\n // indexCount,\n instanceCount,\n firstVertex = 0,\n // firstIndex,\n // firstInstance,\n // baseVertex,\n transformFeedback\n } = options;\n\n const glDrawMode = getGLDrawMode(this.props.topology);\n const isIndexed: boolean = Boolean(vertexArray.indexBuffer);\n const glIndexType = (vertexArray.indexBuffer as WEBGLBuffer)?.glIndexType;\n const isInstanced: boolean = Number(instanceCount) > 0;\n\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || vertexCount === 0) {\n // (isInstanced && instanceCount === 0)\n return false;\n }\n\n this.device.gl.useProgram(this.handle);\n\n // Note: Rebinds constant attributes before each draw call\n vertexArray.bindBeforeRender(renderPass);\n\n if (transformFeedback) {\n transformFeedback.begin(this.props.topology);\n }\n\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n\n const webglRenderPass = renderPass as WEBGLRenderPass;\n // // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n // if (isIndexed && isInstanced) {\n // // ANGLE_instanced_arrays extension\n // this.device.gl2?.drawElementsInstanced(\n // drawMode,\n // vertexCount || 0, // indexCount?\n // indexType,\n // firstVertex,\n // instanceCount || 0\n // );\n // // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n // } else if (isIndexed) {\n // this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?\n // } else if (isInstanced) {\n // this.device.gl2?.drawArraysInstanced(\n // drawMode,\n // firstVertex,\n // vertexCount || 0,\n // instanceCount || 0\n // );\n // } else {\n // this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);\n // }\n // });\n\n withDeviceAndGLParameters(\n this.device,\n this.props.parameters,\n webglRenderPass.glParameters,\n () => {\n if (isIndexed && isInstanced) {\n // ANGLE_instanced_arrays extension\n this.device.gl2?.drawElementsInstanced(\n glDrawMode,\n vertexCount || 0, // indexCount?\n glIndexType,\n firstVertex,\n instanceCount || 0\n );\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gl2.drawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);\n } else if (isIndexed) {\n this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?\n } else if (isInstanced) {\n this.device.gl2?.drawArraysInstanced(\n glDrawMode,\n firstVertex,\n vertexCount || 0,\n instanceCount || 0\n );\n } else {\n this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);\n }\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n }\n );\n\n vertexArray.unbindAfterRender(renderPass);\n\n return true;\n }\n\n // setAttributes(attributes: Record<string, Buffer>): void {}\n // setBindings(bindings: Record<string, Binding>): void {}\n\n protected _compileAndLink() {\n const {gl} = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (!gl.debug && log.level === 0) {\n // return;\n }\n\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const [, texture] of Object.entries(this.bindings)) {\n if (texture instanceof WEBGLTexture) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n\n return texturesRenderable;\n }\n\n /**\n * Constant attributes need to be reset before every draw call\n * Any attribute that is disabled in the current vertex array object\n * is read from the context's global constant value for that attribute location.\n * @note Constant attributes are only supported in WebGL, not in WebGPU\n *\n _applyConstantAttributes(vertexArray: WEBGLVertexArray): void {\n const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);\n for (const [name, value] of Object.entries(this.)) {\n const attributeInfo = attributeInfos[name];\n if (!attributeInfo) {\n log.warn(\n `Ignoring constant value supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\"`\n )();\n continue; // eslint-disable-line no-continue\n }\n vertexArray.setConstant(attributeInfo.location, value);\n vertexArray.enable(attributeInfo.location, false);\n }\n }\n */\n\n /** Apply any bindings (before each draw call) */\n _applyBindings() {\n this.device.gl.useProgram(this.handle);\n\n const {gl2} = this.device;\n if (!gl2) {\n throw new Error('bindings');\n }\n\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.shaderLayout.bindings) {\n // Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block\n const value =\n this.bindings[binding.name] || this.bindings[binding.name.replace(/Uniforms$/, '')];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const {name} = binding;\n const location = gl2.getUniformBlockIndex(this.handle, name);\n if (location === GL.INVALID_INDEX) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);\n } else {\n gl2.bindBufferRange(\n GL.UNIFORM_BUFFER,\n uniformBufferIndex,\n // @ts-expect-error\n value.buffer.handle,\n // @ts-expect-error\n value.offset || 0,\n // @ts-expect-error\n value.size || value.buffer.byteLength - value.offset\n );\n }\n uniformBufferIndex += 1;\n break;\n\n case 'texture':\n if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {\n throw new Error('texture');\n }\n let texture: WEBGLTexture;\n if (value instanceof WEBGLTexture) {\n texture = value;\n } else if (\n value instanceof WEBGLFramebuffer &&\n value.colorAttachments[0] instanceof WEBGLTexture\n ) {\n log.warn(\n 'Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead'\n )();\n texture = value.colorAttachments[0];\n } else {\n throw new Error('No texture');\n }\n\n gl2.activeTexture(GL.TEXTURE0 + textureUnit);\n gl2.bindTexture(texture.target, texture.handle);\n // gl2.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n\n case 'sampler':\n // ignore\n break;\n\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n\n /**\n * Due to program sharing, uniforms need to be reset before every draw call\n * (though caching will avoid redundant WebGL calls)\n */\n _applyUniforms() {\n for (const uniformLayout of this.shaderLayout.uniforms || []) {\n const {name, location, type, textureUnit} = uniformLayout;\n const value = this.uniforms[name] ?? textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"webgl-render-pipeline.js","names":["RenderPipeline","cast","splitUniformsAndBindings","log","mergeShaderLayout","getShaderLayout","withDeviceAndGLParameters","setUniform","WEBGLBuffer","WEBGLFramebuffer","WEBGLTexture","getGLDrawMode","LOG_PROGRAM_PERF_PRIORITY","WEBGLRenderPipeline","constructor","device","props","handle","vs","fs","introspectedLayout","uniforms","bindings","varyings","_uniformCount","_uniformSetters","gl","createProgram","setSpectorMetadata","id","bufferMode","length","_this$device$gl","assertWebGL2","gl2","transformFeedbackVaryings","_compileAndLink","shaderLayout","destroy","deleteProgram","destroyed","setBindings","name","value","Object","entries","binding","find","validBindings","map","join","warn","type","buffer","Error","setUniforms","keys","forEach","assign","draw","options","_vertexArray$indexBuf","renderPass","vertexArray","vertexCount","instanceCount","firstVertex","transformFeedback","glDrawMode","topology","isIndexed","Boolean","indexBuffer","glIndexType","isInstanced","Number","_areTexturesRenderable","useProgram","bindBeforeRender","begin","_applyBindings","_applyUniforms","webglRenderPass","parameters","glParameters","_this$device$gl2","drawElementsInstanced","drawElements","_this$device$gl3","drawArraysInstanced","drawArrays","end","unbindAfterRender","attachShader","time","linkProgram","timeEnd","debug","level","linked","getProgramParameter","getProgramInfoLog","validateProgram","validated","texturesRenderable","texture","update","loaded","textureUnit","uniformBufferIndex","replace","location","getUniformBlockIndex","uniformBlockBinding","bindBufferBase","bindBufferRange","offset","size","byteLength","colorAttachments","activeTexture","bindTexture","target","uniformLayout","_this$uniforms$name","undefined"],"sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {UniformValue, RenderPipelineProps, Binding} from '@luma.gl/core';\nimport type {ShaderLayout} from '@luma.gl/core';\nimport type {RenderPass, VertexArray} from '@luma.gl/core';\nimport {RenderPipeline, cast, splitUniformsAndBindings, log} from '@luma.gl/core';\nimport {mergeShaderLayout} from '@luma.gl/core';\n// import {mergeShaderLayout, getAttributeInfosFromLayouts} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\n\nimport {getShaderLayout} from '../helpers/get-shader-layout';\nimport {withDeviceAndGLParameters} from '../converters/device-parameters';\nimport {setUniform} from '../helpers/set-uniform';\n// import {copyUniform, checkUniformValues} from '../../classes/uniforms';\n\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLBuffer} from './webgl-buffer';\nimport {WEBGLShader} from './webgl-shader';\nimport {WEBGLFramebuffer} from './webgl-framebuffer';\nimport {WEBGLTexture} from './webgl-texture';\n// import {WEBGLVertexArray} from './webgl-vertex-array';\nimport {WEBGLRenderPass} from './webgl-render-pass';\nimport {WEBGLTransformFeedback} from './webgl-transform-feedback';\nimport {getGLDrawMode} from '../helpers/webgl-topology-utils';\n\nconst LOG_PROGRAM_PERF_PRIORITY = 4;\n\n/** Creates a new render pipeline */\nexport class WEBGLRenderPipeline extends RenderPipeline {\n /** The WebGL device that created this render pipeline */\n device: WebGLDevice;\n /** Handle to underlying WebGL program */\n handle: WebGLProgram;\n /** vertex shader */\n vs: WEBGLShader;\n /** fragment shader */\n fs: WEBGLShader;\n /** The layout extracted from shader by WebGL introspection APIs */\n introspectedLayout: ShaderLayout;\n\n /** Uniforms set on this model */\n uniforms: Record<string, UniformValue> = {};\n /** Bindings set on this model */\n bindings: Record<string, Binding> = {};\n /** WebGL varyings */\n varyings: string[] | null = null;\n\n _uniformCount: number = 0;\n _uniformSetters: Record<string, Function> = {}; // TODO are these used?\n\n constructor(device: WebGLDevice, props: RenderPipelineProps) {\n super(device, props);\n this.device = device;\n this.handle = this.props.handle || this.device.gl.createProgram();\n this.device.setSpectorMetadata(this.handle, {id: this.props.id});\n\n // Create shaders if needed\n this.vs = cast<WEBGLShader>(props.vs);\n this.fs = cast<WEBGLShader>(props.fs);\n // assert(this.vs.stage === 'vertex');\n // assert(this.fs.stage === 'fragment');\n\n // Setup varyings if supplied\n // @ts-expect-error WebGL only\n const {varyings, bufferMode = GL.SEPARATE_ATTRIBS} = props;\n if (varyings && varyings.length > 0) {\n this.device.assertWebGL2();\n this.varyings = varyings;\n this.device.gl2?.transformFeedbackVaryings(this.handle, varyings, bufferMode);\n }\n\n this._compileAndLink();\n\n this.introspectedLayout = getShaderLayout(this.device.gl, this.handle);\n // Merge provided layout with introspected layout\n this.shaderLayout = mergeShaderLayout(this.introspectedLayout, props.shaderLayout);\n // Merge layout with any buffer map overrides\n // this.bufferLayout = props.bufferLayout || [];\n // this.shaderLayout = mergeBufferMap(this.shaderLayout, this.bufferLayout);\n }\n\n override destroy(): void {\n if (this.handle) {\n this.device.gl.deleteProgram(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n // setIndexBuffer(indexBuffer: Buffer): void {\n // const webglBuffer = cast<WEBGLBuffer>(indexBuffer);\n // this.vertexArrayObject.setElementBuffer(webglBuffer);\n // this._indexBuffer = indexBuffer;\n // }\n\n // /** @todo needed for portable model */\n // setAttributes(attributes: Record<string, Buffer>): void {\n // for (const [name, buffer] of Object.entries(attributes)) {\n // const webglBuffer = cast<WEBGLBuffer>(buffer);\n // const attribute = getAttributeLayout(this.layout, name);\n // if (!attribute) {\n // log.warn(\n // `Ignoring buffer supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\" (buffer \"${buffer.id}\")`\n // )();\n // continue;\n // }\n // const decoded = decodeVertexFormat(attribute.format);\n // const {type: typeString, components: size, byteLength: stride, normalized, integer} = decoded;\n // const divisor = attribute.stepMode === 'instance' ? 1 : 0;\n // const type = getWebGLDataType(typeString);\n // this.vertexArrayObject.setBuffer(attribute.location, webglBuffer, {\n // size,\n // type,\n // stride,\n // offset: 0,\n // normalized,\n // integer,\n // divisor\n // });\n // }\n // }\n\n /**\n * Bindings include: textures, samplers and uniform buffers\n * @todo needed for portable model\n */\n setBindings(bindings: Record<string, Binding>): void {\n // if (log.priority >= 2) {\n // checkUniformValues(uniforms, this.id, this._uniformSetters);\n // }\n\n for (const [name, value] of Object.entries(bindings)) {\n // Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block\n // This convention allows shaders to name uniform blocks as `uniform appUniforms {} app;`\n // and reference them as `app` from both GLSL and JS.\n // TODO - this is rather hacky - we could also remap the name directly in the shader layout.\n const binding =\n this.shaderLayout.bindings.find(binding => binding.name === name) ||\n this.shaderLayout.bindings.find(binding => binding.name === `${name}Uniforms`);\n\n if (!binding) {\n const validBindings = this.shaderLayout.bindings\n .map(binding => `\"${binding.name}\"`)\n .join(', ');\n log.warn(\n `Unknown binding \"${name}\" in render pipeline \"${this.id}\", expected one of ${validBindings}`\n )();\n continue; // eslint-disable-line no-continue\n }\n if (!value) {\n log.warn(`Unsetting binding \"${name}\" in render pipeline \"${this.id}\"`)();\n }\n switch (binding.type) {\n case 'uniform':\n // @ts-expect-error\n if (!(value instanceof WEBGLBuffer) && !(value.buffer instanceof WEBGLBuffer)) {\n throw new Error('buffer value');\n }\n break;\n case 'texture':\n if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {\n throw new Error('texture value');\n }\n break;\n case 'sampler':\n log.warn(`Ignoring sampler ${name}`)();\n break;\n default:\n throw new Error(binding.type);\n }\n\n this.bindings[name] = value;\n }\n }\n\n setUniforms(uniforms: Record<string, UniformValue>) {\n const {bindings} = splitUniformsAndBindings(uniforms);\n Object.keys(bindings).forEach(name => {\n log.warn(\n `Unsupported value \"${bindings[name]}\" used in setUniforms() for key ${name}. Use setBindings() instead?`\n )();\n });\n // TODO - check against layout\n Object.assign(this.uniforms, uniforms);\n }\n\n /** @todo needed for portable model\n * @note The WebGL API is offers many ways to draw things\n * This function unifies those ways into a single call using common parameters with sane defaults\n */\n draw(options: {\n renderPass: RenderPass;\n /** vertex attributes */\n vertexArray: VertexArray;\n vertexCount?: number;\n indexCount?: number;\n instanceCount?: number;\n firstVertex?: number;\n firstIndex?: number;\n firstInstance?: number;\n baseVertex?: number;\n transformFeedback?: WEBGLTransformFeedback;\n }): boolean {\n const {\n renderPass,\n vertexArray,\n vertexCount,\n // indexCount,\n instanceCount,\n firstVertex = 0,\n // firstIndex,\n // firstInstance,\n // baseVertex,\n transformFeedback\n } = options;\n\n const glDrawMode = getGLDrawMode(this.props.topology);\n const isIndexed: boolean = Boolean(vertexArray.indexBuffer);\n const glIndexType = (vertexArray.indexBuffer as WEBGLBuffer)?.glIndexType;\n const isInstanced: boolean = Number(instanceCount) > 0;\n\n // Avoid WebGL draw call when not rendering any data or values are incomplete\n // Note: async textures set as uniforms might still be loading.\n // Now that all uniforms have been updated, check if any texture\n // in the uniforms is not yet initialized, then we don't draw\n if (!this._areTexturesRenderable() || vertexCount === 0) {\n // (isInstanced && instanceCount === 0)\n return false;\n }\n\n this.device.gl.useProgram(this.handle);\n\n // Note: Rebinds constant attributes before each draw call\n vertexArray.bindBeforeRender(renderPass);\n\n if (transformFeedback) {\n transformFeedback.begin(this.props.topology);\n }\n\n // We have to apply bindings before every draw call since other draw calls will overwrite\n this._applyBindings();\n this._applyUniforms();\n\n const webglRenderPass = renderPass as WEBGLRenderPass;\n // // TODO - Use polyfilled WebGL2RenderingContext instead of ANGLE extension\n // if (isIndexed && isInstanced) {\n // // ANGLE_instanced_arrays extension\n // this.device.gl2?.drawElementsInstanced(\n // drawMode,\n // vertexCount || 0, // indexCount?\n // indexType,\n // firstVertex,\n // instanceCount || 0\n // );\n // // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // // this.device.gl2.drawRangeElements(drawMode, start, end, vertexCount, indexType, offset);\n // } else if (isIndexed) {\n // this.device.gl.drawElements(drawMode, vertexCount || 0, indexType, firstVertex); // indexCount?\n // } else if (isInstanced) {\n // this.device.gl2?.drawArraysInstanced(\n // drawMode,\n // firstVertex,\n // vertexCount || 0,\n // instanceCount || 0\n // );\n // } else {\n // this.device.gl.drawArrays(drawMode, firstVertex, vertexCount || 0);\n // }\n // });\n\n withDeviceAndGLParameters(\n this.device,\n this.props.parameters,\n webglRenderPass.glParameters,\n () => {\n if (isIndexed && isInstanced) {\n // ANGLE_instanced_arrays extension\n this.device.gl2?.drawElementsInstanced(\n glDrawMode,\n vertexCount || 0, // indexCount?\n glIndexType,\n firstVertex,\n instanceCount || 0\n );\n // } else if (isIndexed && this.device.isWebGL2 && !isNaN(start) && !isNaN(end)) {\n // this.device.gl2.drawRangeElements(glDrawMode, start, end, vertexCount, glIndexType, offset);\n } else if (isIndexed) {\n this.device.gl.drawElements(glDrawMode, vertexCount || 0, glIndexType, firstVertex); // indexCount?\n } else if (isInstanced) {\n this.device.gl2?.drawArraysInstanced(\n glDrawMode,\n firstVertex,\n vertexCount || 0,\n instanceCount || 0\n );\n } else {\n this.device.gl.drawArrays(glDrawMode, firstVertex, vertexCount || 0);\n }\n\n if (transformFeedback) {\n transformFeedback.end();\n }\n }\n );\n\n vertexArray.unbindAfterRender(renderPass);\n\n return true;\n }\n\n // setAttributes(attributes: Record<string, Buffer>): void {}\n // setBindings(bindings: Record<string, Binding>): void {}\n\n protected _compileAndLink() {\n const {gl} = this.device;\n gl.attachShader(this.handle, this.vs.handle);\n gl.attachShader(this.handle, this.fs.handle);\n log.time(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n gl.linkProgram(this.handle);\n log.timeEnd(LOG_PROGRAM_PERF_PRIORITY, `linkProgram for ${this.id}`)();\n\n // Avoid checking program linking error in production\n // @ts-expect-error\n if (!gl.debug && log.level === 0) {\n // return;\n }\n\n const linked = gl.getProgramParameter(this.handle, gl.LINK_STATUS);\n if (!linked) {\n throw new Error(`Error linking: ${gl.getProgramInfoLog(this.handle)}`);\n }\n\n gl.validateProgram(this.handle);\n const validated = gl.getProgramParameter(this.handle, gl.VALIDATE_STATUS);\n if (!validated) {\n throw new Error(`Error validating: ${gl.getProgramInfoLog(this.handle)}`);\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Checks if all texture-values uniforms are renderable (i.e. loaded)\n * Update a texture if needed (e.g. from video)\n * Note: This is currently done before every draw call\n */\n _areTexturesRenderable() {\n let texturesRenderable = true;\n\n for (const [, texture] of Object.entries(this.bindings)) {\n if (texture instanceof WEBGLTexture) {\n texture.update();\n texturesRenderable = texturesRenderable && texture.loaded;\n }\n }\n\n return texturesRenderable;\n }\n\n /**\n * Constant attributes need to be reset before every draw call\n * Any attribute that is disabled in the current vertex array object\n * is read from the context's global constant value for that attribute location.\n * @note Constant attributes are only supported in WebGL, not in WebGPU\n *\n _applyConstantAttributes(vertexArray: WEBGLVertexArray): void {\n const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);\n for (const [name, value] of Object.entries(this.)) {\n const attributeInfo = attributeInfos[name];\n if (!attributeInfo) {\n log.warn(\n `Ignoring constant value supplied for unknown attribute \"${name}\" in pipeline \"${this.id}\"`\n )();\n continue; // eslint-disable-line no-continue\n }\n vertexArray.setConstant(attributeInfo.location, value);\n vertexArray.enable(attributeInfo.location, false);\n }\n }\n */\n\n /** Apply any bindings (before each draw call) */\n _applyBindings() {\n this.device.gl.useProgram(this.handle);\n\n const {gl2} = this.device;\n if (!gl2) {\n throw new Error('bindings');\n }\n\n let textureUnit = 0;\n let uniformBufferIndex = 0;\n for (const binding of this.shaderLayout.bindings) {\n // Accept both `xyz` and `xyzUniforms` as valid names for `xyzUniforms` uniform block\n const value =\n this.bindings[binding.name] || this.bindings[binding.name.replace(/Uniforms$/, '')];\n if (!value) {\n throw new Error(`No value for binding ${binding.name} in ${this.id}`);\n }\n switch (binding.type) {\n case 'uniform':\n // Set buffer\n const {name} = binding;\n const location = gl2.getUniformBlockIndex(this.handle, name);\n if (location === GL.INVALID_INDEX) {\n throw new Error(`Invalid uniform block name ${name}`);\n }\n gl2.uniformBlockBinding(this.handle, uniformBufferIndex, location);\n // console.debug(binding, location);\n if (value instanceof WEBGLBuffer) {\n gl2.bindBufferBase(GL.UNIFORM_BUFFER, uniformBufferIndex, value.handle);\n } else {\n gl2.bindBufferRange(\n GL.UNIFORM_BUFFER,\n uniformBufferIndex,\n // @ts-expect-error\n value.buffer.handle,\n // @ts-expect-error\n value.offset || 0,\n // @ts-expect-error\n value.size || value.buffer.byteLength - value.offset\n );\n }\n uniformBufferIndex += 1;\n break;\n\n case 'texture':\n if (!(value instanceof WEBGLTexture || value instanceof WEBGLFramebuffer)) {\n throw new Error('texture');\n }\n let texture: WEBGLTexture;\n if (value instanceof WEBGLTexture) {\n texture = value;\n } else if (\n value instanceof WEBGLFramebuffer &&\n value.colorAttachments[0] instanceof WEBGLTexture\n ) {\n log.warn(\n 'Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead'\n )();\n texture = value.colorAttachments[0];\n } else {\n throw new Error('No texture');\n }\n\n gl2.activeTexture(GL.TEXTURE0 + textureUnit);\n gl2.bindTexture(texture.target, texture.handle);\n // gl2.bindSampler(textureUnit, sampler.handle);\n textureUnit += 1;\n break;\n\n case 'sampler':\n // ignore\n break;\n\n case 'storage':\n case 'read-only-storage':\n throw new Error(`binding type '${binding.type}' not supported in WebGL`);\n }\n }\n }\n\n /**\n * Due to program sharing, uniforms need to be reset before every draw call\n * (though caching will avoid redundant WebGL calls)\n */\n _applyUniforms() {\n for (const uniformLayout of this.shaderLayout.uniforms || []) {\n const {name, location, type, textureUnit} = uniformLayout;\n const value = this.uniforms[name] ?? textureUnit;\n if (value !== undefined) {\n setUniform(this.device.gl, location, type, value);\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { Sampler } from '@luma.gl/core';
2
- import { GL } from '@luma.gl/constants';
3
2
  import { convertSamplerParametersToWebGL } from "../converters/sampler-parameters.js";
4
3
  export class WEBGLSampler extends Sampler {
5
4
  constructor(device, props) {
@@ -27,8 +26,8 @@ export class WEBGLSampler extends Sampler {
27
26
  for (const [pname, value] of Object.entries(parameters)) {
28
27
  const param = Number(pname);
29
28
  switch (param) {
30
- case GL.TEXTURE_MIN_LOD:
31
- case GL.TEXTURE_MAX_LOD:
29
+ case 33082:
30
+ case 33083:
32
31
  this.device.gl2.samplerParameterf(this.handle, param, value);
33
32
  break;
34
33
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-sampler.js","names":["Sampler","GL","convertSamplerParametersToWebGL","WEBGLSampler","constructor","device","props","handle","parameters","isWebGL2","gl2","createSampler","_setSamplerParameters","destroy","deleteSampler","undefined","toString","id","JSON","stringify","pname","value","Object","entries","param","Number","TEXTURE_MIN_LOD","TEXTURE_MAX_LOD","samplerParameterf","samplerParameteri"],"sources":["../../../src/adapter/resources/webgl-sampler.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {Sampler, SamplerProps} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';\nimport type {WebGLDevice} from '../webgl-device';\n\n/**\n * Sampler object -\n * Under WebGL2 we create an actual WebGL sampler\n * Under WebGL1, we just store the sampler parameters\n * so that they can be set directly on the texture\n * https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html\n */\nexport class WEBGLSampler extends Sampler {\n readonly device: WebGLDevice;\n readonly handle: WebGLSampler;\n readonly parameters: GLSamplerParameters;\n\n constructor(device: WebGLDevice, props: SamplerProps) {\n super(device, props);\n this.device = device;\n this.parameters = convertSamplerParametersToWebGL(props);\n if (this.device.isWebGL2) {\n this.handle = this.handle || this.device.gl2.createSampler();\n this._setSamplerParameters(this.parameters);\n }\n }\n\n override destroy(): void {\n if (this.handle) {\n this.device.gl2.deleteSampler(this.handle);\n // @ts-expect-error read-only/undefined\n this.handle = undefined;\n }\n }\n\n override toString(): string {\n return `Sampler(${this.id},${JSON.stringify(this.props)})`;\n }\n\n /** Set sampler parameters on the sampler */\n private _setSamplerParameters(parameters: GLSamplerParameters): void {\n for (const [pname, value] of Object.entries(parameters)) {\n // Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n const param = Number(pname);\n switch (param) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.device.gl2.samplerParameterf(this.handle, param, value);\n break;\n default:\n this.device.gl2.samplerParameteri(this.handle, param, value);\n break;\n }\n }\n }\n}\n"],"mappings":"AAGA,SAAQA,OAAO,QAAqB,eAAe;AACnD,SAAQC,EAAE,QAA4B,oBAAoB;AAAC,SACnDC,+BAA+B;AAUvC,OAAO,MAAMC,YAAY,SAASH,OAAO,CAAC;EAKxCI,WAAWA,CAACC,MAAmB,EAAEC,KAAmB,EAAE;IACpD,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAAC,KALdD,MAAM;IAAA,KACNE,MAAM;IAAA,KACNC,UAAU;IAIjB,IAAI,CAACH,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACG,UAAU,GAAGN,+BAA+B,CAACI,KAAK,CAAC;IACxD,IAAI,IAAI,CAACD,MAAM,CAACI,QAAQ,EAAE;MACxB,IAAI,CAACF,MAAM,GAAG,IAAI,CAACA,MAAM,IAAI,IAAI,CAACF,MAAM,CAACK,GAAG,CAACC,aAAa,CAAC,CAAC;MAC5D,IAAI,CAACC,qBAAqB,CAAC,IAAI,CAACJ,UAAU,CAAC;IAC7C;EACF;EAESK,OAAOA,CAAA,EAAS;IACvB,IAAI,IAAI,CAACN,MAAM,EAAE;MACf,IAAI,CAACF,MAAM,CAACK,GAAG,CAACI,aAAa,CAAC,IAAI,CAACP,MAAM,CAAC;MAE1C,IAAI,CAACA,MAAM,GAAGQ,SAAS;IACzB;EACF;EAESC,QAAQA,CAAA,EAAW;IAC1B,OAAQ,WAAU,IAAI,CAACC,EAAG,IAAGC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACb,KAAK,CAAE,GAAE;EAC5D;EAGQM,qBAAqBA,CAACJ,UAA+B,EAAQ;IACnE,KAAK,MAAM,CAACY,KAAK,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACf,UAAU,CAAC,EAAE;MAGvD,MAAMgB,KAAK,GAAGC,MAAM,CAACL,KAAK,CAAC;MAC3B,QAAQI,KAAK;QACX,KAAKvB,EAAE,CAACyB,eAAe;QACvB,KAAKzB,EAAE,CAAC0B,eAAe;UACrB,IAAI,CAACtB,MAAM,CAACK,GAAG,CAACkB,iBAAiB,CAAC,IAAI,CAACrB,MAAM,EAAEiB,KAAK,EAAEH,KAAK,CAAC;UAC5D;QACF;UACE,IAAI,CAAChB,MAAM,CAACK,GAAG,CAACmB,iBAAiB,CAAC,IAAI,CAACtB,MAAM,EAAEiB,KAAK,EAAEH,KAAK,CAAC;UAC5D;MACJ;IACF;EACF;AACF"}
1
+ {"version":3,"file":"webgl-sampler.js","names":["Sampler","convertSamplerParametersToWebGL","WEBGLSampler","constructor","device","props","handle","parameters","isWebGL2","gl2","createSampler","_setSamplerParameters","destroy","deleteSampler","undefined","toString","id","JSON","stringify","pname","value","Object","entries","param","Number","samplerParameterf","samplerParameteri"],"sources":["../../../src/adapter/resources/webgl-sampler.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {Sampler, SamplerProps} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';\nimport type {WebGLDevice} from '../webgl-device';\n\n/**\n * Sampler object -\n * Under WebGL2 we create an actual WebGL sampler\n * Under WebGL1, we just store the sampler parameters\n * so that they can be set directly on the texture\n * https://github.com/WebGLSamples/WebGL2Samples/blob/master/samples/sampler_object.html\n */\nexport class WEBGLSampler extends Sampler {\n readonly device: WebGLDevice;\n readonly handle: WebGLSampler;\n readonly parameters: GLSamplerParameters;\n\n constructor(device: WebGLDevice, props: SamplerProps) {\n super(device, props);\n this.device = device;\n this.parameters = convertSamplerParametersToWebGL(props);\n if (this.device.isWebGL2) {\n this.handle = this.handle || this.device.gl2.createSampler();\n this._setSamplerParameters(this.parameters);\n }\n }\n\n override destroy(): void {\n if (this.handle) {\n this.device.gl2.deleteSampler(this.handle);\n // @ts-expect-error read-only/undefined\n this.handle = undefined;\n }\n }\n\n override toString(): string {\n return `Sampler(${this.id},${JSON.stringify(this.props)})`;\n }\n\n /** Set sampler parameters on the sampler */\n private _setSamplerParameters(parameters: GLSamplerParameters): void {\n for (const [pname, value] of Object.entries(parameters)) {\n // Apparently there are integer/float conversion issues requires two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n const param = Number(pname);\n switch (param) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.device.gl2.samplerParameterf(this.handle, param, value);\n break;\n default:\n this.device.gl2.samplerParameteri(this.handle, param, value);\n break;\n }\n }\n }\n}\n"],"mappings":"AAGA,SAAQA,OAAO,QAAqB,eAAe;AAAC,SAE5CC,+BAA+B;AAUvC,OAAO,MAAMC,YAAY,SAASF,OAAO,CAAC;EAKxCG,WAAWA,CAACC,MAAmB,EAAEC,KAAmB,EAAE;IACpD,KAAK,CAACD,MAAM,EAAEC,KAAK,CAAC;IAAC,KALdD,MAAM;IAAA,KACNE,MAAM;IAAA,KACNC,UAAU;IAIjB,IAAI,CAACH,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACG,UAAU,GAAGN,+BAA+B,CAACI,KAAK,CAAC;IACxD,IAAI,IAAI,CAACD,MAAM,CAACI,QAAQ,EAAE;MACxB,IAAI,CAACF,MAAM,GAAG,IAAI,CAACA,MAAM,IAAI,IAAI,CAACF,MAAM,CAACK,GAAG,CAACC,aAAa,CAAC,CAAC;MAC5D,IAAI,CAACC,qBAAqB,CAAC,IAAI,CAACJ,UAAU,CAAC;IAC7C;EACF;EAESK,OAAOA,CAAA,EAAS;IACvB,IAAI,IAAI,CAACN,MAAM,EAAE;MACf,IAAI,CAACF,MAAM,CAACK,GAAG,CAACI,aAAa,CAAC,IAAI,CAACP,MAAM,CAAC;MAE1C,IAAI,CAACA,MAAM,GAAGQ,SAAS;IACzB;EACF;EAESC,QAAQA,CAAA,EAAW;IAC1B,OAAQ,WAAU,IAAI,CAACC,EAAG,IAAGC,IAAI,CAACC,SAAS,CAAC,IAAI,CAACb,KAAK,CAAE,GAAE;EAC5D;EAGQM,qBAAqBA,CAACJ,UAA+B,EAAQ;IACnE,KAAK,MAAM,CAACY,KAAK,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACf,UAAU,CAAC,EAAE;MAGvD,MAAMgB,KAAK,GAAGC,MAAM,CAACL,KAAK,CAAC;MAC3B,QAAQI,KAAK;QACX;QACA;UACE,IAAI,CAACnB,MAAM,CAACK,GAAG,CAACgB,iBAAiB,CAAC,IAAI,CAACnB,MAAM,EAAEiB,KAAK,EAAEH,KAAK,CAAC;UAC5D;QACF;UACE,IAAI,CAAChB,MAAM,CAACK,GAAG,CAACiB,iBAAiB,CAAC,IAAI,CAACpB,MAAM,EAAEiB,KAAK,EAAEH,KAAK,CAAC;UAC5D;MACJ;IACF;EACF;AACF"}
@@ -1,5 +1,4 @@
1
1
  import { log, uid, Shader, formatCompilerLog } from '@luma.gl/core';
2
- import { GL } from '@luma.gl/constants';
3
2
  import { getShaderInfo } from "../helpers/get-shader-info.js";
4
3
  import { parseShaderCompilerLog } from "../helpers/parse-shader-compiler-log.js";
5
4
  export class WEBGLShader extends Shader {
@@ -13,10 +12,10 @@ export class WEBGLShader extends Shader {
13
12
  this.device = device;
14
13
  switch (this.props.stage) {
15
14
  case 'vertex':
16
- this.handle = this.props.handle || this.device.gl.createShader(GL.VERTEX_SHADER);
15
+ this.handle = this.props.handle || this.device.gl.createShader(35633);
17
16
  break;
18
17
  case 'fragment':
19
- this.handle = this.props.handle || this.device.gl.createShader(GL.FRAGMENT_SHADER);
18
+ this.handle = this.props.handle || this.device.gl.createShader(35632);
20
19
  break;
21
20
  default:
22
21
  throw new Error(this.props.stage);
@@ -42,7 +41,7 @@ export class WEBGLShader extends Shader {
42
41
  } = this.device;
43
42
  gl.shaderSource(this.handle, source);
44
43
  gl.compileShader(this.handle);
45
- const compileStatus = gl.getShaderParameter(this.handle, GL.COMPILE_STATUS);
44
+ const compileStatus = gl.getShaderParameter(this.handle, 35713);
46
45
  if (!compileStatus) {
47
46
  const shaderLog = gl.getShaderInfoLog(this.handle);
48
47
  const parsedLog = shaderLog ? parseShaderCompilerLog(shaderLog) : [];
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-shader.js","names":["log","uid","Shader","formatCompilerLog","GL","getShaderInfo","parseShaderCompilerLog","WEBGLShader","constructor","device","props","id","getShaderIdFromProps","handle","stage","gl","createShader","VERTEX_SHADER","FRAGMENT_SHADER","Error","_compile","source","destroy","removeStats","deleteShader","destroyed","compilationInfo","getShaderInfoLog","addGLSLVersion","startsWith","shaderSource","compileShader","compileStatus","getShaderParameter","COMPILE_STATUS","shaderLog","parsedLog","messages","filter","message","type","formattedLog","showSourceCode","shaderName","name","shaderDescription","error"],"sources":["../../../src/adapter/resources/webgl-shader.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {log, uid, Shader, ShaderProps, CompilerMessage, formatCompilerLog} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {getShaderInfo} from '../helpers/get-shader-info';\nimport {parseShaderCompilerLog} from '../helpers/parse-shader-compiler-log';\nimport {WebGLDevice} from '../webgl-device';\n\n/**\n * An immutable compiled shader program that execute portions of the GPU Pipeline\n */\nexport class WEBGLShader extends Shader {\n readonly device: WebGLDevice;\n readonly handle: WebGLShader;\n\n constructor(device: WebGLDevice, props: ShaderProps) {\n super(device, {id: getShaderIdFromProps(props), ...props});\n this.device = device;\n switch (this.props.stage) {\n case 'vertex':\n this.handle = this.props.handle || this.device.gl.createShader(GL.VERTEX_SHADER);\n break;\n case 'fragment':\n this.handle = this.props.handle || this.device.gl.createShader(GL.FRAGMENT_SHADER);\n break;\n default:\n throw new Error(this.props.stage);\n }\n this._compile(this.source);\n }\n\n override destroy(): void {\n if (this.handle) {\n this.removeStats();\n this.device.gl.deleteShader(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n async compilationInfo(): Promise<readonly CompilerMessage[]> {\n const log = this.device.gl.getShaderInfoLog(this.handle);\n return log ? parseShaderCompilerLog(log) : [];\n }\n\n // PRIVATE METHODS\n\n _compile(source: string): void {\n const addGLSLVersion = (source: string) => source.startsWith('#version ') ? source : `#version 100\\n${source}`;\n source = addGLSLVersion(source);\n\n const {gl} = this.device;\n gl.shaderSource(this.handle, source);\n gl.compileShader(this.handle);\n\n // TODO - For performance reasons, avoid checking shader compilation errors on production?\n // TODO - Load log even when no error reported, to catch warnings?\n // https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings\n const compileStatus = gl.getShaderParameter(this.handle, GL.COMPILE_STATUS);\n if (!compileStatus) {\n const shaderLog = gl.getShaderInfoLog(this.handle);\n const parsedLog = shaderLog ? parseShaderCompilerLog(shaderLog) : [];\n const messages = parsedLog.filter(message => message.type === 'error');\n const formattedLog = formatCompilerLog(messages, source, {showSourceCode: true});\n const shaderName: string = getShaderInfo(source).name;\n const shaderDescription = `${this.stage} shader ${shaderName}`;\n log.error(`GLSL compilation errors in ${shaderDescription}\\n${formattedLog}`)();\n throw new Error(`GLSL compilation errors in ${shaderName}`);\n }\n }\n}\n\n// HELPERS\n\n/** Deduce an id, from shader source, or supplied id, or shader type */\nfunction getShaderIdFromProps(props: ShaderProps): string {\n return getShaderInfo(props.source).name ||\n props.id ||\n uid(`unnamed ${props.stage}-shader`);\n}\n"],"mappings":"AAGA,SAAQA,GAAG,EAAEC,GAAG,EAAEC,MAAM,EAAgCC,iBAAiB,QAAO,eAAe;AAC/F,SAAQC,EAAE,QAAO,oBAAoB;AAAC,SAC9BC,aAAa;AAAA,SACbC,sBAAsB;AAM9B,OAAO,MAAMC,WAAW,SAASL,MAAM,CAAC;EAItCM,WAAWA,CAACC,MAAmB,EAAEC,KAAkB,EAAE;IACnD,KAAK,CAACD,MAAM,EAAE;MAACE,EAAE,EAAEC,oBAAoB,CAACF,KAAK,CAAC;MAAE,GAAGA;IAAK,CAAC,CAAC;IAAC,KAJpDD,MAAM;IAAA,KACNI,MAAM;IAIb,IAAI,CAACJ,MAAM,GAAGA,MAAM;IACpB,QAAQ,IAAI,CAACC,KAAK,CAACI,KAAK;MACtB,KAAK,QAAQ;QACX,IAAI,CAACD,MAAM,GAAG,IAAI,CAACH,KAAK,CAACG,MAAM,IAAI,IAAI,CAACJ,MAAM,CAACM,EAAE,CAACC,YAAY,CAACZ,EAAE,CAACa,aAAa,CAAC;QAChF;MACF,KAAK,UAAU;QACb,IAAI,CAACJ,MAAM,GAAG,IAAI,CAACH,KAAK,CAACG,MAAM,IAAI,IAAI,CAACJ,MAAM,CAACM,EAAE,CAACC,YAAY,CAACZ,EAAE,CAACc,eAAe,CAAC;QAClF;MACF;QACE,MAAM,IAAIC,KAAK,CAAC,IAAI,CAACT,KAAK,CAACI,KAAK,CAAC;IACrC;IACA,IAAI,CAACM,QAAQ,CAAC,IAAI,CAACC,MAAM,CAAC;EAC5B;EAESC,OAAOA,CAAA,EAAS;IACvB,IAAI,IAAI,CAACT,MAAM,EAAE;MACf,IAAI,CAACU,WAAW,CAAC,CAAC;MAClB,IAAI,CAACd,MAAM,CAACM,EAAE,CAACS,YAAY,CAAC,IAAI,CAACX,MAAM,CAAC;MAExC,IAAI,CAACY,SAAS,GAAG,IAAI;IACvB;EACF;EAEA,MAAMC,eAAeA,CAAA,EAAwC;IAC3D,MAAM1B,GAAG,GAAG,IAAI,CAACS,MAAM,CAACM,EAAE,CAACY,gBAAgB,CAAC,IAAI,CAACd,MAAM,CAAC;IACxD,OAAOb,GAAG,GAAGM,sBAAsB,CAACN,GAAG,CAAC,GAAG,EAAE;EAC/C;EAIAoB,QAAQA,CAACC,MAAc,EAAQ;IAC7B,MAAMO,cAAc,GAAIP,MAAc,IAAKA,MAAM,CAACQ,UAAU,CAAC,WAAW,CAAC,GAAGR,MAAM,GAAI,iBAAgBA,MAAO,EAAC;IAC9GA,MAAM,GAAGO,cAAc,CAACP,MAAM,CAAC;IAE/B,MAAM;MAACN;IAAE,CAAC,GAAG,IAAI,CAACN,MAAM;IACxBM,EAAE,CAACe,YAAY,CAAC,IAAI,CAACjB,MAAM,EAAEQ,MAAM,CAAC;IACpCN,EAAE,CAACgB,aAAa,CAAC,IAAI,CAAClB,MAAM,CAAC;IAK7B,MAAMmB,aAAa,GAAGjB,EAAE,CAACkB,kBAAkB,CAAC,IAAI,CAACpB,MAAM,EAAET,EAAE,CAAC8B,cAAc,CAAC;IAC3E,IAAI,CAACF,aAAa,EAAE;MAClB,MAAMG,SAAS,GAAGpB,EAAE,CAACY,gBAAgB,CAAC,IAAI,CAACd,MAAM,CAAC;MAClD,MAAMuB,SAAS,GAAGD,SAAS,GAAG7B,sBAAsB,CAAC6B,SAAS,CAAC,GAAG,EAAE;MACpE,MAAME,QAAQ,GAAGD,SAAS,CAACE,MAAM,CAACC,OAAO,IAAIA,OAAO,CAACC,IAAI,KAAK,OAAO,CAAC;MACtE,MAAMC,YAAY,GAAGtC,iBAAiB,CAACkC,QAAQ,EAAEhB,MAAM,EAAE;QAACqB,cAAc,EAAE;MAAI,CAAC,CAAC;MAChF,MAAMC,UAAkB,GAAGtC,aAAa,CAACgB,MAAM,CAAC,CAACuB,IAAI;MACrD,MAAMC,iBAAiB,GAAI,GAAE,IAAI,CAAC/B,KAAM,WAAU6B,UAAW,EAAC;MAC9D3C,GAAG,CAAC8C,KAAK,CAAE,8BAA6BD,iBAAkB,KAAIJ,YAAa,EAAC,CAAC,CAAC,CAAC;MAC/E,MAAM,IAAItB,KAAK,CAAE,8BAA6BwB,UAAW,EAAC,CAAC;IAC7D;EACF;AACF;AAKA,SAAS/B,oBAAoBA,CAACF,KAAkB,EAAU;EACxD,OAAOL,aAAa,CAACK,KAAK,CAACW,MAAM,CAAC,CAACuB,IAAI,IACrClC,KAAK,CAACC,EAAE,IACRV,GAAG,CAAE,WAAUS,KAAK,CAACI,KAAM,SAAQ,CAAC;AACxC"}
1
+ {"version":3,"file":"webgl-shader.js","names":["log","uid","Shader","formatCompilerLog","getShaderInfo","parseShaderCompilerLog","WEBGLShader","constructor","device","props","id","getShaderIdFromProps","handle","stage","gl","createShader","Error","_compile","source","destroy","removeStats","deleteShader","destroyed","compilationInfo","getShaderInfoLog","addGLSLVersion","startsWith","shaderSource","compileShader","compileStatus","getShaderParameter","shaderLog","parsedLog","messages","filter","message","type","formattedLog","showSourceCode","shaderName","name","shaderDescription","error"],"sources":["../../../src/adapter/resources/webgl-shader.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {log, uid, Shader, ShaderProps, CompilerMessage, formatCompilerLog} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {getShaderInfo} from '../helpers/get-shader-info';\nimport {parseShaderCompilerLog} from '../helpers/parse-shader-compiler-log';\nimport {WebGLDevice} from '../webgl-device';\n\n/**\n * An immutable compiled shader program that execute portions of the GPU Pipeline\n */\nexport class WEBGLShader extends Shader {\n readonly device: WebGLDevice;\n readonly handle: WebGLShader;\n\n constructor(device: WebGLDevice, props: ShaderProps) {\n super(device, {id: getShaderIdFromProps(props), ...props});\n this.device = device;\n switch (this.props.stage) {\n case 'vertex':\n this.handle = this.props.handle || this.device.gl.createShader(GL.VERTEX_SHADER);\n break;\n case 'fragment':\n this.handle = this.props.handle || this.device.gl.createShader(GL.FRAGMENT_SHADER);\n break;\n default:\n throw new Error(this.props.stage);\n }\n this._compile(this.source);\n }\n\n override destroy(): void {\n if (this.handle) {\n this.removeStats();\n this.device.gl.deleteShader(this.handle);\n // this.handle = null;\n this.destroyed = true;\n }\n }\n\n async compilationInfo(): Promise<readonly CompilerMessage[]> {\n const log = this.device.gl.getShaderInfoLog(this.handle);\n return log ? parseShaderCompilerLog(log) : [];\n }\n\n // PRIVATE METHODS\n\n _compile(source: string): void {\n const addGLSLVersion = (source: string) => source.startsWith('#version ') ? source : `#version 100\\n${source}`;\n source = addGLSLVersion(source);\n\n const {gl} = this.device;\n gl.shaderSource(this.handle, source);\n gl.compileShader(this.handle);\n\n // TODO - For performance reasons, avoid checking shader compilation errors on production?\n // TODO - Load log even when no error reported, to catch warnings?\n // https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings\n const compileStatus = gl.getShaderParameter(this.handle, GL.COMPILE_STATUS);\n if (!compileStatus) {\n const shaderLog = gl.getShaderInfoLog(this.handle);\n const parsedLog = shaderLog ? parseShaderCompilerLog(shaderLog) : [];\n const messages = parsedLog.filter(message => message.type === 'error');\n const formattedLog = formatCompilerLog(messages, source, {showSourceCode: true});\n const shaderName: string = getShaderInfo(source).name;\n const shaderDescription = `${this.stage} shader ${shaderName}`;\n log.error(`GLSL compilation errors in ${shaderDescription}\\n${formattedLog}`)();\n throw new Error(`GLSL compilation errors in ${shaderName}`);\n }\n }\n}\n\n// HELPERS\n\n/** Deduce an id, from shader source, or supplied id, or shader type */\nfunction getShaderIdFromProps(props: ShaderProps): string {\n return getShaderInfo(props.source).name ||\n props.id ||\n uid(`unnamed ${props.stage}-shader`);\n}\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { isObjectEmpty } from '@luma.gl/core';
2
2
  import { Texture, cast, log, assert, isPowerOfTwo, loadImage } from '@luma.gl/core';
3
- import { GL } from '@luma.gl/constants';
4
3
  import { withGLParameters } from "../../context/state-tracker/with-parameters.js";
5
4
  import { convertTextureFormatToGL, getWebGLTextureParameters, getTextureFormatBytesPerPixel } from "../converters/texture-formats.js";
6
5
  import { convertSamplerParametersToWebGL, updateSamplerParametersForNPOT } from "../converters/sampler-parameters.js";
@@ -45,7 +44,7 @@ export class WEBGLTexture extends Texture {
45
44
  ...this.props,
46
45
  data: typeof this.props.data
47
46
  });
48
- this.glFormat = GL.RGBA;
47
+ this.glFormat = 6408;
49
48
  this.target = getWebGLTextureTarget(this.props);
50
49
  this.loaded = false;
51
50
  if (typeof ((_this$props = this.props) === null || _this$props === void 0 ? void 0 : _this$props.data) === 'string') {
@@ -131,7 +130,7 @@ export class WEBGLTexture extends Texture {
131
130
  this.dataFormat = dataFormat;
132
131
  this.textureUnit = textureUnit;
133
132
  if (Number.isFinite(this.textureUnit)) {
134
- this.gl.activeTexture(GL.TEXTURE0 + this.textureUnit);
133
+ this.gl.activeTexture(33984 + this.textureUnit);
135
134
  this.gl.bindTexture(this.target, this.handle);
136
135
  }
137
136
  if (mipmaps && this.device.isWebGL1 && isNPOT(this.width, this.height)) {
@@ -307,9 +306,9 @@ export class WEBGLTexture extends Texture {
307
306
  break;
308
307
  case 'buffer':
309
308
  gl2 = this.device.assertWebGL2();
310
- gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);
309
+ gl2.bindBuffer(35052, data.handle || data);
311
310
  gl2.texImage2D(target, level, glFormat, width, height, 0, dataFormat, type, offset);
312
- gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
311
+ gl2.bindBuffer(35052, null);
313
312
  break;
314
313
  case 'browser-object':
315
314
  if (this.device.isWebGL2) {
@@ -391,9 +390,9 @@ export class WEBGLTexture extends Texture {
391
390
  this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);
392
391
  } else if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {
393
392
  const gl2 = this.device.assertWebGL2();
394
- gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);
393
+ gl2.bindBuffer(35052, data);
395
394
  gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);
396
- gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
395
+ gl2.bindBuffer(35052, null);
397
396
  } else if (this.device.isWebGL2) {
398
397
  const gl2 = this.device.assertWebGL2();
399
398
  gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);
@@ -409,7 +408,7 @@ export class WEBGLTexture extends Texture {
409
408
  return null;
410
409
  }
411
410
  getActiveUnit() {
412
- return this.gl.getParameter(GL.ACTIVE_TEXTURE) - GL.TEXTURE0;
411
+ return this.gl.getParameter(34016) - 33984;
413
412
  }
414
413
  bind() {
415
414
  let textureUnit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.textureUnit;
@@ -418,7 +417,7 @@ export class WEBGLTexture extends Texture {
418
417
  } = this;
419
418
  if (textureUnit !== undefined) {
420
419
  this.textureUnit = textureUnit;
421
- gl.activeTexture(gl.TEXTURE0 + textureUnit);
420
+ gl.activeTexture(33984 + textureUnit);
422
421
  }
423
422
  gl.bindTexture(this.target, this.handle);
424
423
  return textureUnit;
@@ -430,7 +429,7 @@ export class WEBGLTexture extends Texture {
430
429
  } = this;
431
430
  if (textureUnit !== undefined) {
432
431
  this.textureUnit = textureUnit;
433
- gl.activeTexture(gl.TEXTURE0 + textureUnit);
432
+ gl.activeTexture(33984 + textureUnit);
434
433
  }
435
434
  gl.bindTexture(this.target, null);
436
435
  return textureUnit;
@@ -557,8 +556,8 @@ export class WEBGLTexture extends Texture {
557
556
  height,
558
557
  pixels,
559
558
  data,
560
- format = GL.RGBA,
561
- type = GL.UNSIGNED_BYTE
559
+ format = 6408,
560
+ type = 5121
562
561
  } = options;
563
562
  const imageDataMap = pixels || data;
564
563
  const resolvedFaces = await Promise.all(WEBGLTexture.FACES.map(face => {
@@ -587,8 +586,8 @@ export class WEBGLTexture extends Texture {
587
586
  height,
588
587
  pixels,
589
588
  data,
590
- format = GL.RGBA,
591
- type = GL.UNSIGNED_BYTE
589
+ format = 6408,
590
+ type = 5121
592
591
  } = options;
593
592
  const {
594
593
  gl
@@ -629,7 +628,7 @@ export class WEBGLTexture extends Texture {
629
628
  this.gl.texImage3D(this.target, level, webglTextureFormat.format, width, height, depth, 0, webglTextureFormat.dataFormat, webglTextureFormat.type, data);
630
629
  }
631
630
  if (data instanceof WEBGLBuffer) {
632
- this.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle);
631
+ this.gl.bindBuffer(35052, data.handle);
633
632
  this.gl.texImage3D(this.target, level, dataFormat, width, height, depth, 0, format, type, offset);
634
633
  }
635
634
  });
@@ -655,8 +654,8 @@ export class WEBGLTexture extends Texture {
655
654
  const param = Number(pname);
656
655
  const value = pvalue;
657
656
  switch (param) {
658
- case GL.TEXTURE_MIN_LOD:
659
- case GL.TEXTURE_MAX_LOD:
657
+ case 33082:
658
+ case 33083:
660
659
  this.gl.texParameterf(this.target, param, value);
661
660
  break;
662
661
  default:
@@ -671,14 +670,14 @@ export class WEBGLTexture extends Texture {
671
670
  const npot = this.device.isWebGL1 && isNPOT(this.width, this.height);
672
671
  if (npot) {
673
672
  switch (pname) {
674
- case GL.TEXTURE_MIN_FILTER:
675
- if (value !== GL.LINEAR && value !== GL.NEAREST) {
676
- return GL.LINEAR;
673
+ case 10241:
674
+ if (value !== 9729 && value !== 9728) {
675
+ return 9729;
677
676
  }
678
677
  break;
679
- case GL.TEXTURE_WRAP_S:
680
- case GL.TEXTURE_WRAP_T:
681
- return GL.CLAMP_TO_EDGE;
678
+ case 10242:
679
+ case 10243:
680
+ return 33071;
682
681
  default:
683
682
  break;
684
683
  }
@@ -686,17 +685,17 @@ export class WEBGLTexture extends Texture {
686
685
  return value;
687
686
  }
688
687
  }
689
- WEBGLTexture.FACES = [GL.TEXTURE_CUBE_MAP_POSITIVE_X, GL.TEXTURE_CUBE_MAP_NEGATIVE_X, GL.TEXTURE_CUBE_MAP_POSITIVE_Y, GL.TEXTURE_CUBE_MAP_NEGATIVE_Y, GL.TEXTURE_CUBE_MAP_POSITIVE_Z, GL.TEXTURE_CUBE_MAP_NEGATIVE_Z];
688
+ WEBGLTexture.FACES = [34069, 34070, 34071, 34072, 34073, 34074];
690
689
  function getWebGLTextureTarget(props) {
691
690
  switch (props.dimension) {
692
691
  case '2d':
693
- return GL.TEXTURE_2D;
692
+ return 3553;
694
693
  case 'cube':
695
- return GL.TEXTURE_CUBE_MAP;
694
+ return 34067;
696
695
  case '2d-array':
697
- return GL.TEXTURE_2D_ARRAY;
696
+ return 35866;
698
697
  case '3d':
699
- return GL.TEXTURE_3D;
698
+ return 32879;
700
699
  case '1d':
701
700
  case 'cube-array':
702
701
  default: