@luma.gl/webgl 8.5.11 → 8.5.12

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 (70) hide show
  1. package/dist/dist.js +106 -37
  2. package/dist/dist.min.js +1 -1
  3. package/dist/es5/classes/buffer.js +9 -2
  4. package/dist/es5/classes/buffer.js.map +1 -1
  5. package/dist/es5/classes/framebuffer.js +5 -0
  6. package/dist/es5/classes/framebuffer.js.map +1 -1
  7. package/dist/es5/classes/program.js +9 -2
  8. package/dist/es5/classes/program.js.map +1 -1
  9. package/dist/es5/classes/query.js +6 -1
  10. package/dist/es5/classes/query.js.map +1 -1
  11. package/dist/es5/classes/renderbuffer.js +6 -1
  12. package/dist/es5/classes/renderbuffer.js.map +1 -1
  13. package/dist/es5/classes/resource.js +13 -6
  14. package/dist/es5/classes/resource.js.map +1 -1
  15. package/dist/es5/classes/shader.js +20 -1
  16. package/dist/es5/classes/shader.js.map +1 -1
  17. package/dist/es5/classes/texture-2d.js +6 -1
  18. package/dist/es5/classes/texture-2d.js.map +1 -1
  19. package/dist/es5/classes/texture-3d.js +6 -1
  20. package/dist/es5/classes/texture-3d.js.map +1 -1
  21. package/dist/es5/classes/texture-cube.js +9 -2
  22. package/dist/es5/classes/texture-cube.js.map +1 -1
  23. package/dist/es5/classes/texture.js +11 -2
  24. package/dist/es5/classes/texture.js.map +1 -1
  25. package/dist/es5/classes/transform-feedback.js +6 -1
  26. package/dist/es5/classes/transform-feedback.js.map +1 -1
  27. package/dist/es5/classes/vertex-array-object.js +6 -1
  28. package/dist/es5/classes/vertex-array-object.js.map +1 -1
  29. package/dist/es5/init.js +1 -1
  30. package/dist/esm/classes/buffer.js +4 -0
  31. package/dist/esm/classes/buffer.js.map +1 -1
  32. package/dist/esm/classes/framebuffer.js +4 -0
  33. package/dist/esm/classes/framebuffer.js.map +1 -1
  34. package/dist/esm/classes/program.js +4 -0
  35. package/dist/esm/classes/program.js.map +1 -1
  36. package/dist/esm/classes/query.js +4 -0
  37. package/dist/esm/classes/query.js.map +1 -1
  38. package/dist/esm/classes/renderbuffer.js +4 -0
  39. package/dist/esm/classes/renderbuffer.js.map +1 -1
  40. package/dist/esm/classes/resource.js +10 -6
  41. package/dist/esm/classes/resource.js.map +1 -1
  42. package/dist/esm/classes/shader.js +12 -0
  43. package/dist/esm/classes/shader.js.map +1 -1
  44. package/dist/esm/classes/texture-2d.js +4 -0
  45. package/dist/esm/classes/texture-2d.js.map +1 -1
  46. package/dist/esm/classes/texture-3d.js +4 -0
  47. package/dist/esm/classes/texture-3d.js.map +1 -1
  48. package/dist/esm/classes/texture-cube.js +4 -0
  49. package/dist/esm/classes/texture-cube.js.map +1 -1
  50. package/dist/esm/classes/texture.js +9 -1
  51. package/dist/esm/classes/texture.js.map +1 -1
  52. package/dist/esm/classes/transform-feedback.js +4 -0
  53. package/dist/esm/classes/transform-feedback.js.map +1 -1
  54. package/dist/esm/classes/vertex-array-object.js +4 -0
  55. package/dist/esm/classes/vertex-array-object.js.map +1 -1
  56. package/dist/esm/init.js +1 -1
  57. package/package.json +4 -4
  58. package/src/classes/buffer.js +4 -0
  59. package/src/classes/framebuffer.js +4 -0
  60. package/src/classes/program.js +4 -0
  61. package/src/classes/query.js +4 -0
  62. package/src/classes/renderbuffer.js +4 -0
  63. package/src/classes/resource.js +10 -6
  64. package/src/classes/shader.js +14 -0
  65. package/src/classes/texture-2d.js +5 -0
  66. package/src/classes/texture-3d.js +5 -0
  67. package/src/classes/texture-cube.js +5 -0
  68. package/src/classes/texture.js +10 -2
  69. package/src/classes/transform-feedback.js +4 -0
  70. package/src/classes/vertex-array-object.js +4 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/classes/transform-feedback.js"],"names":["isWebGL2","assertWebGL2Context","log","Resource","Buffer","isObjectEmpty","TransformFeedback","isSupported","gl","constructor","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","buffer","byteSize","byteOffset","_getBufferParams","warn","id","_bindBuffer","begin","primitiveMode","bindTransformFeedback","handle","_bindBuffers","beginTransformFeedback","end","endTransformFeedback","undefined","byteLength","_getVaryingInfo","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","bindBufferRange","_createHandle","createTransformFeedback","_deleteHandle","deleteTransformFeedback","_bindHandle"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isObjectEmpty} from '../utils/utils';\n\n// NOTE: The `bindOnUse` flag is a major workaround:\n// See https://github.com/KhronosGroup/WebGL/issues/2346\n\nexport default class TransformFeedback extends Resource {\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n super(gl, props);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props = {}) {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(() => `${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-ignore\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-ignore\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-ignore\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-ignore\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-ignore\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-ignore\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n"],"file":"transform-feedback.js"}
1
+ {"version":3,"sources":["../../../src/classes/transform-feedback.js"],"names":["isWebGL2","assertWebGL2Context","log","Resource","Buffer","isObjectEmpty","TransformFeedback","Symbol","toStringTag","isSupported","gl","constructor","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","buffer","byteSize","byteOffset","_getBufferParams","warn","id","_bindBuffer","begin","primitiveMode","bindTransformFeedback","handle","_bindBuffers","beginTransformFeedback","end","endTransformFeedback","undefined","byteLength","_getVaryingInfo","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","bindBufferRange","_createHandle","createTransformFeedback","_deleteHandle","deleteTransformFeedback","_bindHandle"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isObjectEmpty} from '../utils/utils';\n\n// NOTE: The `bindOnUse` flag is a major workaround:\n// See https://github.com/KhronosGroup/WebGL/issues/2346\n\nexport default class TransformFeedback extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'TransformFeedback';\n }\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n super(gl, props);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props = {}) {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(() => `${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-ignore\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-ignore\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-ignore\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-ignore\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-ignore\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-ignore\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n"],"file":"transform-feedback.js"}
@@ -6,6 +6,10 @@ import { assert } from '../utils/assert';
6
6
  import { getBrowser } from 'probe.gl';
7
7
  const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
8
8
  export default class VertexArrayObject extends Resource {
9
+ get [Symbol.toStringTag]() {
10
+ return 'VertexArrayObject';
11
+ }
12
+
9
13
  static isSupported(gl, options = {}) {
10
14
  if (options.constantAttributeZero) {
11
15
  return isWebGL2(gl) || getBrowser() === 'Chrome';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/classes/vertex-array-object.js"],"names":["Resource","Buffer","isWebGL2","getScratchArray","fillArray","assert","getBrowser","ERR_ELEMENTS","VertexArrayObject","isSupported","gl","options","constantAttributeZero","getDefaultArray","luma","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","Object","assign","buffer","bufferValue","gl2","initialize","seal","delete","props","setProps","setElementBuffer","elementBuffer","target","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","getVertexAttribOffset","getVertexAttrib"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils/assert';\nimport {getBrowser} from 'probe.gl';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\nexport default class VertexArrayObject extends Resource {\n static isSupported(gl, options = {}) {\n // Attribute 0 can not be disable on most desktop OpenGL based browsers\n // and on iOS Safari browser.\n if (options.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n // Returns the global (null) vertex array object. Exists even when no extension available\n // TODO(Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n static getDefaultArray(gl) {\n gl.luma = gl.luma || {};\n if (!gl.luma.defaultVertexArray) {\n gl.luma.defaultVertexArray = new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n }\n return gl.luma.defaultVertexArray;\n }\n\n static getMaxAttributes(gl) {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n // Note: Constants are stored globally on the WebGL context, not the VAO\n // So they need to be updated before every render\n // TODO - use known type (in configuration or passed in) to allow non-typed arrays?\n // TODO - remember/cache values to avoid setting them unnecessarily?\n static setConstant(gl, location, array) {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(gl, location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(gl, location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // Create a VertexArray\n constructor(gl, opts = {}) {\n // Use program's id if program but no id is supplied\n const id = opts.id || (opts.program && opts.program.id);\n super(gl, Object.assign({}, opts, {id}));\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts.isDefaultArray || false;\n\n /** @type {WebGL2RenderingContext} */\n this.gl2 = gl;\n\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n delete() {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES() {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n initialize(props = {}) {\n return this.setProps(props);\n }\n\n setProps(props) {\n // TODO: decide which props should be supported\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n // Set a location in vertex attributes array to a bufferk, enables the location, sets divisor\n setBuffer(location, buffer, accessor) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n // Enabling an attribute location makes it reference the currently bound buffer\n // Disabling an attribute location makes it reference the global constant value\n // TODO - handle single values for size 1 attributes?\n // TODO - convert classic arrays based on known type?\n enable(location, enable = true) {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(\n () =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n // Provide a means to create a buffer that is equivalent to a constant.\n // NOTE: Desktop OpenGL cannot disable attribute 0.\n // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n // this-has-significant-performance-penalt\n getConstantBuffer(elementCount, value) {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl, location, array) {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1iv(location, array);\n break;\n case 2:\n gl.vertexAttribI2iv(location, array);\n break;\n case 3:\n gl.vertexAttribI3iv(location, array);\n break;\n case 4:\n gl.vertexAttribI4iv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantUintArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1uiv(location, array);\n break;\n case 2:\n gl.vertexAttribI2uiv(location, array);\n break;\n case 3:\n gl.vertexAttribI3uiv(location, array);\n break;\n case 4:\n gl.vertexAttribI4uiv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n /** @type {WebGL2RenderingContext} */\n // @ts-ignore\n const gl2 = this.gl;\n return gl2.createVertexArray();\n }\n\n _deleteHandle(handle) {\n this.gl2.deleteVertexArray(handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle) {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
1
+ {"version":3,"sources":["../../../src/classes/vertex-array-object.js"],"names":["Resource","Buffer","isWebGL2","getScratchArray","fillArray","assert","getBrowser","ERR_ELEMENTS","VertexArrayObject","Symbol","toStringTag","isSupported","gl","options","constantAttributeZero","getDefaultArray","luma","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","Object","assign","buffer","bufferValue","gl2","initialize","seal","delete","props","setProps","setElementBuffer","elementBuffer","target","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","getVertexAttribOffset","getVertexAttrib"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils/assert';\nimport {getBrowser} from 'probe.gl';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\nexport default class VertexArrayObject extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'VertexArrayObject';\n }\n static isSupported(gl, options = {}) {\n // Attribute 0 can not be disable on most desktop OpenGL based browsers\n // and on iOS Safari browser.\n if (options.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n // Returns the global (null) vertex array object. Exists even when no extension available\n // TODO(Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n static getDefaultArray(gl) {\n gl.luma = gl.luma || {};\n if (!gl.luma.defaultVertexArray) {\n gl.luma.defaultVertexArray = new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n }\n return gl.luma.defaultVertexArray;\n }\n\n static getMaxAttributes(gl) {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n // Note: Constants are stored globally on the WebGL context, not the VAO\n // So they need to be updated before every render\n // TODO - use known type (in configuration or passed in) to allow non-typed arrays?\n // TODO - remember/cache values to avoid setting them unnecessarily?\n static setConstant(gl, location, array) {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(gl, location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(gl, location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // Create a VertexArray\n constructor(gl, opts = {}) {\n // Use program's id if program but no id is supplied\n const id = opts.id || (opts.program && opts.program.id);\n super(gl, Object.assign({}, opts, {id}));\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts.isDefaultArray || false;\n\n /** @type {WebGL2RenderingContext} */\n this.gl2 = gl;\n\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n delete() {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES() {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n initialize(props = {}) {\n return this.setProps(props);\n }\n\n setProps(props) {\n // TODO: decide which props should be supported\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n // Set a location in vertex attributes array to a bufferk, enables the location, sets divisor\n setBuffer(location, buffer, accessor) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n // Enabling an attribute location makes it reference the currently bound buffer\n // Disabling an attribute location makes it reference the global constant value\n // TODO - handle single values for size 1 attributes?\n // TODO - convert classic arrays based on known type?\n enable(location, enable = true) {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(\n () =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n // Provide a means to create a buffer that is equivalent to a constant.\n // NOTE: Desktop OpenGL cannot disable attribute 0.\n // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n // this-has-significant-performance-penalt\n getConstantBuffer(elementCount, value) {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl, location, array) {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1iv(location, array);\n break;\n case 2:\n gl.vertexAttribI2iv(location, array);\n break;\n case 3:\n gl.vertexAttribI3iv(location, array);\n break;\n case 4:\n gl.vertexAttribI4iv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantUintArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1uiv(location, array);\n break;\n case 2:\n gl.vertexAttribI2uiv(location, array);\n break;\n case 3:\n gl.vertexAttribI3uiv(location, array);\n break;\n case 4:\n gl.vertexAttribI4uiv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n /** @type {WebGL2RenderingContext} */\n // @ts-ignore\n const gl2 = this.gl;\n return gl2.createVertexArray();\n }\n\n _deleteHandle(handle) {\n this.gl2.deleteVertexArray(handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle) {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
package/dist/esm/init.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { log } from '@luma.gl/gltools';
2
2
  import { Stats } from 'probe.gl';
3
3
  import { isBrowser } from '@probe.gl/env';
4
- const VERSION = typeof "8.5.11" !== 'undefined' ? "8.5.11" : 'untranspiled source';
4
+ const VERSION = typeof "8.5.12" !== 'undefined' ? "8.5.12" : 'untranspiled source';
5
5
  const STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';
6
6
 
7
7
  class StatsManager {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/webgl",
3
- "version": "8.5.11",
3
+ "version": "8.5.12",
4
4
  "description": "WebGL2 Classes",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -35,10 +35,10 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@babel/runtime": "^7.0.0",
38
- "@luma.gl/constants": "8.5.11",
39
- "@luma.gl/gltools": "8.5.11",
38
+ "@luma.gl/constants": "8.5.12",
39
+ "@luma.gl/gltools": "8.5.12",
40
40
  "@probe.gl/env": "^3.5.0",
41
41
  "probe.gl": "^3.4.0"
42
42
  },
43
- "gitHead": "9047970bf97ac2f0265551a5ed3453852f59ab54"
43
+ "gitHead": "0a16c6910a0daaa25e1822fa7210b258c9cad60f"
44
44
  }
@@ -38,6 +38,10 @@ const PROP_CHECKS_SET_PROPS = {
38
38
  };
39
39
 
40
40
  export default class Buffer extends Resource {
41
+ // eslint-disable-next-line accessor-pairs
42
+ get [Symbol.toStringTag]() {
43
+ return 'Buffer';
44
+ }
41
45
  constructor(gl, props = {}) {
42
46
  super(gl, props);
43
47
 
@@ -13,6 +13,10 @@ import {assert} from '../utils/assert';
13
13
  const ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';
14
14
 
15
15
  export default class Framebuffer extends Resource {
16
+ // eslint-disable-next-line accessor-pairs
17
+ get [Symbol.toStringTag]() {
18
+ return 'Framebuffer';
19
+ }
16
20
  static isSupported(gl, options = {}) {
17
21
  const {
18
22
  colorBufferFloat, // Whether floating point textures can be rendered and read
@@ -39,6 +39,10 @@ const V6_DEPRECATED_METHODS = [
39
39
  ];
40
40
 
41
41
  export default class Program extends Resource {
42
+ // eslint-disable-next-line accessor-pairs
43
+ get [Symbol.toStringTag]() {
44
+ return 'Program';
45
+ }
42
46
  constructor(gl, props = {}) {
43
47
  super(gl, props);
44
48
 
@@ -15,6 +15,10 @@ const GL_ANY_SAMPLES_PASSED = 0x8c2f; // Occlusion query (if drawing passed dept
15
15
  const GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a; // Occlusion query less accurate/faster version
16
16
 
17
17
  export default class Query extends Resource {
18
+ // eslint-disable-next-line accessor-pairs
19
+ get [Symbol.toStringTag]() {
20
+ return 'Query';
21
+ }
18
22
  // Returns true if Query is supported by the WebGL implementation
19
23
  // Can also check whether timestamp queries are available.
20
24
  static isSupported(gl, opts = []) {
@@ -18,6 +18,10 @@ function isFormatSupported(gl, format, formats) {
18
18
  }
19
19
 
20
20
  export default class Renderbuffer extends Resource {
21
+ // eslint-disable-next-line accessor-pairs
22
+ get [Symbol.toStringTag]() {
23
+ return 'Renderbuffer';
24
+ }
21
25
  static isSupported(gl, {format} = {format: null}) {
22
26
  return !format || isFormatSupported(gl, format, RENDERBUFFER_FORMATS);
23
27
  }
@@ -13,6 +13,10 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
13
13
  // }
14
14
 
15
15
  export default class Resource {
16
+ // eslint-disable-next-line accessor-pairs
17
+ get [Symbol.toStringTag]() {
18
+ return 'Resource';
19
+ }
16
20
  constructor(gl, opts = {}) {
17
21
  assertWebGLContext(gl);
18
22
 
@@ -21,7 +25,7 @@ export default class Resource {
21
25
  // @ts-ignore
22
26
  this.gl2 = gl;
23
27
  // this.ext = polyfillContext(gl);
24
- this.id = id || uid(this.constructor.name);
28
+ this.id = id || uid(this[Symbol.toStringTag]);
25
29
  this.userData = userData;
26
30
  this._bound = false;
27
31
 
@@ -44,7 +48,7 @@ export default class Resource {
44
48
  }
45
49
 
46
50
  toString() {
47
- return `${this.constructor.name}(${this.id})`;
51
+ return `${this[Symbol.toStringTag] || this.constructor.name}(${this.id})`;
48
52
  }
49
53
 
50
54
  get handle() {
@@ -275,7 +279,7 @@ export default class Resource {
275
279
  }
276
280
 
277
281
  _addStats() {
278
- const name = this.constructor.name;
282
+ const name = this[Symbol.toStringTag];
279
283
  const stats = lumaStats.get('Resource Counts');
280
284
 
281
285
  stats.get('Resources Created').incrementCount();
@@ -284,13 +288,13 @@ export default class Resource {
284
288
  }
285
289
 
286
290
  _removeStats() {
287
- const name = this.constructor.name;
291
+ const name = this[Symbol.toStringTag];
288
292
  const stats = lumaStats.get('Resource Counts');
289
293
 
290
294
  stats.get(`${name}s Active`).decrementCount();
291
295
  }
292
296
 
293
- _trackAllocatedMemory(bytes, name = this.constructor.name) {
297
+ _trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {
294
298
  const stats = lumaStats.get('Memory Usage');
295
299
 
296
300
  stats.get('GPU Memory').addCount(bytes);
@@ -298,7 +302,7 @@ export default class Resource {
298
302
  this.byteLength = bytes;
299
303
  }
300
304
 
301
- _trackDeallocatedMemory(name = this.constructor.name) {
305
+ _trackDeallocatedMemory(name = this[Symbol.toStringTag]) {
302
306
  const stats = lumaStats.get('Memory Usage');
303
307
 
304
308
  stats.get('GPU Memory').subtractCount(this.byteLength);
@@ -9,6 +9,11 @@ const ERR_SOURCE = 'Shader: GLSL source code must be a JavaScript string';
9
9
 
10
10
  // For now this is an internal class
11
11
  export class Shader extends Resource {
12
+ // eslint-disable-next-line accessor-pairs
13
+ get [Symbol.toStringTag]() {
14
+ return 'Shader';
15
+ }
16
+
12
17
  static getTypeName(shaderType) {
13
18
  switch (shaderType) {
14
19
  case GL.VERTEX_SHADER:
@@ -116,6 +121,11 @@ export class Shader extends Resource {
116
121
  }
117
122
 
118
123
  export class VertexShader extends Shader {
124
+ // eslint-disable-next-line accessor-pairs
125
+ get [Symbol.toStringTag]() {
126
+ return 'VertexShader';
127
+ }
128
+
119
129
  constructor(gl, props) {
120
130
  // Signature: new VertexShader(gl, source)
121
131
  if (typeof props === 'string') {
@@ -131,6 +141,10 @@ export class VertexShader extends Shader {
131
141
  }
132
142
 
133
143
  export class FragmentShader extends Shader {
144
+ // eslint-disable-next-line accessor-pairs
145
+ get [Symbol.toStringTag]() {
146
+ return 'FragmentShader';
147
+ }
134
148
  constructor(gl, props) {
135
149
  // Signature: new FragmentShader(gl, source)
136
150
  if (typeof props === 'string') {
@@ -4,6 +4,11 @@ import Texture from './texture';
4
4
  import {loadImage} from '../utils/load-file';
5
5
 
6
6
  export default class Texture2D extends Texture {
7
+ // eslint-disable-next-line accessor-pairs
8
+ get [Symbol.toStringTag]() {
9
+ return 'Texture2D';
10
+ }
11
+
7
12
  static isSupported(gl, opts) {
8
13
  return Texture.isSupported(gl, opts);
9
14
  }
@@ -5,6 +5,11 @@ import {DATA_FORMAT_CHANNELS, TYPE_SIZES} from './texture-formats';
5
5
  import Buffer from './buffer';
6
6
 
7
7
  export default class Texture3D extends Texture {
8
+ // eslint-disable-next-line accessor-pairs
9
+ get [Symbol.toStringTag]() {
10
+ return 'Texture3D';
11
+ }
12
+
8
13
  static isSupported(gl) {
9
14
  return isWebGL2(gl);
10
15
  }
@@ -12,6 +12,11 @@ const FACES = [
12
12
  ];
13
13
 
14
14
  export default class TextureCube extends Texture {
15
+ // eslint-disable-next-line accessor-pairs
16
+ get [Symbol.toStringTag]() {
17
+ return 'TextureCube';
18
+ }
19
+
15
20
  constructor(gl, props = {}) {
16
21
  assertWebGLContext(gl);
17
22
 
@@ -21,6 +21,10 @@ const NPOT_MIN_FILTERS = [GL.LINEAR, GL.NEAREST];
21
21
  const WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};
22
22
 
23
23
  export default class Texture extends Resource {
24
+ // eslint-disable-next-line accessor-pairs
25
+ get [Symbol.toStringTag]() {
26
+ return 'Texture';
27
+ }
24
28
  static isSupported(gl, opts = {}) {
25
29
  const {format, linearFiltering} = opts;
26
30
  let supported = true;
@@ -309,6 +313,8 @@ export default class Texture extends Resource {
309
313
 
310
314
  let gl2;
311
315
 
316
+ let compressedTextureSize = 0;
317
+
312
318
  withParameters(this.gl, parameters, () => {
313
319
  switch (dataType) {
314
320
  case 'null':
@@ -357,15 +363,17 @@ export default class Texture extends Resource {
357
363
  border,
358
364
  levelData.data
359
365
  );
366
+ compressedTextureSize += levelData.levelSize;
360
367
  }
361
-
362
368
  break;
363
369
  default:
364
370
  assert(false, 'Unknown image data type');
365
371
  }
366
372
  });
367
373
 
368
- if (data && data.byteLength) {
374
+ if (dataType === 'compressed') {
375
+ this._trackAllocatedMemory(compressedTextureSize, 'Texture');
376
+ } else if (data && data.byteLength) {
369
377
  this._trackAllocatedMemory(data.byteLength, 'Texture');
370
378
  } else {
371
379
  // NOTE(Tarek): Default to RGBA bytes
@@ -8,6 +8,10 @@ import {isObjectEmpty} from '../utils/utils';
8
8
  // See https://github.com/KhronosGroup/WebGL/issues/2346
9
9
 
10
10
  export default class TransformFeedback extends Resource {
11
+ // eslint-disable-next-line accessor-pairs
12
+ get [Symbol.toStringTag]() {
13
+ return 'TransformFeedback';
14
+ }
11
15
  static isSupported(gl) {
12
16
  return isWebGL2(gl);
13
17
  }
@@ -9,6 +9,10 @@ import {getBrowser} from 'probe.gl';
9
9
  const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
10
10
 
11
11
  export default class VertexArrayObject extends Resource {
12
+ // eslint-disable-next-line accessor-pairs
13
+ get [Symbol.toStringTag]() {
14
+ return 'VertexArrayObject';
15
+ }
12
16
  static isSupported(gl, options = {}) {
13
17
  // Attribute 0 can not be disable on most desktop OpenGL based browsers
14
18
  // and on iOS Safari browser.