@luma.gl/webgl 8.5.16 → 8.5.17

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 (118) hide show
  1. package/dist/dist.js +78 -86
  2. package/dist/dist.min.js +1 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/classes/accessor.js.map +1 -1
  5. package/dist/es5/classes/buffer.js.map +1 -1
  6. package/dist/es5/classes/clear.js.map +1 -1
  7. package/dist/es5/classes/copy-and-blit.js.map +1 -1
  8. package/dist/es5/classes/framebuffer.js.map +1 -1
  9. package/dist/es5/classes/program-configuration.js.map +1 -1
  10. package/dist/es5/classes/program.js.map +1 -1
  11. package/dist/es5/classes/query.js.map +1 -1
  12. package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
  13. package/dist/es5/classes/renderbuffer.js.map +1 -1
  14. package/dist/es5/classes/resource.js +16 -17
  15. package/dist/es5/classes/resource.js.map +1 -1
  16. package/dist/es5/classes/shader.js.map +1 -1
  17. package/dist/es5/classes/texture-2d.js.map +1 -1
  18. package/dist/es5/classes/texture-3d.js.map +1 -1
  19. package/dist/es5/classes/texture-cube.js.map +1 -1
  20. package/dist/es5/classes/texture-formats.js.map +1 -1
  21. package/dist/es5/classes/texture.js.map +1 -1
  22. package/dist/es5/classes/transform-feedback.js.map +1 -1
  23. package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
  24. package/dist/es5/classes/uniforms.js.map +1 -1
  25. package/dist/es5/classes/vertex-array-object.js.map +1 -1
  26. package/dist/es5/classes/vertex-array.js.map +1 -1
  27. package/dist/es5/debug/debug-program-configuration.js.map +1 -1
  28. package/dist/es5/debug/debug-uniforms.js.map +1 -1
  29. package/dist/es5/debug/debug-vertex-array.js.map +1 -1
  30. package/dist/es5/features/check-glsl-extension.js.map +1 -1
  31. package/dist/es5/features/check-old-ie.js.map +1 -1
  32. package/dist/es5/features/features.js.map +1 -1
  33. package/dist/es5/features/index.js.map +1 -1
  34. package/dist/es5/features/limits.js.map +1 -1
  35. package/dist/es5/features/webgl-features-table.js.map +1 -1
  36. package/dist/es5/features/webgl-limits-table.js.map +1 -1
  37. package/dist/es5/glsl-utils/format-glsl-error.js.map +1 -1
  38. package/dist/es5/glsl-utils/get-shader-name.js.map +1 -1
  39. package/dist/es5/glsl-utils/get-shader-type-name.js.map +1 -1
  40. package/dist/es5/glsl-utils/get-shader-version.js.map +1 -1
  41. package/dist/es5/glsl-utils/index.js.map +1 -1
  42. package/dist/es5/index.js.map +1 -1
  43. package/dist/es5/init.js +1 -1
  44. package/dist/es5/init.js.map +1 -1
  45. package/dist/es5/utils/array-utils-flat.js.map +1 -1
  46. package/dist/es5/utils/assert.js.map +1 -1
  47. package/dist/es5/utils/check-props.js.map +1 -1
  48. package/dist/es5/utils/format-value.js.map +1 -1
  49. package/dist/es5/utils/is-old-ie.js.map +1 -1
  50. package/dist/es5/utils/load-file.js.map +1 -1
  51. package/dist/es5/utils/stub-methods.js.map +1 -1
  52. package/dist/es5/utils/utils.js.map +1 -1
  53. package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
  54. package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
  55. package/dist/es5/webgl-utils/format-utils.js.map +1 -1
  56. package/dist/es5/webgl-utils/get-error.js.map +1 -1
  57. package/dist/es5/webgl-utils/request-animation-frame.js.map +1 -1
  58. package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
  59. package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
  60. package/dist/esm/bundle.js.map +1 -1
  61. package/dist/esm/classes/accessor.js.map +1 -1
  62. package/dist/esm/classes/buffer.js.map +1 -1
  63. package/dist/esm/classes/clear.js.map +1 -1
  64. package/dist/esm/classes/copy-and-blit.js.map +1 -1
  65. package/dist/esm/classes/framebuffer.js.map +1 -1
  66. package/dist/esm/classes/program-configuration.js.map +1 -1
  67. package/dist/esm/classes/program.js.map +1 -1
  68. package/dist/esm/classes/query.js.map +1 -1
  69. package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
  70. package/dist/esm/classes/renderbuffer.js.map +1 -1
  71. package/dist/esm/classes/resource.js +11 -15
  72. package/dist/esm/classes/resource.js.map +1 -1
  73. package/dist/esm/classes/shader.js.map +1 -1
  74. package/dist/esm/classes/texture-2d.js.map +1 -1
  75. package/dist/esm/classes/texture-3d.js.map +1 -1
  76. package/dist/esm/classes/texture-cube.js.map +1 -1
  77. package/dist/esm/classes/texture-formats.js.map +1 -1
  78. package/dist/esm/classes/texture.js.map +1 -1
  79. package/dist/esm/classes/transform-feedback.js.map +1 -1
  80. package/dist/esm/classes/uniform-buffer-layout.js.map +1 -1
  81. package/dist/esm/classes/uniforms.js.map +1 -1
  82. package/dist/esm/classes/vertex-array-object.js.map +1 -1
  83. package/dist/esm/classes/vertex-array.js.map +1 -1
  84. package/dist/esm/debug/debug-program-configuration.js.map +1 -1
  85. package/dist/esm/debug/debug-uniforms.js.map +1 -1
  86. package/dist/esm/debug/debug-vertex-array.js.map +1 -1
  87. package/dist/esm/features/check-glsl-extension.js.map +1 -1
  88. package/dist/esm/features/check-old-ie.js.map +1 -1
  89. package/dist/esm/features/features.js.map +1 -1
  90. package/dist/esm/features/index.js.map +1 -1
  91. package/dist/esm/features/limits.js.map +1 -1
  92. package/dist/esm/features/webgl-features-table.js.map +1 -1
  93. package/dist/esm/features/webgl-limits-table.js.map +1 -1
  94. package/dist/esm/glsl-utils/format-glsl-error.js.map +1 -1
  95. package/dist/esm/glsl-utils/get-shader-name.js.map +1 -1
  96. package/dist/esm/glsl-utils/get-shader-type-name.js.map +1 -1
  97. package/dist/esm/glsl-utils/get-shader-version.js.map +1 -1
  98. package/dist/esm/glsl-utils/index.js.map +1 -1
  99. package/dist/esm/index.js.map +1 -1
  100. package/dist/esm/init.js +1 -1
  101. package/dist/esm/init.js.map +1 -1
  102. package/dist/esm/utils/array-utils-flat.js.map +1 -1
  103. package/dist/esm/utils/assert.js.map +1 -1
  104. package/dist/esm/utils/check-props.js.map +1 -1
  105. package/dist/esm/utils/format-value.js.map +1 -1
  106. package/dist/esm/utils/is-old-ie.js.map +1 -1
  107. package/dist/esm/utils/load-file.js.map +1 -1
  108. package/dist/esm/utils/stub-methods.js.map +1 -1
  109. package/dist/esm/utils/utils.js.map +1 -1
  110. package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
  111. package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
  112. package/dist/esm/webgl-utils/format-utils.js.map +1 -1
  113. package/dist/esm/webgl-utils/get-error.js.map +1 -1
  114. package/dist/esm/webgl-utils/request-animation-frame.js.map +1 -1
  115. package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
  116. package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
  117. package/package.json +4 -4
  118. package/src/classes/resource.js +11 -19
@@ -1 +1 @@
1
- {"version":3,"file":"uniform-buffer-layout.js","names":["decomposeCompositeGLType","assert","ERR_ARGUMENT","GL_FLOAT","GL_INT","GL_UNSIGNED_INT","UniformBufferLayout","constructor","layout","size","key","_addUniform","data","Float32Array","typedArray","Int32Array","buffer","Uint32Array","getBytes","getData","getSubData","index","offset","undefined","begin","offsets","end","sizes","subarray","setUniforms","values","_setValue","value","type","set","uniformType","typeAndComponents","components","count","_alignTo"],"sources":["../../../src/classes/uniform-buffer-layout.js"],"sourcesContent":["// @ts-nocheck\n\n/* eslint-disable camelcase */\nimport {decomposeCompositeGLType} from '../webgl-utils/attribute-utils';\nimport {assert} from '../utils/assert';\n\nconst ERR_ARGUMENT = 'UniformBufferLayout illegal argument';\n\n// Local constants - these will \"collapse\" during minification\nconst GL_FLOAT = 0x1406;\nconst GL_INT = 0x1404;\nconst GL_UNSIGNED_INT = 0x1405;\n\n// Std140 layout for uniforms\nexport default class UniformBufferLayout {\n constructor(layout) {\n this.layout = {};\n this.size = 0;\n\n // Add layout (type, size and offset) definitions for each uniform in the layout\n for (const key in layout) {\n this._addUniform(key, layout[key]);\n }\n\n this.size += (4 - (this.size % 4)) % 4;\n\n // Allocate three typed arrays pointing at same memory\n const data = new Float32Array(this.size);\n this.typedArray = {\n [GL_FLOAT]: data,\n [GL_INT]: new Int32Array(data.buffer),\n [GL_UNSIGNED_INT]: new Uint32Array(data.buffer)\n };\n }\n\n // Get number of bytes needed for buffer allocation\n getBytes() {\n return this.size * 4;\n }\n\n // Get the current data as Float32Array, for bufferSubData\n getData() {\n return this.typedArray[GL_FLOAT];\n }\n\n // Get offset and data for one object (for bufferSubData)\n getSubData(index) {\n let data;\n let offset;\n if (index === undefined) {\n data = this.data;\n offset = 0;\n } else {\n const begin = this.offsets[index];\n const end = begin + this.sizes[index];\n data = this.data.subarray(begin, end);\n offset = begin * 4;\n }\n return {data, offset};\n }\n\n // Set a map of values\n setUniforms(values) {\n for (const key in values) {\n this._setValue(key, values[key]);\n }\n return this;\n }\n\n _setValue(key, value) {\n const layout = this.layout[key];\n assert(layout, 'UniformLayoutStd140 illegal argument');\n const typedArray = this.typedArray[layout.type];\n if (layout.size === 1) {\n // single value -> just set it\n typedArray[layout.offset] = value;\n } else {\n // vector/matrix -> copy the supplied (typed) array, starting from offset\n typedArray.set(value, layout.offset);\n }\n }\n\n _addUniform(key, uniformType) {\n const typeAndComponents = decomposeCompositeGLType(uniformType);\n assert(typeAndComponents, ERR_ARGUMENT);\n const {type, components: count} = typeAndComponents;\n\n // First, align (bump) current offset to an even multiple of current object (1, 2, 4)\n this.size = this._alignTo(this.size, count);\n // Use the aligned size as the offset of the current uniform.\n const offset = this.size;\n // Then, add our object's padded size ((1, 2, multiple of 4) to the current offset\n this.size += count;\n\n this.layout[key] = {type, size: count, offset};\n }\n\n // Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes)\n _alignTo(size, count) {\n switch (count) {\n case 1:\n return size; // Pad upwards to even multiple of 2\n case 2:\n return size + (size % 2); // Pad upwards to even multiple of 2\n default:\n return size + ((4 - (size % 4)) % 4); // Pad upwards to even multiple of 4\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/classes/uniform-buffer-layout.js"],"names":["decomposeCompositeGLType","assert","ERR_ARGUMENT","GL_FLOAT","GL_INT","GL_UNSIGNED_INT","UniformBufferLayout","constructor","layout","size","key","_addUniform","data","Float32Array","typedArray","Int32Array","buffer","Uint32Array","getBytes","getData","getSubData","index","offset","undefined","begin","offsets","end","sizes","subarray","setUniforms","values","_setValue","value","type","set","uniformType","typeAndComponents","components","count","_alignTo"],"mappings":"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","sourcesContent":["// @ts-nocheck\n\n/* eslint-disable camelcase */\nimport {decomposeCompositeGLType} from '../webgl-utils/attribute-utils';\nimport {assert} from '../utils/assert';\n\nconst ERR_ARGUMENT = 'UniformBufferLayout illegal argument';\n\n// Local constants - these will \"collapse\" during minification\nconst GL_FLOAT = 0x1406;\nconst GL_INT = 0x1404;\nconst GL_UNSIGNED_INT = 0x1405;\n\n// Std140 layout for uniforms\nexport default class UniformBufferLayout {\n constructor(layout) {\n this.layout = {};\n this.size = 0;\n\n // Add layout (type, size and offset) definitions for each uniform in the layout\n for (const key in layout) {\n this._addUniform(key, layout[key]);\n }\n\n this.size += (4 - (this.size % 4)) % 4;\n\n // Allocate three typed arrays pointing at same memory\n const data = new Float32Array(this.size);\n this.typedArray = {\n [GL_FLOAT]: data,\n [GL_INT]: new Int32Array(data.buffer),\n [GL_UNSIGNED_INT]: new Uint32Array(data.buffer)\n };\n }\n\n // Get number of bytes needed for buffer allocation\n getBytes() {\n return this.size * 4;\n }\n\n // Get the current data as Float32Array, for bufferSubData\n getData() {\n return this.typedArray[GL_FLOAT];\n }\n\n // Get offset and data for one object (for bufferSubData)\n getSubData(index) {\n let data;\n let offset;\n if (index === undefined) {\n data = this.data;\n offset = 0;\n } else {\n const begin = this.offsets[index];\n const end = begin + this.sizes[index];\n data = this.data.subarray(begin, end);\n offset = begin * 4;\n }\n return {data, offset};\n }\n\n // Set a map of values\n setUniforms(values) {\n for (const key in values) {\n this._setValue(key, values[key]);\n }\n return this;\n }\n\n _setValue(key, value) {\n const layout = this.layout[key];\n assert(layout, 'UniformLayoutStd140 illegal argument');\n const typedArray = this.typedArray[layout.type];\n if (layout.size === 1) {\n // single value -> just set it\n typedArray[layout.offset] = value;\n } else {\n // vector/matrix -> copy the supplied (typed) array, starting from offset\n typedArray.set(value, layout.offset);\n }\n }\n\n _addUniform(key, uniformType) {\n const typeAndComponents = decomposeCompositeGLType(uniformType);\n assert(typeAndComponents, ERR_ARGUMENT);\n const {type, components: count} = typeAndComponents;\n\n // First, align (bump) current offset to an even multiple of current object (1, 2, 4)\n this.size = this._alignTo(this.size, count);\n // Use the aligned size as the offset of the current uniform.\n const offset = this.size;\n // Then, add our object's padded size ((1, 2, multiple of 4) to the current offset\n this.size += count;\n\n this.layout[key] = {type, size: count, offset};\n }\n\n // Align offset to 1, 2 or 4 elements (4, 8 or 16 bytes)\n _alignTo(size, count) {\n switch (count) {\n case 1:\n return size; // Pad upwards to even multiple of 2\n case 2:\n return size + (size % 2); // Pad upwards to even multiple of 2\n default:\n return size + ((4 - (size % 4)) % 4); // Pad upwards to even multiple of 4\n }\n }\n}\n"],"file":"uniform-buffer-layout.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"uniforms.js","names":["log","Framebuffer","Renderbuffer","Texture","assert","UNIFORM_SETTERS","getArraySetter","bind","toFloatArray","setVectorUniform","toIntArray","setMatrixUniform","getSamplerSetter","toUIntArray","FLOAT_ARRAY","INT_ARRAY","UINT_ARRAY","array1","toTypedArray","value","uniformLength","Type","cache","Number","isFinite","length","warn","result","i","Float32Array","Int32Array","Uint32Array","getUniformSetter","gl","location","info","setter","type","Error","parseUniformName","name","isArray","UNIFORM_NAME_REGEXP","matches","match","Boolean","checkUniformValues","uniforms","source","uniformMap","uniformName","shouldCheck","checkUniformValue","console","error","Array","ArrayBuffer","isView","checkUniformArray","texture","copyUniform","key","dest","len","slice","checkLength","Math","min","update","uniform1i","functionName","toArray","size","uniformSetter","cacheLength","arrayValue","set"],"sources":["../../../src/classes/uniforms.js"],"sourcesContent":["/** @typedef {import('./uniforms')} types */\n\nimport GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\n\nimport Framebuffer from './framebuffer';\nimport Renderbuffer from './renderbuffer';\nimport Texture from './texture';\nimport {assert} from '../utils/assert';\n\nconst UNIFORM_SETTERS = {\n // WEBGL1\n\n /* eslint-disable max-len */\n [GL.FLOAT]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n [GL.FLOAT_VEC2]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n [GL.FLOAT_VEC3]: getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n [GL.FLOAT_VEC4]: getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n\n [GL.INT]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.INT_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.INT_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.INT_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n [GL.BOOL]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.BOOL_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.BOOL_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.BOOL_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2]: getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n [GL.FLOAT_MAT3]: getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n [GL.FLOAT_MAT4]: getArraySetter.bind(\n null,\n 'uniformMatrix4fv',\n toFloatArray,\n 16,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n // WEBGL2 - unsigned integers, irregular matrices, additional texture samplers\n\n [GL.UNSIGNED_INT]: getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n [GL.UNSIGNED_INT_VEC2]: getArraySetter.bind(\n null,\n 'uniform2uiv',\n toUIntArray,\n 2,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC3]: getArraySetter.bind(\n null,\n 'uniform3uiv',\n toUIntArray,\n 3,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC4]: getArraySetter.bind(\n null,\n 'uniform4uiv',\n toUIntArray,\n 4,\n setVectorUniform\n ),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2x3]: getArraySetter.bind(\n null,\n 'uniformMatrix2x3fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT2x4]: getArraySetter.bind(\n null,\n 'uniformMatrix2x4fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x2]: getArraySetter.bind(\n null,\n 'uniformMatrix3x2fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x4]: getArraySetter.bind(\n null,\n 'uniformMatrix3x4fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x2]: getArraySetter.bind(\n null,\n 'uniformMatrix4x2fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x3]: getArraySetter.bind(\n null,\n 'uniformMatrix4x3fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n [GL.SAMPLER_3D]: getSamplerSetter,\n [GL.SAMPLER_2D_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_CUBE_SHADOW]: getSamplerSetter,\n [GL.INT_SAMPLER_2D]: getSamplerSetter,\n [GL.INT_SAMPLER_3D]: getSamplerSetter,\n [GL.INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.INT_SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_3D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: getSamplerSetter\n /* eslint-enable max-len */\n};\n\n// Pre-allocated typed arrays for temporary conversion\nconst FLOAT_ARRAY = {};\nconst INT_ARRAY = {};\nconst UINT_ARRAY = {};\n\nconst array1 = [0];\n\n// Functions to ensure the type of uniform values\n// This is done because uniform*v functions\n// are extremely slow when consuming JS arrays directly.\nfunction toTypedArray(value, uniformLength, Type, cache) {\n // convert boolean uniforms to Number\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n const length = value.length;\n if (length % uniformLength) {\n log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();\n }\n\n if (value instanceof Type) {\n return value;\n }\n let result = cache[length];\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n for (let i = 0; i < length; i++) {\n result[i] = value[i];\n }\n return result;\n}\n\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\n\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\n\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n} // Returns a Magic Uniform Setter\n\n// PUBLIC API\n\n/** @type {types['getUniformSetter']} */ export function getUniformSetter(gl, location, info) {\n const setter = UNIFORM_SETTERS[info.type];\n if (!setter) {\n throw new Error(`Unknown GLSL uniform type ${info.type}`);\n }\n\n // NOTE(Tarek): This construction is the ensure\n // separate caches for all setters.\n return setter().bind(null, gl, location);\n}\n\n/** @type {types['parseUniformName']} */\nexport function parseUniformName(name) {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] || 1,\n isArray: Boolean(matches[2])\n };\n} // To facilitate early detection of e.g. undefined values in JavaScript\n\n// Basic checks of uniform values (with or without knowledge of program)\n\n/** @type {types['checkUniformValues']} */\nexport function checkUniformValues(uniforms, source, uniformMap) {\n for (const uniformName in uniforms) {\n const value = uniforms[uniformName];\n const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);\n if (shouldCheck && !checkUniformValue(value)) {\n // Add space to source\n source = source ? `${source} ` : '';\n // Value could be unprintable so write the object on console\n console.error(`${source} Bad uniform ${uniformName}`, value); // eslint-disable-line\n /* eslint-enable no-console */\n throw new Error(`${source} Bad uniform ${uniformName}`);\n }\n }\n return true;\n}\n\n// TODO use type information during validation\nfunction checkUniformValue(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return checkUniformArray(value);\n }\n\n // Check if single value is a number\n if (isFinite(value)) {\n return true;\n } else if (value === true || value === false) {\n return true;\n } else if (value instanceof Texture) {\n return true;\n } else if (value instanceof Renderbuffer) {\n return true;\n } else if (value instanceof Framebuffer) {\n return Boolean(value.texture);\n }\n return false;\n}\n\n/** @type {types['copyUniform']} */\nexport function copyUniform(uniforms, key, value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n if (uniforms[key]) {\n const dest = uniforms[key];\n // @ts-ignore\n for (let i = 0, len = value.length; i < len; ++i) {\n dest[i] = value[i];\n }\n } else {\n // @ts-ignore\n uniforms[key] = value.slice();\n }\n } else {\n uniforms[key] = value;\n }\n}\n\n// HELPERS\n\nfunction checkUniformArray(value) {\n // Check that every element in array is a number, and at least 1 element\n if (value.length === 0) {\n return false;\n }\n\n const checkLength = Math.min(value.length, 16);\n\n for (let i = 0; i < checkLength; ++i) {\n if (!Number.isFinite(value[i])) {\n return false;\n }\n }\n\n return true;\n}\n\n// NOTE(Tarek): Setters maintain a cache\n// of the previously set value, and\n// avoid resetting it if it's the same.\nfunction getSamplerSetter() {\n let cache = null;\n return (gl, location, value) => {\n const update = cache !== value;\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n\n return update;\n };\n}\n\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n let cache = null;\n let cacheLength = null;\n return (gl, location, value) => {\n const arrayValue = toArray(value, size);\n const length = arrayValue.length;\n let update = false;\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n } else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n for (let i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n\n return update;\n };\n}\n\nfunction setVectorUniform(gl, functionName, location, value) {\n gl[functionName](location, value);\n}\n\nfunction setMatrixUniform(gl, functionName, location, value) {\n gl[functionName](location, false, value);\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/classes/uniforms.js"],"names":["log","Framebuffer","Renderbuffer","Texture","assert","UNIFORM_SETTERS","getArraySetter","bind","toFloatArray","setVectorUniform","toIntArray","setMatrixUniform","getSamplerSetter","toUIntArray","FLOAT_ARRAY","INT_ARRAY","UINT_ARRAY","array1","toTypedArray","value","uniformLength","Type","cache","Number","isFinite","length","warn","result","i","Float32Array","Int32Array","Uint32Array","getUniformSetter","gl","location","info","setter","type","Error","parseUniformName","name","isArray","UNIFORM_NAME_REGEXP","matches","match","Boolean","checkUniformValues","uniforms","source","uniformMap","uniformName","shouldCheck","checkUniformValue","console","error","Array","ArrayBuffer","isView","checkUniformArray","texture","copyUniform","key","dest","len","slice","checkLength","Math","min","update","uniform1i","functionName","toArray","size","uniformSetter","cacheLength","arrayValue","set"],"mappings":"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","sourcesContent":["/** @typedef {import('./uniforms')} types */\n\nimport GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\n\nimport Framebuffer from './framebuffer';\nimport Renderbuffer from './renderbuffer';\nimport Texture from './texture';\nimport {assert} from '../utils/assert';\n\nconst UNIFORM_SETTERS = {\n // WEBGL1\n\n /* eslint-disable max-len */\n [GL.FLOAT]: getArraySetter.bind(null, 'uniform1fv', toFloatArray, 1, setVectorUniform),\n [GL.FLOAT_VEC2]: getArraySetter.bind(null, 'uniform2fv', toFloatArray, 2, setVectorUniform),\n [GL.FLOAT_VEC3]: getArraySetter.bind(null, 'uniform3fv', toFloatArray, 3, setVectorUniform),\n [GL.FLOAT_VEC4]: getArraySetter.bind(null, 'uniform4fv', toFloatArray, 4, setVectorUniform),\n\n [GL.INT]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.INT_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.INT_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.INT_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n [GL.BOOL]: getArraySetter.bind(null, 'uniform1iv', toIntArray, 1, setVectorUniform),\n [GL.BOOL_VEC2]: getArraySetter.bind(null, 'uniform2iv', toIntArray, 2, setVectorUniform),\n [GL.BOOL_VEC3]: getArraySetter.bind(null, 'uniform3iv', toIntArray, 3, setVectorUniform),\n [GL.BOOL_VEC4]: getArraySetter.bind(null, 'uniform4iv', toIntArray, 4, setVectorUniform),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2]: getArraySetter.bind(null, 'uniformMatrix2fv', toFloatArray, 4, setMatrixUniform),\n [GL.FLOAT_MAT3]: getArraySetter.bind(null, 'uniformMatrix3fv', toFloatArray, 9, setMatrixUniform),\n [GL.FLOAT_MAT4]: getArraySetter.bind(\n null,\n 'uniformMatrix4fv',\n toFloatArray,\n 16,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n // WEBGL2 - unsigned integers, irregular matrices, additional texture samplers\n\n [GL.UNSIGNED_INT]: getArraySetter.bind(null, 'uniform1uiv', toUIntArray, 1, setVectorUniform),\n [GL.UNSIGNED_INT_VEC2]: getArraySetter.bind(\n null,\n 'uniform2uiv',\n toUIntArray,\n 2,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC3]: getArraySetter.bind(\n null,\n 'uniform3uiv',\n toUIntArray,\n 3,\n setVectorUniform\n ),\n [GL.UNSIGNED_INT_VEC4]: getArraySetter.bind(\n null,\n 'uniform4uiv',\n toUIntArray,\n 4,\n setVectorUniform\n ),\n\n // uniformMatrix(false): don't transpose the matrix\n [GL.FLOAT_MAT2x3]: getArraySetter.bind(\n null,\n 'uniformMatrix2x3fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT2x4]: getArraySetter.bind(\n null,\n 'uniformMatrix2x4fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x2]: getArraySetter.bind(\n null,\n 'uniformMatrix3x2fv',\n toFloatArray,\n 6,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT3x4]: getArraySetter.bind(\n null,\n 'uniformMatrix3x4fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x2]: getArraySetter.bind(\n null,\n 'uniformMatrix4x2fv',\n toFloatArray,\n 8,\n setMatrixUniform\n ),\n [GL.FLOAT_MAT4x3]: getArraySetter.bind(\n null,\n 'uniformMatrix4x3fv',\n toFloatArray,\n 12,\n setMatrixUniform\n ),\n\n [GL.SAMPLER_2D]: getSamplerSetter,\n [GL.SAMPLER_CUBE]: getSamplerSetter,\n\n [GL.SAMPLER_3D]: getSamplerSetter,\n [GL.SAMPLER_2D_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.SAMPLER_2D_ARRAY_SHADOW]: getSamplerSetter,\n [GL.SAMPLER_CUBE_SHADOW]: getSamplerSetter,\n [GL.INT_SAMPLER_2D]: getSamplerSetter,\n [GL.INT_SAMPLER_3D]: getSamplerSetter,\n [GL.INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.INT_SAMPLER_2D_ARRAY]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_3D]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: getSamplerSetter,\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: getSamplerSetter\n /* eslint-enable max-len */\n};\n\n// Pre-allocated typed arrays for temporary conversion\nconst FLOAT_ARRAY = {};\nconst INT_ARRAY = {};\nconst UINT_ARRAY = {};\n\nconst array1 = [0];\n\n// Functions to ensure the type of uniform values\n// This is done because uniform*v functions\n// are extremely slow when consuming JS arrays directly.\nfunction toTypedArray(value, uniformLength, Type, cache) {\n // convert boolean uniforms to Number\n if (uniformLength === 1 && typeof value === 'boolean') {\n value = value ? 1 : 0;\n }\n if (Number.isFinite(value)) {\n array1[0] = value;\n value = array1;\n }\n const length = value.length;\n if (length % uniformLength) {\n log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();\n }\n\n if (value instanceof Type) {\n return value;\n }\n let result = cache[length];\n if (!result) {\n result = new Type(length);\n cache[length] = result;\n }\n for (let i = 0; i < length; i++) {\n result[i] = value[i];\n }\n return result;\n}\n\nfunction toFloatArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);\n}\n\nfunction toIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);\n}\n\nfunction toUIntArray(value, uniformLength) {\n return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);\n} // Returns a Magic Uniform Setter\n\n// PUBLIC API\n\n/** @type {types['getUniformSetter']} */ export function getUniformSetter(gl, location, info) {\n const setter = UNIFORM_SETTERS[info.type];\n if (!setter) {\n throw new Error(`Unknown GLSL uniform type ${info.type}`);\n }\n\n // NOTE(Tarek): This construction is the ensure\n // separate caches for all setters.\n return setter().bind(null, gl, location);\n}\n\n/** @type {types['parseUniformName']} */\nexport function parseUniformName(name) {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = name.match(UNIFORM_NAME_REGEXP);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] || 1,\n isArray: Boolean(matches[2])\n };\n} // To facilitate early detection of e.g. undefined values in JavaScript\n\n// Basic checks of uniform values (with or without knowledge of program)\n\n/** @type {types['checkUniformValues']} */\nexport function checkUniformValues(uniforms, source, uniformMap) {\n for (const uniformName in uniforms) {\n const value = uniforms[uniformName];\n const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);\n if (shouldCheck && !checkUniformValue(value)) {\n // Add space to source\n source = source ? `${source} ` : '';\n // Value could be unprintable so write the object on console\n console.error(`${source} Bad uniform ${uniformName}`, value); // eslint-disable-line\n /* eslint-enable no-console */\n throw new Error(`${source} Bad uniform ${uniformName}`);\n }\n }\n return true;\n}\n\n// TODO use type information during validation\nfunction checkUniformValue(value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return checkUniformArray(value);\n }\n\n // Check if single value is a number\n if (isFinite(value)) {\n return true;\n } else if (value === true || value === false) {\n return true;\n } else if (value instanceof Texture) {\n return true;\n } else if (value instanceof Renderbuffer) {\n return true;\n } else if (value instanceof Framebuffer) {\n return Boolean(value.texture);\n }\n return false;\n}\n\n/** @type {types['copyUniform']} */\nexport function copyUniform(uniforms, key, value) {\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n if (uniforms[key]) {\n const dest = uniforms[key];\n // @ts-ignore\n for (let i = 0, len = value.length; i < len; ++i) {\n dest[i] = value[i];\n }\n } else {\n // @ts-ignore\n uniforms[key] = value.slice();\n }\n } else {\n uniforms[key] = value;\n }\n}\n\n// HELPERS\n\nfunction checkUniformArray(value) {\n // Check that every element in array is a number, and at least 1 element\n if (value.length === 0) {\n return false;\n }\n\n const checkLength = Math.min(value.length, 16);\n\n for (let i = 0; i < checkLength; ++i) {\n if (!Number.isFinite(value[i])) {\n return false;\n }\n }\n\n return true;\n}\n\n// NOTE(Tarek): Setters maintain a cache\n// of the previously set value, and\n// avoid resetting it if it's the same.\nfunction getSamplerSetter() {\n let cache = null;\n return (gl, location, value) => {\n const update = cache !== value;\n if (update) {\n gl.uniform1i(location, value);\n cache = value;\n }\n\n return update;\n };\n}\n\nfunction getArraySetter(functionName, toArray, size, uniformSetter) {\n let cache = null;\n let cacheLength = null;\n return (gl, location, value) => {\n const arrayValue = toArray(value, size);\n const length = arrayValue.length;\n let update = false;\n if (cache === null) {\n cache = new Float32Array(length);\n cacheLength = length;\n update = true;\n } else {\n assert(cacheLength === length, 'Uniform length cannot change.');\n for (let i = 0; i < length; ++i) {\n if (arrayValue[i] !== cache[i]) {\n update = true;\n break;\n }\n }\n }\n if (update) {\n uniformSetter(gl, functionName, location, arrayValue);\n cache.set(arrayValue);\n }\n\n return update;\n };\n}\n\nfunction setVectorUniform(gl, functionName, location, value) {\n gl[functionName](location, value);\n}\n\nfunction setMatrixUniform(gl, functionName, location, value) {\n gl[functionName](location, false, value);\n}\n"],"file":"uniforms.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"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"],"sources":["../../../src/classes/vertex-array-object.js"],"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/env';\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"],"mappings":"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"}
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/env';\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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vertex-array.js","names":["log","Accessor","Buffer","VertexArrayObject","assert","stubRemovedMethods","ERR_ATTRIBUTE_TYPE","MULTI_LOCATION_ATTRIBUTE_REGEXP","DEPRECATIONS_V6","VertexArray","constructor","gl","opts","id","program","configuration","elements","elementsAccessor","values","accessors","unused","drawParams","buffer","attributes","vertexArrayObject","initialize","Object","seal","delete","props","reset","bindOnUse","setProps","MAX_ATTRIBUTES","Array","fill","setAttributes","setElementBuffer","clearDrawParams","getDrawParams","_updateDrawParams","assign","bind","locationOrName","value","_setAttribute","bindBuffer","elementBuffer","accessor","setBuffer","appAccessor","target","location","_resolveLocationAndAccessor","setConstant","arrayValue","size","length","_normalizeConstantArrayValue","enable","unbindBuffers","disableVertexAttribArray","handle","vertexAttribPointer","bindBuffers","bindForDraw","vertexCount","instanceCount","func","_setConstantAttributes","valueAccessor","INVALID_RESULT","name","_getAttributeIndex","Number","isFinite","once","accessInfo","_getAttributeInfo","currentAccessor","resolve","type","attributeName","getAttributeInfo","multiLocation","exec","locationOffset","getAttributeLocation","isArray","ArrayBuffer","isView","constant","Error","elementCount","Math","max","_setConstantAttributeZero","_setConstantAttribute","isSupported","constantAttributeZero","getConstantBuffer","isIndexed","isInstanced","indexCount","Infinity","_updateDrawParamsForLocation","getElementCount","indexType","indexOffset","offset","divisor","getVertexCount","min","setElements","deprecated"],"sources":["../../../src/classes/vertex-array.js"],"sourcesContent":["import GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\nimport Accessor from './accessor';\nimport Buffer from './buffer';\nimport VertexArrayObject from './vertex-array-object';\nimport {assert} from '../utils/assert';\nimport {stubRemovedMethods} from '../utils/stub-methods';\n\nconst ERR_ATTRIBUTE_TYPE =\n 'VertexArray: attributes must be Buffers or constants (i.e. typed array)';\n\n// This is done to support mat type attributes.\n// See section \"Notes about setting mat type attributes\"\n// in vertex-array.md\nconst MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;\n\nconst DEPRECATIONS_V6 = [\n 'setBuffers',\n 'setGeneric',\n 'clearBindings',\n 'setLocations',\n 'setGenericValues',\n 'setDivisor',\n 'enable',\n 'disable'\n];\n\nexport default class VertexArray {\n constructor(gl, opts = {}) {\n // Use program's id if program is supplied 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.id = id;\n this.gl = gl;\n this.configuration = null;\n\n // Extracted information\n this.elements = null;\n this.elementsAccessor = null;\n this.values = null;\n this.accessors = null;\n this.unused = null;\n this.drawParams = null;\n this.buffer = null; // For attribute 0 on desktops, and created when unbinding buffers\n\n this.attributes = {};\n\n this.vertexArrayObject = new VertexArrayObject(gl);\n\n // Issue errors when using removed methods\n stubRemovedMethods(this, 'VertexArray', 'v6.0', DEPRECATIONS_V6);\n\n this.initialize(opts);\n Object.seal(this);\n }\n\n delete() {\n if (this.buffer) {\n this.buffer.delete();\n }\n\n this.vertexArrayObject.delete();\n }\n\n initialize(props = {}) {\n this.reset();\n this.configuration = null;\n this.bindOnUse = false;\n return this.setProps(props);\n }\n\n // Resets all attributes (to default valued constants)\n reset() {\n // this.vertexArrayObject.reset();\n\n this.elements = null;\n this.elementsAccessor = null;\n const {MAX_ATTRIBUTES} = this.vertexArrayObject;\n this.values = new Array(MAX_ATTRIBUTES).fill(null);\n this.accessors = new Array(MAX_ATTRIBUTES).fill(null);\n this.unused = {};\n\n // Auto detects draw params\n this.drawParams = null;\n\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 ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n if ('elements' in props) {\n this.setElementBuffer(props.elements);\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n return this;\n }\n\n // Automatically called if buffers changed through VertexArray API\n clearDrawParams() {\n this.drawParams = null;\n }\n\n getDrawParams() {\n // Auto deduced draw parameters\n this.drawParams = this.drawParams || this._updateDrawParams();\n\n return this.drawParams;\n }\n\n // Set (bind) an array or map of vertex array buffers, either in numbered or named locations.\n // For names that are not present in `location`, the supplied buffers will be ignored.\n // if a single buffer of type GL.ELEMENT_ARRAY_BUFFER is present, it will be set as elements\n // Signatures:\n // {attributeName: buffer}\n // {attributeName: [buffer, accessor]}\n // {attributeName: (typed) array} => constant\n setAttributes(attributes) {\n Object.assign(this.attributes, attributes);\n this.vertexArrayObject.bind(() => {\n for (const locationOrName in attributes) {\n const value = attributes[locationOrName];\n this._setAttribute(locationOrName, value);\n }\n // Make sure we don't leave any bindings\n this.gl.bindBuffer(GL.ARRAY_BUFFER, null);\n });\n\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, accessor = {}) {\n this.elements = elementBuffer; // Save value for debugging\n this.elementsAccessor = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setElementBuffer(elementBuffer, accessor);\n\n return this;\n }\n\n // Set a location in vertex attributes array to a buffer\n setBuffer(locationOrName, buffer, appAccessor = {}) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, appAccessor);\n }\n\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n buffer,\n buffer.accessor,\n appAccessor\n );\n\n if (location >= 0) {\n this.values[location] = buffer;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setBuffer(location, buffer, accessor);\n }\n\n return this;\n }\n\n // Set attribute to constant value (small typed array corresponding to one vertex' worth of data)\n setConstant(locationOrName, arrayValue, appAccessor = {}) {\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n arrayValue,\n // Ensure that size isn't taken from program for multi-column\n // attributes\n Object.assign({size: arrayValue.length}, appAccessor)\n );\n\n if (location >= 0) {\n arrayValue = this.vertexArrayObject._normalizeConstantArrayValue(arrayValue);\n\n this.values[location] = arrayValue;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n\n // NOTE: We set the actual constant value later on bind. We can't set the value now since\n // constants are global and affect all other VertexArrays that have disabled attributes\n // in the same location.\n // We do disable the attribute which makes it use the global constant value at that location\n this.vertexArrayObject.enable(location, false);\n }\n\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, unbind temporarily to avoid conflicting with TransformFeedback\n unbindBuffers() {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.vertexArrayObject.setElementBuffer(null);\n }\n\n // Chrome does not like buffers that are bound to several binding points,\n // so we need to offer and unbind facility\n // WebGL offers disabling, but no clear way to set a VertexArray buffer to `null`\n // So we just bind all the attributes to the dummy \"attribute zero\" buffer\n this.buffer = this.buffer || new Buffer(this.gl, {accessor: {size: 4}});\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n if (this.values[location] instanceof Buffer) {\n this.gl.disableVertexAttribArray(location);\n this.gl.bindBuffer(GL.ARRAY_BUFFER, this.buffer.handle);\n this.gl.vertexAttribPointer(location, 1, GL.FLOAT, false, 0, 0);\n }\n }\n });\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, rebind rebind after temporary unbind\n bindBuffers() {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.setElementBuffer(this.elements);\n }\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n const buffer = this.values[location];\n if (buffer instanceof Buffer) {\n this.setBuffer(location, buffer);\n }\n }\n });\n return this;\n }\n\n // Bind for use\n // When a vertex array is about to be used, we must:\n // - Set constant attributes (since these are stored on the context and reset on bind)\n // - Check if we need to initialize the buffer\n bindForDraw(vertexCount, instanceCount, func) {\n let value;\n\n this.vertexArrayObject.bind(() => {\n // Make sure that any constant attributes are updated (stored on the context, not the VAO)\n // Also handles attribute 0\n this._setConstantAttributes(vertexCount, instanceCount);\n\n value = func();\n });\n\n return value;\n }\n\n // PRIVATE\n\n // Resolve locations and accessors\n _resolveLocationAndAccessor(locationOrName, value, valueAccessor, appAccessor) {\n const INVALID_RESULT = {\n location: -1,\n accessor: null\n };\n\n const {location, name} = this._getAttributeIndex(locationOrName);\n if (!Number.isFinite(location) || location < 0) {\n this.unused[locationOrName] = value;\n log.once(3, () => `unused value ${locationOrName} in ${this.id}`)();\n return INVALID_RESULT;\n }\n\n const accessInfo = this._getAttributeInfo(name || location);\n\n // Attribute location wasn't directly found.\n // Likely due to multi-location attributes (e.g. matrix)\n if (!accessInfo) {\n return INVALID_RESULT;\n }\n\n // Resolve the partial accessors into a final accessor\n const currentAccessor = this.accessors[location] || {};\n const accessor = Accessor.resolve(\n accessInfo.accessor,\n currentAccessor,\n valueAccessor,\n appAccessor\n );\n\n const {size, type} = accessor;\n assert(Number.isFinite(size) && Number.isFinite(type));\n\n return {location, accessor};\n }\n\n _getAttributeInfo(attributeName) {\n return this.configuration && this.configuration.getAttributeInfo(attributeName);\n }\n\n _getAttributeIndex(locationOrName) {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return {location};\n }\n\n const multiLocation = MULTI_LOCATION_ATTRIBUTE_REGEXP.exec(locationOrName);\n const name = multiLocation ? multiLocation[1] : locationOrName;\n const locationOffset = multiLocation ? Number(multiLocation[2]) : 0;\n\n if (this.configuration) {\n return {\n location: this.configuration.getAttributeLocation(name) + locationOffset,\n name\n };\n }\n\n return {location: -1};\n }\n\n _setAttribute(locationOrName, value) {\n if (value instanceof Buffer) {\n // Signature: {attributeName: Buffer}\n this.setBuffer(locationOrName, value);\n } else if (Array.isArray(value) && value.length && value[0] instanceof Buffer) {\n // Signature: {attributeName: [buffer, accessor]}\n const buffer = value[0];\n const accessor = value[1];\n this.setBuffer(locationOrName, buffer, accessor);\n } else if (ArrayBuffer.isView(value) || Array.isArray(value)) {\n // Signature: {attributeName: constant}, constant == short (typed) array\n const constant = value;\n this.setConstant(locationOrName, constant);\n } else if (value.buffer instanceof Buffer) {\n // luma.gl v7: Support accessor objects with 'buffer' field\n // for interleaved data\n // Signature: {attributeName: {...accessor, buffer}}\n const accessor = value;\n this.setBuffer(locationOrName, accessor.buffer, accessor);\n } else {\n throw new Error(ERR_ATTRIBUTE_TYPE);\n }\n }\n\n // Updates all constant attribute values (constants are used when vertex attributes are disabled).\n // This needs to be done repeatedly since in contrast to buffer bindings,\n // constants are stored on the WebGL context, not the VAO\n _setConstantAttributes(vertexCount, instanceCount) {\n // TODO - use accessor to determine what length to use\n const elementCount = Math.max(vertexCount | 0, instanceCount | 0);\n let constant = this.values[0];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttributeZero(constant, elementCount);\n }\n\n for (let location = 1; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n constant = this.values[location];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttribute(location, constant);\n }\n }\n }\n\n _setConstantAttributeZero(constant, elementCount) {\n if (VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true})) {\n this._setConstantAttribute(0, constant);\n return;\n }\n\n // Get a dummy buffer populated with repeated constants\n const buffer = this.vertexArrayObject.getConstantBuffer(elementCount, constant);\n\n // Set the buffer on location 0\n this.vertexArrayObject.setBuffer(0, buffer, this.accessors[0]);\n }\n\n _setConstantAttribute(location, constant) {\n VertexArrayObject.setConstant(this.gl, location, constant);\n }\n\n // Walks the buffers and updates draw parameters\n _updateDrawParams() {\n const drawParams = {\n isIndexed: false,\n isInstanced: false,\n indexCount: Infinity,\n vertexCount: Infinity,\n instanceCount: Infinity\n };\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n this._updateDrawParamsForLocation(drawParams, location);\n }\n\n if (this.elements) {\n // indexing is autodetected - buffer with target GL.ELEMENT_ARRAY_BUFFER\n // index type is saved for drawElement calls\n drawParams.elementCount = this.elements.getElementCount(this.elements.accessor);\n drawParams.isIndexed = true;\n drawParams.indexType = this.elementsAccessor.type || this.elements.accessor.type;\n drawParams.indexOffset = this.elementsAccessor.offset || 0;\n }\n\n // Post-calculation checks\n if (drawParams.indexCount === Infinity) {\n drawParams.indexCount = 0;\n }\n if (drawParams.vertexCount === Infinity) {\n drawParams.vertexCount = 0;\n }\n if (drawParams.instanceCount === Infinity) {\n drawParams.instanceCount = 0;\n }\n\n return drawParams;\n }\n\n _updateDrawParamsForLocation(drawParams, location) {\n const value = this.values[location];\n const accessor = this.accessors[location];\n\n if (!value) {\n return;\n }\n\n // Check if instanced (whether buffer or constant)\n const {divisor} = accessor;\n const isInstanced = divisor > 0;\n drawParams.isInstanced = drawParams.isInstanced || isInstanced;\n\n if (value instanceof Buffer) {\n const buffer = value;\n\n if (isInstanced) {\n // instance attribute\n const instanceCount = buffer.getVertexCount(accessor);\n drawParams.instanceCount = Math.min(drawParams.instanceCount, instanceCount);\n } else {\n // normal attribute\n const vertexCount = buffer.getVertexCount(accessor);\n drawParams.vertexCount = Math.min(drawParams.vertexCount, vertexCount);\n }\n }\n }\n\n // DEPRECATED in v6.x - but not warnings not properly implemented\n\n setElements(elementBuffer = null, accessor = {}) {\n log.deprecated('setElements', 'setElementBuffer')();\n return this.setElementBuffer(elementBuffer, accessor);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/classes/vertex-array.js"],"names":["log","Accessor","Buffer","VertexArrayObject","assert","stubRemovedMethods","ERR_ATTRIBUTE_TYPE","MULTI_LOCATION_ATTRIBUTE_REGEXP","DEPRECATIONS_V6","VertexArray","constructor","gl","opts","id","program","configuration","elements","elementsAccessor","values","accessors","unused","drawParams","buffer","attributes","vertexArrayObject","initialize","Object","seal","delete","props","reset","bindOnUse","setProps","MAX_ATTRIBUTES","Array","fill","setAttributes","setElementBuffer","clearDrawParams","getDrawParams","_updateDrawParams","assign","bind","locationOrName","value","_setAttribute","bindBuffer","elementBuffer","accessor","setBuffer","appAccessor","target","location","_resolveLocationAndAccessor","setConstant","arrayValue","size","length","_normalizeConstantArrayValue","enable","unbindBuffers","disableVertexAttribArray","handle","vertexAttribPointer","bindBuffers","bindForDraw","vertexCount","instanceCount","func","_setConstantAttributes","valueAccessor","INVALID_RESULT","name","_getAttributeIndex","Number","isFinite","once","accessInfo","_getAttributeInfo","currentAccessor","resolve","type","attributeName","getAttributeInfo","multiLocation","exec","locationOffset","getAttributeLocation","isArray","ArrayBuffer","isView","constant","Error","elementCount","Math","max","_setConstantAttributeZero","_setConstantAttribute","isSupported","constantAttributeZero","getConstantBuffer","isIndexed","isInstanced","indexCount","Infinity","_updateDrawParamsForLocation","getElementCount","indexType","indexOffset","offset","divisor","getVertexCount","min","setElements","deprecated"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\nimport Accessor from './accessor';\nimport Buffer from './buffer';\nimport VertexArrayObject from './vertex-array-object';\nimport {assert} from '../utils/assert';\nimport {stubRemovedMethods} from '../utils/stub-methods';\n\nconst ERR_ATTRIBUTE_TYPE =\n 'VertexArray: attributes must be Buffers or constants (i.e. typed array)';\n\n// This is done to support mat type attributes.\n// See section \"Notes about setting mat type attributes\"\n// in vertex-array.md\nconst MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;\n\nconst DEPRECATIONS_V6 = [\n 'setBuffers',\n 'setGeneric',\n 'clearBindings',\n 'setLocations',\n 'setGenericValues',\n 'setDivisor',\n 'enable',\n 'disable'\n];\n\nexport default class VertexArray {\n constructor(gl, opts = {}) {\n // Use program's id if program is supplied 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.id = id;\n this.gl = gl;\n this.configuration = null;\n\n // Extracted information\n this.elements = null;\n this.elementsAccessor = null;\n this.values = null;\n this.accessors = null;\n this.unused = null;\n this.drawParams = null;\n this.buffer = null; // For attribute 0 on desktops, and created when unbinding buffers\n\n this.attributes = {};\n\n this.vertexArrayObject = new VertexArrayObject(gl);\n\n // Issue errors when using removed methods\n stubRemovedMethods(this, 'VertexArray', 'v6.0', DEPRECATIONS_V6);\n\n this.initialize(opts);\n Object.seal(this);\n }\n\n delete() {\n if (this.buffer) {\n this.buffer.delete();\n }\n\n this.vertexArrayObject.delete();\n }\n\n initialize(props = {}) {\n this.reset();\n this.configuration = null;\n this.bindOnUse = false;\n return this.setProps(props);\n }\n\n // Resets all attributes (to default valued constants)\n reset() {\n // this.vertexArrayObject.reset();\n\n this.elements = null;\n this.elementsAccessor = null;\n const {MAX_ATTRIBUTES} = this.vertexArrayObject;\n this.values = new Array(MAX_ATTRIBUTES).fill(null);\n this.accessors = new Array(MAX_ATTRIBUTES).fill(null);\n this.unused = {};\n\n // Auto detects draw params\n this.drawParams = null;\n\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 ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n if ('elements' in props) {\n this.setElementBuffer(props.elements);\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n return this;\n }\n\n // Automatically called if buffers changed through VertexArray API\n clearDrawParams() {\n this.drawParams = null;\n }\n\n getDrawParams() {\n // Auto deduced draw parameters\n this.drawParams = this.drawParams || this._updateDrawParams();\n\n return this.drawParams;\n }\n\n // Set (bind) an array or map of vertex array buffers, either in numbered or named locations.\n // For names that are not present in `location`, the supplied buffers will be ignored.\n // if a single buffer of type GL.ELEMENT_ARRAY_BUFFER is present, it will be set as elements\n // Signatures:\n // {attributeName: buffer}\n // {attributeName: [buffer, accessor]}\n // {attributeName: (typed) array} => constant\n setAttributes(attributes) {\n Object.assign(this.attributes, attributes);\n this.vertexArrayObject.bind(() => {\n for (const locationOrName in attributes) {\n const value = attributes[locationOrName];\n this._setAttribute(locationOrName, value);\n }\n // Make sure we don't leave any bindings\n this.gl.bindBuffer(GL.ARRAY_BUFFER, null);\n });\n\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, accessor = {}) {\n this.elements = elementBuffer; // Save value for debugging\n this.elementsAccessor = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setElementBuffer(elementBuffer, accessor);\n\n return this;\n }\n\n // Set a location in vertex attributes array to a buffer\n setBuffer(locationOrName, buffer, appAccessor = {}) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, appAccessor);\n }\n\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n buffer,\n buffer.accessor,\n appAccessor\n );\n\n if (location >= 0) {\n this.values[location] = buffer;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setBuffer(location, buffer, accessor);\n }\n\n return this;\n }\n\n // Set attribute to constant value (small typed array corresponding to one vertex' worth of data)\n setConstant(locationOrName, arrayValue, appAccessor = {}) {\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n arrayValue,\n // Ensure that size isn't taken from program for multi-column\n // attributes\n Object.assign({size: arrayValue.length}, appAccessor)\n );\n\n if (location >= 0) {\n arrayValue = this.vertexArrayObject._normalizeConstantArrayValue(arrayValue);\n\n this.values[location] = arrayValue;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n\n // NOTE: We set the actual constant value later on bind. We can't set the value now since\n // constants are global and affect all other VertexArrays that have disabled attributes\n // in the same location.\n // We do disable the attribute which makes it use the global constant value at that location\n this.vertexArrayObject.enable(location, false);\n }\n\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, unbind temporarily to avoid conflicting with TransformFeedback\n unbindBuffers() {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.vertexArrayObject.setElementBuffer(null);\n }\n\n // Chrome does not like buffers that are bound to several binding points,\n // so we need to offer and unbind facility\n // WebGL offers disabling, but no clear way to set a VertexArray buffer to `null`\n // So we just bind all the attributes to the dummy \"attribute zero\" buffer\n this.buffer = this.buffer || new Buffer(this.gl, {accessor: {size: 4}});\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n if (this.values[location] instanceof Buffer) {\n this.gl.disableVertexAttribArray(location);\n this.gl.bindBuffer(GL.ARRAY_BUFFER, this.buffer.handle);\n this.gl.vertexAttribPointer(location, 1, GL.FLOAT, false, 0, 0);\n }\n }\n });\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, rebind rebind after temporary unbind\n bindBuffers() {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.setElementBuffer(this.elements);\n }\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n const buffer = this.values[location];\n if (buffer instanceof Buffer) {\n this.setBuffer(location, buffer);\n }\n }\n });\n return this;\n }\n\n // Bind for use\n // When a vertex array is about to be used, we must:\n // - Set constant attributes (since these are stored on the context and reset on bind)\n // - Check if we need to initialize the buffer\n bindForDraw(vertexCount, instanceCount, func) {\n let value;\n\n this.vertexArrayObject.bind(() => {\n // Make sure that any constant attributes are updated (stored on the context, not the VAO)\n // Also handles attribute 0\n this._setConstantAttributes(vertexCount, instanceCount);\n\n value = func();\n });\n\n return value;\n }\n\n // PRIVATE\n\n // Resolve locations and accessors\n _resolveLocationAndAccessor(locationOrName, value, valueAccessor, appAccessor) {\n const INVALID_RESULT = {\n location: -1,\n accessor: null\n };\n\n const {location, name} = this._getAttributeIndex(locationOrName);\n if (!Number.isFinite(location) || location < 0) {\n this.unused[locationOrName] = value;\n log.once(3, () => `unused value ${locationOrName} in ${this.id}`)();\n return INVALID_RESULT;\n }\n\n const accessInfo = this._getAttributeInfo(name || location);\n\n // Attribute location wasn't directly found.\n // Likely due to multi-location attributes (e.g. matrix)\n if (!accessInfo) {\n return INVALID_RESULT;\n }\n\n // Resolve the partial accessors into a final accessor\n const currentAccessor = this.accessors[location] || {};\n const accessor = Accessor.resolve(\n accessInfo.accessor,\n currentAccessor,\n valueAccessor,\n appAccessor\n );\n\n const {size, type} = accessor;\n assert(Number.isFinite(size) && Number.isFinite(type));\n\n return {location, accessor};\n }\n\n _getAttributeInfo(attributeName) {\n return this.configuration && this.configuration.getAttributeInfo(attributeName);\n }\n\n _getAttributeIndex(locationOrName) {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return {location};\n }\n\n const multiLocation = MULTI_LOCATION_ATTRIBUTE_REGEXP.exec(locationOrName);\n const name = multiLocation ? multiLocation[1] : locationOrName;\n const locationOffset = multiLocation ? Number(multiLocation[2]) : 0;\n\n if (this.configuration) {\n return {\n location: this.configuration.getAttributeLocation(name) + locationOffset,\n name\n };\n }\n\n return {location: -1};\n }\n\n _setAttribute(locationOrName, value) {\n if (value instanceof Buffer) {\n // Signature: {attributeName: Buffer}\n this.setBuffer(locationOrName, value);\n } else if (Array.isArray(value) && value.length && value[0] instanceof Buffer) {\n // Signature: {attributeName: [buffer, accessor]}\n const buffer = value[0];\n const accessor = value[1];\n this.setBuffer(locationOrName, buffer, accessor);\n } else if (ArrayBuffer.isView(value) || Array.isArray(value)) {\n // Signature: {attributeName: constant}, constant == short (typed) array\n const constant = value;\n this.setConstant(locationOrName, constant);\n } else if (value.buffer instanceof Buffer) {\n // luma.gl v7: Support accessor objects with 'buffer' field\n // for interleaved data\n // Signature: {attributeName: {...accessor, buffer}}\n const accessor = value;\n this.setBuffer(locationOrName, accessor.buffer, accessor);\n } else {\n throw new Error(ERR_ATTRIBUTE_TYPE);\n }\n }\n\n // Updates all constant attribute values (constants are used when vertex attributes are disabled).\n // This needs to be done repeatedly since in contrast to buffer bindings,\n // constants are stored on the WebGL context, not the VAO\n _setConstantAttributes(vertexCount, instanceCount) {\n // TODO - use accessor to determine what length to use\n const elementCount = Math.max(vertexCount | 0, instanceCount | 0);\n let constant = this.values[0];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttributeZero(constant, elementCount);\n }\n\n for (let location = 1; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n constant = this.values[location];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttribute(location, constant);\n }\n }\n }\n\n _setConstantAttributeZero(constant, elementCount) {\n if (VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true})) {\n this._setConstantAttribute(0, constant);\n return;\n }\n\n // Get a dummy buffer populated with repeated constants\n const buffer = this.vertexArrayObject.getConstantBuffer(elementCount, constant);\n\n // Set the buffer on location 0\n this.vertexArrayObject.setBuffer(0, buffer, this.accessors[0]);\n }\n\n _setConstantAttribute(location, constant) {\n VertexArrayObject.setConstant(this.gl, location, constant);\n }\n\n // Walks the buffers and updates draw parameters\n _updateDrawParams() {\n const drawParams = {\n isIndexed: false,\n isInstanced: false,\n indexCount: Infinity,\n vertexCount: Infinity,\n instanceCount: Infinity\n };\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n this._updateDrawParamsForLocation(drawParams, location);\n }\n\n if (this.elements) {\n // indexing is autodetected - buffer with target GL.ELEMENT_ARRAY_BUFFER\n // index type is saved for drawElement calls\n drawParams.elementCount = this.elements.getElementCount(this.elements.accessor);\n drawParams.isIndexed = true;\n drawParams.indexType = this.elementsAccessor.type || this.elements.accessor.type;\n drawParams.indexOffset = this.elementsAccessor.offset || 0;\n }\n\n // Post-calculation checks\n if (drawParams.indexCount === Infinity) {\n drawParams.indexCount = 0;\n }\n if (drawParams.vertexCount === Infinity) {\n drawParams.vertexCount = 0;\n }\n if (drawParams.instanceCount === Infinity) {\n drawParams.instanceCount = 0;\n }\n\n return drawParams;\n }\n\n _updateDrawParamsForLocation(drawParams, location) {\n const value = this.values[location];\n const accessor = this.accessors[location];\n\n if (!value) {\n return;\n }\n\n // Check if instanced (whether buffer or constant)\n const {divisor} = accessor;\n const isInstanced = divisor > 0;\n drawParams.isInstanced = drawParams.isInstanced || isInstanced;\n\n if (value instanceof Buffer) {\n const buffer = value;\n\n if (isInstanced) {\n // instance attribute\n const instanceCount = buffer.getVertexCount(accessor);\n drawParams.instanceCount = Math.min(drawParams.instanceCount, instanceCount);\n } else {\n // normal attribute\n const vertexCount = buffer.getVertexCount(accessor);\n drawParams.vertexCount = Math.min(drawParams.vertexCount, vertexCount);\n }\n }\n }\n\n // DEPRECATED in v6.x - but not warnings not properly implemented\n\n setElements(elementBuffer = null, accessor = {}) {\n log.deprecated('setElements', 'setElementBuffer')();\n return this.setElementBuffer(elementBuffer, accessor);\n }\n}\n"],"file":"vertex-array.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"debug-program-configuration.js","names":["getCompositeGLType","getDebugTableForProgramConfiguration","config","table","header","id","attributeInfo","attributeInfos","glslDeclaration","getGLSLDeclaration","JSON","stringify","accessor","varyingInfo","varyingInfos","type","size","typeAndName","name"],"sources":["../../../src/debug/debug-program-configuration.js"],"sourcesContent":["import {getCompositeGLType} from '../webgl-utils/attribute-utils';\n\nexport function getDebugTableForProgramConfiguration(config) {\n const table = {};\n\n const header = `Accessors for ${config.id}`;\n\n for (const attributeInfo of config.attributeInfos) {\n if (attributeInfo) {\n const glslDeclaration = getGLSLDeclaration(attributeInfo);\n table[`in ${glslDeclaration}`] = {[header]: JSON.stringify(attributeInfo.accessor)};\n }\n }\n\n for (const varyingInfo of config.varyingInfos) {\n if (varyingInfo) {\n const glslDeclaration = getGLSLDeclaration(varyingInfo);\n table[`out ${glslDeclaration}`] = {[header]: JSON.stringify(varyingInfo.accessor)};\n }\n }\n\n return table;\n}\n\nfunction getGLSLDeclaration(attributeInfo) {\n const {type, size} = attributeInfo.accessor;\n const typeAndName = getCompositeGLType(type, size);\n if (typeAndName) {\n return `${typeAndName.name} ${attributeInfo.name}`;\n }\n return attributeInfo.name;\n}\n"],"mappings":"AAAA,SAAQA,kBAAR,QAAiC,gCAAjC;AAEA,OAAO,SAASC,oCAAT,CAA8CC,MAA9C,EAAsD;EAC3D,MAAMC,KAAK,GAAG,EAAd;EAEA,MAAMC,MAAM,2BAAoBF,MAAM,CAACG,EAA3B,CAAZ;;EAEA,KAAK,MAAMC,aAAX,IAA4BJ,MAAM,CAACK,cAAnC,EAAmD;IACjD,IAAID,aAAJ,EAAmB;MACjB,MAAME,eAAe,GAAGC,kBAAkB,CAACH,aAAD,CAA1C;MACAH,KAAK,cAAOK,eAAP,EAAL,GAAiC;QAAC,CAACJ,MAAD,GAAUM,IAAI,CAACC,SAAL,CAAeL,aAAa,CAACM,QAA7B;MAAX,CAAjC;IACD;EACF;;EAED,KAAK,MAAMC,WAAX,IAA0BX,MAAM,CAACY,YAAjC,EAA+C;IAC7C,IAAID,WAAJ,EAAiB;MACf,MAAML,eAAe,GAAGC,kBAAkB,CAACI,WAAD,CAA1C;MACAV,KAAK,eAAQK,eAAR,EAAL,GAAkC;QAAC,CAACJ,MAAD,GAAUM,IAAI,CAACC,SAAL,CAAeE,WAAW,CAACD,QAA3B;MAAX,CAAlC;IACD;EACF;;EAED,OAAOT,KAAP;AACD;;AAED,SAASM,kBAAT,CAA4BH,aAA5B,EAA2C;EACzC,MAAM;IAACS,IAAD;IAAOC;EAAP,IAAeV,aAAa,CAACM,QAAnC;EACA,MAAMK,WAAW,GAAGjB,kBAAkB,CAACe,IAAD,EAAOC,IAAP,CAAtC;;EACA,IAAIC,WAAJ,EAAiB;IACf,iBAAUA,WAAW,CAACC,IAAtB,cAA8BZ,aAAa,CAACY,IAA5C;EACD;;EACD,OAAOZ,aAAa,CAACY,IAArB;AACD"}
1
+ {"version":3,"sources":["../../../src/debug/debug-program-configuration.js"],"names":["getCompositeGLType","getDebugTableForProgramConfiguration","config","table","header","id","attributeInfo","attributeInfos","glslDeclaration","getGLSLDeclaration","JSON","stringify","accessor","varyingInfo","varyingInfos","type","size","typeAndName","name"],"mappings":"AAAA,SAAQA,kBAAR,QAAiC,gCAAjC;AAEA,OAAO,SAASC,oCAAT,CAA8CC,MAA9C,EAAsD;AAC3D,QAAMC,KAAK,GAAG,EAAd;AAEA,QAAMC,MAAM,2BAAoBF,MAAM,CAACG,EAA3B,CAAZ;;AAEA,OAAK,MAAMC,aAAX,IAA4BJ,MAAM,CAACK,cAAnC,EAAmD;AACjD,QAAID,aAAJ,EAAmB;AACjB,YAAME,eAAe,GAAGC,kBAAkB,CAACH,aAAD,CAA1C;AACAH,MAAAA,KAAK,cAAOK,eAAP,EAAL,GAAiC;AAAC,SAACJ,MAAD,GAAUM,IAAI,CAACC,SAAL,CAAeL,aAAa,CAACM,QAA7B;AAAX,OAAjC;AACD;AACF;;AAED,OAAK,MAAMC,WAAX,IAA0BX,MAAM,CAACY,YAAjC,EAA+C;AAC7C,QAAID,WAAJ,EAAiB;AACf,YAAML,eAAe,GAAGC,kBAAkB,CAACI,WAAD,CAA1C;AACAV,MAAAA,KAAK,eAAQK,eAAR,EAAL,GAAkC;AAAC,SAACJ,MAAD,GAAUM,IAAI,CAACC,SAAL,CAAeE,WAAW,CAACD,QAA3B;AAAX,OAAlC;AACD;AACF;;AAED,SAAOT,KAAP;AACD;;AAED,SAASM,kBAAT,CAA4BH,aAA5B,EAA2C;AACzC,QAAM;AAACS,IAAAA,IAAD;AAAOC,IAAAA;AAAP,MAAeV,aAAa,CAACM,QAAnC;AACA,QAAMK,WAAW,GAAGjB,kBAAkB,CAACe,IAAD,EAAOC,IAAP,CAAtC;;AACA,MAAIC,WAAJ,EAAiB;AACf,qBAAUA,WAAW,CAACC,IAAtB,cAA8BZ,aAAa,CAACY,IAA5C;AACD;;AACD,SAAOZ,aAAa,CAACY,IAArB;AACD","sourcesContent":["import {getCompositeGLType} from '../webgl-utils/attribute-utils';\n\nexport function getDebugTableForProgramConfiguration(config) {\n const table = {};\n\n const header = `Accessors for ${config.id}`;\n\n for (const attributeInfo of config.attributeInfos) {\n if (attributeInfo) {\n const glslDeclaration = getGLSLDeclaration(attributeInfo);\n table[`in ${glslDeclaration}`] = {[header]: JSON.stringify(attributeInfo.accessor)};\n }\n }\n\n for (const varyingInfo of config.varyingInfos) {\n if (varyingInfo) {\n const glslDeclaration = getGLSLDeclaration(varyingInfo);\n table[`out ${glslDeclaration}`] = {[header]: JSON.stringify(varyingInfo.accessor)};\n }\n }\n\n return table;\n}\n\nfunction getGLSLDeclaration(attributeInfo) {\n const {type, size} = attributeInfo.accessor;\n const typeAndName = getCompositeGLType(type, size);\n if (typeAndName) {\n return `${typeAndName.name} ${attributeInfo.name}`;\n }\n return attributeInfo.name;\n}\n"],"file":"debug-program-configuration.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"debug-uniforms.js","names":["assert","formatValue","getDebugTableForUniforms","header","program","uniforms","undefinedOnly","SHADER_MODULE_UNIFORM_REGEXP","PROJECT_MODULE_UNIFORM_REGEXP","uniformLocations","_uniformSetters","table","uniformNames","Object","keys","sort","count","uniformName","match","addUniformToTable","unusedCount","unusedTable","uniform","Type","value","isDefined","isUniformDefined","undefined"],"sources":["../../../src/debug/debug-uniforms.js"],"sourcesContent":["import {assert} from '../utils/assert';\nimport {formatValue} from '../utils/format-value';\n\n// Prepares a table suitable for console.table\n/* eslint-disable max-statements, complexity */\nexport function getDebugTableForUniforms({\n header = 'Uniforms',\n program,\n uniforms,\n undefinedOnly = false\n}) {\n assert(program);\n\n const SHADER_MODULE_UNIFORM_REGEXP = '.*_.*';\n const PROJECT_MODULE_UNIFORM_REGEXP = '.*Matrix'; // TODO - Use explicit list\n\n const uniformLocations = program._uniformSetters;\n const table = {}; // {[header]: {}};\n\n // Add program's provided uniforms (in alphabetical order)\n const uniformNames = Object.keys(uniformLocations).sort();\n\n let count = 0;\n\n // First add non-underscored uniforms (assumed not coming from shader modules)\n for (const uniformName of uniformNames) {\n if (\n !uniformName.match(SHADER_MODULE_UNIFORM_REGEXP) &&\n !uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)\n ) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n // add underscored uniforms (assumed from shader modules)\n for (const uniformName of uniformNames) {\n if (uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n for (const uniformName of uniformNames) {\n if (!table[uniformName]) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n // Create a table of unused uniforms\n let unusedCount = 0;\n const unusedTable = {};\n if (!undefinedOnly) {\n for (const uniformName in uniforms) {\n const uniform = uniforms[uniformName];\n if (!table[uniformName]) {\n unusedCount++;\n unusedTable[uniformName] = {\n Type: `NOT USED: ${uniform}`,\n [header]: formatValue(uniform)\n };\n }\n }\n }\n\n return {table, count, unusedTable, unusedCount};\n}\n\n// Helper\nfunction addUniformToTable({table, header, uniforms, uniformName, undefinedOnly}) {\n const value = uniforms[uniformName];\n const isDefined = isUniformDefined(value);\n if (!undefinedOnly || !isDefined) {\n table[uniformName] = {\n // Add program's unprovided uniforms\n [header]: isDefined ? formatValue(value) : 'N/A',\n 'Uniform Type': isDefined ? value : 'NOT PROVIDED'\n };\n return true;\n }\n return false;\n}\n\nfunction isUniformDefined(value) {\n return value !== undefined && value !== null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/debug/debug-uniforms.js"],"names":["assert","formatValue","getDebugTableForUniforms","header","program","uniforms","undefinedOnly","SHADER_MODULE_UNIFORM_REGEXP","PROJECT_MODULE_UNIFORM_REGEXP","uniformLocations","_uniformSetters","table","uniformNames","Object","keys","sort","count","uniformName","match","addUniformToTable","unusedCount","unusedTable","uniform","Type","value","isDefined","isUniformDefined","undefined"],"mappings":"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","sourcesContent":["import {assert} from '../utils/assert';\nimport {formatValue} from '../utils/format-value';\n\n// Prepares a table suitable for console.table\n/* eslint-disable max-statements, complexity */\nexport function getDebugTableForUniforms({\n header = 'Uniforms',\n program,\n uniforms,\n undefinedOnly = false\n}) {\n assert(program);\n\n const SHADER_MODULE_UNIFORM_REGEXP = '.*_.*';\n const PROJECT_MODULE_UNIFORM_REGEXP = '.*Matrix'; // TODO - Use explicit list\n\n const uniformLocations = program._uniformSetters;\n const table = {}; // {[header]: {}};\n\n // Add program's provided uniforms (in alphabetical order)\n const uniformNames = Object.keys(uniformLocations).sort();\n\n let count = 0;\n\n // First add non-underscored uniforms (assumed not coming from shader modules)\n for (const uniformName of uniformNames) {\n if (\n !uniformName.match(SHADER_MODULE_UNIFORM_REGEXP) &&\n !uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)\n ) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n // add underscored uniforms (assumed from shader modules)\n for (const uniformName of uniformNames) {\n if (uniformName.match(PROJECT_MODULE_UNIFORM_REGEXP)) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n for (const uniformName of uniformNames) {\n if (!table[uniformName]) {\n if (addUniformToTable({table, header, uniforms, uniformName, undefinedOnly})) {\n count++;\n }\n }\n }\n\n // Create a table of unused uniforms\n let unusedCount = 0;\n const unusedTable = {};\n if (!undefinedOnly) {\n for (const uniformName in uniforms) {\n const uniform = uniforms[uniformName];\n if (!table[uniformName]) {\n unusedCount++;\n unusedTable[uniformName] = {\n Type: `NOT USED: ${uniform}`,\n [header]: formatValue(uniform)\n };\n }\n }\n }\n\n return {table, count, unusedTable, unusedCount};\n}\n\n// Helper\nfunction addUniformToTable({table, header, uniforms, uniformName, undefinedOnly}) {\n const value = uniforms[uniformName];\n const isDefined = isUniformDefined(value);\n if (!undefinedOnly || !isDefined) {\n table[uniformName] = {\n // Add program's unprovided uniforms\n [header]: isDefined ? formatValue(value) : 'N/A',\n 'Uniform Type': isDefined ? value : 'NOT PROVIDED'\n };\n return true;\n }\n return false;\n}\n\nfunction isUniformDefined(value) {\n return value !== undefined && value !== null;\n}\n"],"file":"debug-uniforms.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"debug-vertex-array.js","names":["Buffer","getKey","getCompositeGLType","formatValue","getDebugTableForVertexArray","vertexArray","header","configuration","table","elements","ELEMENT_ARRAY_BUFFER","getDebugTableRow","attributes","values","attributeLocation","info","_getAttributeInfo","rowHeader","name","accessor","accessors","location","getGLSLDeclaration","attribute","gl","type","size","verts","bytes","isInteger","marker","value","String","replace","indexOf","buffer","data","changed","getDebugData","byteLength","BYTES_PER_ELEMENT","format","instanced","divisor","length","constructor","typeAndName"],"sources":["../../../src/debug/debug-vertex-array.js"],"sourcesContent":["import Buffer from '../classes/buffer';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport {getCompositeGLType} from '../webgl-utils/attribute-utils';\nimport {formatValue} from '../utils/format-value';\n\n// Creates object suitable as input for console.table\nexport function getDebugTableForVertexArray({vertexArray, header = 'Attributes'}) {\n if (!vertexArray.configuration) {\n return {};\n }\n\n const table = {}; // {[header]: {}};\n\n // Add index (elements) if available\n if (vertexArray.elements) {\n // const elements = Object.assign({size: 1}, vertexArray.elements);\n table.ELEMENT_ARRAY_BUFFER = getDebugTableRow(vertexArray, vertexArray.elements, null, header);\n }\n\n // Add used attributes\n const attributes = vertexArray.values;\n\n for (const attributeLocation in attributes) {\n const info = vertexArray._getAttributeInfo(attributeLocation);\n if (info) {\n let rowHeader = `${attributeLocation}: ${info.name}`;\n const accessor = vertexArray.accessors[info.location];\n if (accessor) {\n rowHeader = `${attributeLocation}: ${getGLSLDeclaration(info.name, accessor)}`;\n }\n table[rowHeader] = getDebugTableRow(\n vertexArray,\n attributes[attributeLocation],\n accessor,\n header\n );\n }\n }\n\n return table;\n}\n\n/* eslint-disable max-statements */\nfunction getDebugTableRow(vertexArray, attribute, accessor, header) {\n const {gl} = vertexArray;\n\n if (!attribute) {\n return {\n [header]: 'null',\n 'Format ': 'N/A'\n };\n }\n\n let type = 'NOT PROVIDED';\n let size = 1;\n let verts = 0;\n let bytes = 0;\n\n let isInteger;\n let marker;\n let value;\n\n if (accessor) {\n type = accessor.type;\n size = accessor.size;\n\n // Generate a type name by dropping Array from Float32Array etc.\n type = String(type).replace('Array', '');\n\n // Look for 'nt' to detect integer types, e.g. Int32Array, Uint32Array\n isInteger = type.indexOf('nt') !== -1;\n }\n\n if (attribute instanceof Buffer) {\n const buffer = attribute;\n\n const {data, changed} = buffer.getDebugData();\n marker = changed ? '*' : '';\n\n value = data;\n // @ts-ignore\n bytes = buffer.byteLength;\n // @ts-ignore\n verts = bytes / data.BYTES_PER_ELEMENT / size;\n\n let format;\n\n if (accessor) {\n const instanced = accessor.divisor > 0;\n format = `${instanced ? 'I ' : 'P '} ${verts} (x${size}=${bytes} bytes ${getKey(gl, type)})`;\n } else {\n // element buffer\n isInteger = true;\n format = `${bytes} bytes`;\n }\n\n return {\n [header]: `${marker}${formatValue(value, {size, isInteger})}`,\n 'Format ': format\n };\n }\n\n // CONSTANT VALUE\n value = attribute;\n size = attribute.length;\n // Generate a type name by dropping Array from Float32Array etc.\n type = String(attribute.constructor.name).replace('Array', '');\n // Look for 'nt' to detect integer types, e.g. Int32Array, Uint32Array\n isInteger = type.indexOf('nt') !== -1;\n\n return {\n [header]: `${formatValue(value, {size, isInteger})} (constant)`,\n 'Format ': `${size}x${type} (constant)`\n };\n}\n/* eslint-ensable max-statements */\n\nfunction getGLSLDeclaration(name, accessor) {\n const {type, size} = accessor;\n const typeAndName = getCompositeGLType(type, size);\n return typeAndName ? `${name} (${typeAndName.name})` : name;\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/debug/debug-vertex-array.js"],"names":["Buffer","getKey","getCompositeGLType","formatValue","getDebugTableForVertexArray","vertexArray","header","configuration","table","elements","ELEMENT_ARRAY_BUFFER","getDebugTableRow","attributes","values","attributeLocation","info","_getAttributeInfo","rowHeader","name","accessor","accessors","location","getGLSLDeclaration","attribute","gl","type","size","verts","bytes","isInteger","marker","value","String","replace","indexOf","buffer","data","changed","getDebugData","byteLength","BYTES_PER_ELEMENT","format","instanced","divisor","length","constructor","typeAndName"],"mappings":"AAAA,OAAOA,MAAP,MAAmB,mBAAnB;AACA,SAAQC,MAAR,QAAqB,kCAArB;AACA,SAAQC,kBAAR,QAAiC,gCAAjC;AACA,SAAQC,WAAR,QAA0B,uBAA1B;AAGA,OAAO,SAASC,2BAAT,OAA2E;AAAA,MAAtC;AAACC,IAAAA,WAAD;AAAcC,IAAAA,MAAM,GAAG;AAAvB,GAAsC;;AAChF,MAAI,CAACD,WAAW,CAACE,aAAjB,EAAgC;AAC9B,WAAO,EAAP;AACD;;AAED,QAAMC,KAAK,GAAG,EAAd;;AAGA,MAAIH,WAAW,CAACI,QAAhB,EAA0B;AAExBD,IAAAA,KAAK,CAACE,oBAAN,GAA6BC,gBAAgB,CAACN,WAAD,EAAcA,WAAW,CAACI,QAA1B,EAAoC,IAApC,EAA0CH,MAA1C,CAA7C;AACD;;AAGD,QAAMM,UAAU,GAAGP,WAAW,CAACQ,MAA/B;;AAEA,OAAK,MAAMC,iBAAX,IAAgCF,UAAhC,EAA4C;AAC1C,UAAMG,IAAI,GAAGV,WAAW,CAACW,iBAAZ,CAA8BF,iBAA9B,CAAb;;AACA,QAAIC,IAAJ,EAAU;AACR,UAAIE,SAAS,aAAMH,iBAAN,eAA4BC,IAAI,CAACG,IAAjC,CAAb;AACA,YAAMC,QAAQ,GAAGd,WAAW,CAACe,SAAZ,CAAsBL,IAAI,CAACM,QAA3B,CAAjB;;AACA,UAAIF,QAAJ,EAAc;AACZF,QAAAA,SAAS,aAAMH,iBAAN,eAA4BQ,kBAAkB,CAACP,IAAI,CAACG,IAAN,EAAYC,QAAZ,CAA9C,CAAT;AACD;;AACDX,MAAAA,KAAK,CAACS,SAAD,CAAL,GAAmBN,gBAAgB,CACjCN,WADiC,EAEjCO,UAAU,CAACE,iBAAD,CAFuB,EAGjCK,QAHiC,EAIjCb,MAJiC,CAAnC;AAMD;AACF;;AAED,SAAOE,KAAP;AACD;;AAGD,SAASG,gBAAT,CAA0BN,WAA1B,EAAuCkB,SAAvC,EAAkDJ,QAAlD,EAA4Db,MAA5D,EAAoE;AAClE,QAAM;AAACkB,IAAAA;AAAD,MAAOnB,WAAb;;AAEA,MAAI,CAACkB,SAAL,EAAgB;AACd,WAAO;AACL,OAACjB,MAAD,GAAU,MADL;AAEL,iBAAW;AAFN,KAAP;AAID;;AAED,MAAImB,IAAI,GAAG,cAAX;AACA,MAAIC,IAAI,GAAG,CAAX;AACA,MAAIC,KAAK,GAAG,CAAZ;AACA,MAAIC,KAAK,GAAG,CAAZ;AAEA,MAAIC,SAAJ;AACA,MAAIC,MAAJ;AACA,MAAIC,KAAJ;;AAEA,MAAIZ,QAAJ,EAAc;AACZM,IAAAA,IAAI,GAAGN,QAAQ,CAACM,IAAhB;AACAC,IAAAA,IAAI,GAAGP,QAAQ,CAACO,IAAhB;AAGAD,IAAAA,IAAI,GAAGO,MAAM,CAACP,IAAD,CAAN,CAAaQ,OAAb,CAAqB,OAArB,EAA8B,EAA9B,CAAP;AAGAJ,IAAAA,SAAS,GAAGJ,IAAI,CAACS,OAAL,CAAa,IAAb,MAAuB,CAAC,CAApC;AACD;;AAED,MAAIX,SAAS,YAAYvB,MAAzB,EAAiC;AAC/B,UAAMmC,MAAM,GAAGZ,SAAf;AAEA,UAAM;AAACa,MAAAA,IAAD;AAAOC,MAAAA;AAAP,QAAkBF,MAAM,CAACG,YAAP,EAAxB;AACAR,IAAAA,MAAM,GAAGO,OAAO,GAAG,GAAH,GAAS,EAAzB;AAEAN,IAAAA,KAAK,GAAGK,IAAR;AAEAR,IAAAA,KAAK,GAAGO,MAAM,CAACI,UAAf;AAEAZ,IAAAA,KAAK,GAAGC,KAAK,GAAGQ,IAAI,CAACI,iBAAb,GAAiCd,IAAzC;AAEA,QAAIe,MAAJ;;AAEA,QAAItB,QAAJ,EAAc;AACZ,YAAMuB,SAAS,GAAGvB,QAAQ,CAACwB,OAAT,GAAmB,CAArC;AACAF,MAAAA,MAAM,aAAMC,SAAS,GAAG,IAAH,GAAU,IAAzB,cAAiCf,KAAjC,gBAA4CD,IAA5C,cAAoDE,KAApD,oBAAmE3B,MAAM,CAACuB,EAAD,EAAKC,IAAL,CAAzE,MAAN;AACD,KAHD,MAGO;AAELI,MAAAA,SAAS,GAAG,IAAZ;AACAY,MAAAA,MAAM,aAAMb,KAAN,WAAN;AACD;;AAED,WAAO;AACL,OAACtB,MAAD,aAAawB,MAAb,SAAsB3B,WAAW,CAAC4B,KAAD,EAAQ;AAACL,QAAAA,IAAD;AAAOG,QAAAA;AAAP,OAAR,CAAjC,CADK;AAEL,iBAAWY;AAFN,KAAP;AAID;;AAGDV,EAAAA,KAAK,GAAGR,SAAR;AACAG,EAAAA,IAAI,GAAGH,SAAS,CAACqB,MAAjB;AAEAnB,EAAAA,IAAI,GAAGO,MAAM,CAACT,SAAS,CAACsB,WAAV,CAAsB3B,IAAvB,CAAN,CAAmCe,OAAnC,CAA2C,OAA3C,EAAoD,EAApD,CAAP;AAEAJ,EAAAA,SAAS,GAAGJ,IAAI,CAACS,OAAL,CAAa,IAAb,MAAuB,CAAC,CAApC;AAEA,SAAO;AACL,KAAC5B,MAAD,aAAaH,WAAW,CAAC4B,KAAD,EAAQ;AAACL,MAAAA,IAAD;AAAOG,MAAAA;AAAP,KAAR,CAAxB,gBADK;AAEL,yBAAcH,IAAd,cAAsBD,IAAtB;AAFK,GAAP;AAID;;AAGD,SAASH,kBAAT,CAA4BJ,IAA5B,EAAkCC,QAAlC,EAA4C;AAC1C,QAAM;AAACM,IAAAA,IAAD;AAAOC,IAAAA;AAAP,MAAeP,QAArB;AACA,QAAM2B,WAAW,GAAG5C,kBAAkB,CAACuB,IAAD,EAAOC,IAAP,CAAtC;AACA,SAAOoB,WAAW,aAAM5B,IAAN,eAAe4B,WAAW,CAAC5B,IAA3B,SAAqCA,IAAvD;AACD","sourcesContent":["import Buffer from '../classes/buffer';\nimport {getKey} from '../webgl-utils/constants-to-keys';\nimport {getCompositeGLType} from '../webgl-utils/attribute-utils';\nimport {formatValue} from '../utils/format-value';\n\n// Creates object suitable as input for console.table\nexport function getDebugTableForVertexArray({vertexArray, header = 'Attributes'}) {\n if (!vertexArray.configuration) {\n return {};\n }\n\n const table = {}; // {[header]: {}};\n\n // Add index (elements) if available\n if (vertexArray.elements) {\n // const elements = Object.assign({size: 1}, vertexArray.elements);\n table.ELEMENT_ARRAY_BUFFER = getDebugTableRow(vertexArray, vertexArray.elements, null, header);\n }\n\n // Add used attributes\n const attributes = vertexArray.values;\n\n for (const attributeLocation in attributes) {\n const info = vertexArray._getAttributeInfo(attributeLocation);\n if (info) {\n let rowHeader = `${attributeLocation}: ${info.name}`;\n const accessor = vertexArray.accessors[info.location];\n if (accessor) {\n rowHeader = `${attributeLocation}: ${getGLSLDeclaration(info.name, accessor)}`;\n }\n table[rowHeader] = getDebugTableRow(\n vertexArray,\n attributes[attributeLocation],\n accessor,\n header\n );\n }\n }\n\n return table;\n}\n\n/* eslint-disable max-statements */\nfunction getDebugTableRow(vertexArray, attribute, accessor, header) {\n const {gl} = vertexArray;\n\n if (!attribute) {\n return {\n [header]: 'null',\n 'Format ': 'N/A'\n };\n }\n\n let type = 'NOT PROVIDED';\n let size = 1;\n let verts = 0;\n let bytes = 0;\n\n let isInteger;\n let marker;\n let value;\n\n if (accessor) {\n type = accessor.type;\n size = accessor.size;\n\n // Generate a type name by dropping Array from Float32Array etc.\n type = String(type).replace('Array', '');\n\n // Look for 'nt' to detect integer types, e.g. Int32Array, Uint32Array\n isInteger = type.indexOf('nt') !== -1;\n }\n\n if (attribute instanceof Buffer) {\n const buffer = attribute;\n\n const {data, changed} = buffer.getDebugData();\n marker = changed ? '*' : '';\n\n value = data;\n // @ts-ignore\n bytes = buffer.byteLength;\n // @ts-ignore\n verts = bytes / data.BYTES_PER_ELEMENT / size;\n\n let format;\n\n if (accessor) {\n const instanced = accessor.divisor > 0;\n format = `${instanced ? 'I ' : 'P '} ${verts} (x${size}=${bytes} bytes ${getKey(gl, type)})`;\n } else {\n // element buffer\n isInteger = true;\n format = `${bytes} bytes`;\n }\n\n return {\n [header]: `${marker}${formatValue(value, {size, isInteger})}`,\n 'Format ': format\n };\n }\n\n // CONSTANT VALUE\n value = attribute;\n size = attribute.length;\n // Generate a type name by dropping Array from Float32Array etc.\n type = String(attribute.constructor.name).replace('Array', '');\n // Look for 'nt' to detect integer types, e.g. Int32Array, Uint32Array\n isInteger = type.indexOf('nt') !== -1;\n\n return {\n [header]: `${formatValue(value, {size, isInteger})} (constant)`,\n 'Format ': `${size}x${type} (constant)`\n };\n}\n/* eslint-ensable max-statements */\n\nfunction getGLSLDeclaration(name, accessor) {\n const {type, size} = accessor;\n const typeAndName = getCompositeGLType(type, size);\n return typeAndName ? `${name} (${typeAndName.name})` : name;\n}\n"],"file":"debug-vertex-array.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"check-glsl-extension.js","names":["isOldIE","WEBGL_FEATURES","assert","compiledGlslExtensions","canCompileGLGSExtension","gl","cap","options","feature","extensionName","source","shader","createShader","shaderSource","compileShader","canCompile","getShaderParameter","deleteShader"],"sources":["../../../src/features/check-glsl-extension.js"],"sourcesContent":["import isOldIE from './check-old-ie';\nimport WEBGL_FEATURES from './webgl-features-table';\nimport {assert} from '../utils/assert';\n\n// Enables feature detection in IE11 due to a bug where gl.getExtension may return true\n// but fail to compile when the extension is enabled in the shader. Specifically,\n// the OES_standard_derivatives extension fails to compile in IE11 even though its included\n// in the list of supported extensions.\nconst compiledGlslExtensions = {};\n\n// options allows user agent to be overridden for testing\nexport default function canCompileGLGSExtension(gl, cap, options = {}) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n if (!isOldIE(options)) {\n return true;\n }\n\n if (cap in compiledGlslExtensions) {\n return compiledGlslExtensions[cap];\n }\n\n const extensionName = feature[0];\n const source = `#extension GL_${extensionName} : enable\\nvoid main(void) {}`;\n\n const shader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n gl.deleteShader(shader);\n compiledGlslExtensions[cap] = canCompile;\n return canCompile;\n}\n"],"mappings":"AAAA,OAAOA,OAAP,MAAoB,gBAApB;AACA,OAAOC,cAAP,MAA2B,wBAA3B;AACA,SAAQC,MAAR,QAAqB,iBAArB;AAMA,MAAMC,sBAAsB,GAAG,EAA/B;AAGA,eAAe,SAASC,uBAAT,CAAiCC,EAAjC,EAAqCC,GAArC,EAAwD;EAAA,IAAdC,OAAc,uEAAJ,EAAI;EACrE,MAAMC,OAAO,GAAGP,cAAc,CAACK,GAAD,CAA9B;EACAJ,MAAM,CAACM,OAAD,EAAUF,GAAV,CAAN;;EAEA,IAAI,CAACN,OAAO,CAACO,OAAD,CAAZ,EAAuB;IACrB,OAAO,IAAP;EACD;;EAED,IAAID,GAAG,IAAIH,sBAAX,EAAmC;IACjC,OAAOA,sBAAsB,CAACG,GAAD,CAA7B;EACD;;EAED,MAAMG,aAAa,GAAGD,OAAO,CAAC,CAAD,CAA7B;EACA,MAAME,MAAM,2BAAoBD,aAApB,kCAAZ;EAEA,MAAME,MAAM,GAAGN,EAAE,CAACO,YAAH,OAAf;EACAP,EAAE,CAACQ,YAAH,CAAgBF,MAAhB,EAAwBD,MAAxB;EACAL,EAAE,CAACS,aAAH,CAAiBH,MAAjB;EACA,MAAMI,UAAU,GAAGV,EAAE,CAACW,kBAAH,CAAsBL,MAAtB,QAAnB;EACAN,EAAE,CAACY,YAAH,CAAgBN,MAAhB;EACAR,sBAAsB,CAACG,GAAD,CAAtB,GAA8BS,UAA9B;EACA,OAAOA,UAAP;AACD"}
1
+ {"version":3,"sources":["../../../src/features/check-glsl-extension.js"],"names":["isOldIE","WEBGL_FEATURES","assert","compiledGlslExtensions","canCompileGLGSExtension","gl","cap","options","feature","extensionName","source","shader","createShader","shaderSource","compileShader","canCompile","getShaderParameter","deleteShader"],"mappings":"AAAA,OAAOA,OAAP,MAAoB,gBAApB;AACA,OAAOC,cAAP,MAA2B,wBAA3B;AACA,SAAQC,MAAR,QAAqB,iBAArB;AAMA,MAAMC,sBAAsB,GAAG,EAA/B;AAGA,eAAe,SAASC,uBAAT,CAAiCC,EAAjC,EAAqCC,GAArC,EAAwD;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AACrE,QAAMC,OAAO,GAAGP,cAAc,CAACK,GAAD,CAA9B;AACAJ,EAAAA,MAAM,CAACM,OAAD,EAAUF,GAAV,CAAN;;AAEA,MAAI,CAACN,OAAO,CAACO,OAAD,CAAZ,EAAuB;AACrB,WAAO,IAAP;AACD;;AAED,MAAID,GAAG,IAAIH,sBAAX,EAAmC;AACjC,WAAOA,sBAAsB,CAACG,GAAD,CAA7B;AACD;;AAED,QAAMG,aAAa,GAAGD,OAAO,CAAC,CAAD,CAA7B;AACA,QAAME,MAAM,2BAAoBD,aAApB,kCAAZ;AAEA,QAAME,MAAM,GAAGN,EAAE,CAACO,YAAH,OAAf;AACAP,EAAAA,EAAE,CAACQ,YAAH,CAAgBF,MAAhB,EAAwBD,MAAxB;AACAL,EAAAA,EAAE,CAACS,aAAH,CAAiBH,MAAjB;AACA,QAAMI,UAAU,GAAGV,EAAE,CAACW,kBAAH,CAAsBL,MAAtB,QAAnB;AACAN,EAAAA,EAAE,CAACY,YAAH,CAAgBN,MAAhB;AACAR,EAAAA,sBAAsB,CAACG,GAAD,CAAtB,GAA8BS,UAA9B;AACA,SAAOA,UAAP;AACD","sourcesContent":["import isOldIE from './check-old-ie';\nimport WEBGL_FEATURES from './webgl-features-table';\nimport {assert} from '../utils/assert';\n\n// Enables feature detection in IE11 due to a bug where gl.getExtension may return true\n// but fail to compile when the extension is enabled in the shader. Specifically,\n// the OES_standard_derivatives extension fails to compile in IE11 even though its included\n// in the list of supported extensions.\nconst compiledGlslExtensions = {};\n\n// options allows user agent to be overridden for testing\nexport default function canCompileGLGSExtension(gl, cap, options = {}) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n if (!isOldIE(options)) {\n return true;\n }\n\n if (cap in compiledGlslExtensions) {\n return compiledGlslExtensions[cap];\n }\n\n const extensionName = feature[0];\n const source = `#extension GL_${extensionName} : enable\\nvoid main(void) {}`;\n\n const shader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n const canCompile = gl.getShaderParameter(shader, gl.COMPILE_STATUS);\n gl.deleteShader(shader);\n compiledGlslExtensions[cap] = canCompile;\n return canCompile;\n}\n"],"file":"check-glsl-extension.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"check-old-ie.js","names":["isOldIE","opts","navigator","window","userAgent","isMSIE","indexOf","isTrident"],"sources":["../../../src/features/check-old-ie.js"],"sourcesContent":["// opts allows user agent to be overridden for testing\nexport default function isOldIE(opts = {}) {\n const navigator = (typeof window !== 'undefined' && window.navigator) || {};\n // @ts-ignore\n const userAgent = opts.userAgent || navigator.userAgent || '';\n // We only care about older versions of IE (IE 11 and below). Newer versions of IE (Edge)\n // have much better web standards support.\n const isMSIE = userAgent.indexOf('MSIE ') !== -1;\n const isTrident = userAgent.indexOf('Trident/') !== -1;\n return isMSIE || isTrident;\n}\n"],"mappings":"AACA,eAAe,SAASA,OAAT,GAA4B;EAAA,IAAXC,IAAW,uEAAJ,EAAI;EACzC,MAAMC,SAAS,GAAI,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACD,SAAzC,IAAuD,EAAzE;EAEA,MAAME,SAAS,GAAGH,IAAI,CAACG,SAAL,IAAkBF,SAAS,CAACE,SAA5B,IAAyC,EAA3D;EAGA,MAAMC,MAAM,GAAGD,SAAS,CAACE,OAAV,CAAkB,OAAlB,MAA+B,CAAC,CAA/C;EACA,MAAMC,SAAS,GAAGH,SAAS,CAACE,OAAV,CAAkB,UAAlB,MAAkC,CAAC,CAArD;EACA,OAAOD,MAAM,IAAIE,SAAjB;AACD"}
1
+ {"version":3,"sources":["../../../src/features/check-old-ie.js"],"names":["isOldIE","opts","navigator","window","userAgent","isMSIE","indexOf","isTrident"],"mappings":"AACA,eAAe,SAASA,OAAT,GAA4B;AAAA,MAAXC,IAAW,uEAAJ,EAAI;AACzC,QAAMC,SAAS,GAAI,OAAOC,MAAP,KAAkB,WAAlB,IAAiCA,MAAM,CAACD,SAAzC,IAAuD,EAAzE;AAEA,QAAME,SAAS,GAAGH,IAAI,CAACG,SAAL,IAAkBF,SAAS,CAACE,SAA5B,IAAyC,EAA3D;AAGA,QAAMC,MAAM,GAAGD,SAAS,CAACE,OAAV,CAAkB,OAAlB,MAA+B,CAAC,CAA/C;AACA,QAAMC,SAAS,GAAGH,SAAS,CAACE,OAAV,CAAkB,UAAlB,MAAkC,CAAC,CAArD;AACA,SAAOD,MAAM,IAAIE,SAAjB;AACD","sourcesContent":["// opts allows user agent to be overridden for testing\nexport default function isOldIE(opts = {}) {\n const navigator = (typeof window !== 'undefined' && window.navigator) || {};\n // @ts-ignore\n const userAgent = opts.userAgent || navigator.userAgent || '';\n // We only care about older versions of IE (IE 11 and below). Newer versions of IE (Edge)\n // have much better web standards support.\n const isMSIE = userAgent.indexOf('MSIE ') !== -1;\n const isTrident = userAgent.indexOf('Trident/') !== -1;\n return isMSIE || isTrident;\n}\n"],"file":"check-old-ie.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"features.js","names":["WEBGL_FEATURES","isWebGL2","log","assert","LOG_UNSUPPORTED_FEATURE","hasFeature","gl","feature","hasFeatures","features","Array","isArray","every","isFeatureSupported","getFeatures","luma","caps","cap","undefined","queryFeature","isSupported","featureDefinition","extension","Boolean","getExtension"],"sources":["../../../src/features/features.js"],"sourcesContent":["// Feature detection for WebGL\n//\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\nimport WEBGL_FEATURES from './webgl-features-table';\nimport {isWebGL2, log} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\n\nconst LOG_UNSUPPORTED_FEATURE = 2;\n\n// Check one feature\nexport function hasFeature(gl, feature) {\n return hasFeatures(gl, feature);\n}\n\n// Check one or more features\nexport function hasFeatures(gl, features) {\n features = Array.isArray(features) ? features : [features];\n return features.every(feature => {\n return isFeatureSupported(gl, feature);\n });\n}\n\n// Return a list of supported features\nexport function getFeatures(gl) {\n gl.luma = gl.luma || {};\n gl.luma.caps = gl.luma.caps || {};\n for (const cap in WEBGL_FEATURES) {\n if (gl.luma.caps[cap] === undefined) {\n gl.luma.caps[cap] = isFeatureSupported(gl, cap);\n }\n }\n return gl.luma.caps;\n}\n\n// TODO - cache the value\nfunction isFeatureSupported(gl, cap) {\n gl.luma = gl.luma || {};\n gl.luma.caps = gl.luma.caps || {};\n\n if (gl.luma.caps[cap] === undefined) {\n gl.luma.caps[cap] = queryFeature(gl, cap);\n }\n\n if (!gl.luma.caps[cap]) {\n log.log(LOG_UNSUPPORTED_FEATURE, `Feature: ${cap} not supported`)();\n }\n\n return gl.luma.caps[cap];\n}\n\nfunction queryFeature(gl, cap) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n let isSupported;\n\n // Get extension name from table\n const featureDefinition = isWebGL2(gl) ? feature[1] || feature[0] : feature[0];\n\n // Check if the value is dependent on checking one or more extensions\n if (typeof featureDefinition === 'function') {\n isSupported = featureDefinition(gl);\n } else if (Array.isArray(featureDefinition)) {\n isSupported = true;\n for (const extension of featureDefinition) {\n isSupported = isSupported && Boolean(gl.getExtension(extension));\n }\n } else if (typeof featureDefinition === 'string') {\n isSupported = Boolean(gl.getExtension(featureDefinition));\n } else if (typeof featureDefinition === 'boolean') {\n isSupported = featureDefinition;\n } else {\n assert(false);\n }\n\n return isSupported;\n}\n"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/features/features.js"],"names":["WEBGL_FEATURES","isWebGL2","log","assert","LOG_UNSUPPORTED_FEATURE","hasFeature","gl","feature","hasFeatures","features","Array","isArray","every","isFeatureSupported","getFeatures","luma","caps","cap","undefined","queryFeature","isSupported","featureDefinition","extension","Boolean","getExtension"],"mappings":"AAKA,OAAOA,cAAP,MAA2B,wBAA3B;AACA,SAAQC,QAAR,EAAkBC,GAAlB,QAA4B,kBAA5B;AACA,SAAQC,MAAR,QAAqB,iBAArB;AAEA,MAAMC,uBAAuB,GAAG,CAAhC;AAGA,OAAO,SAASC,UAAT,CAAoBC,EAApB,EAAwBC,OAAxB,EAAiC;AACtC,SAAOC,WAAW,CAACF,EAAD,EAAKC,OAAL,CAAlB;AACD;AAGD,OAAO,SAASC,WAAT,CAAqBF,EAArB,EAAyBG,QAAzB,EAAmC;AACxCA,EAAAA,QAAQ,GAAGC,KAAK,CAACC,OAAN,CAAcF,QAAd,IAA0BA,QAA1B,GAAqC,CAACA,QAAD,CAAhD;AACA,SAAOA,QAAQ,CAACG,KAAT,CAAeL,OAAO,IAAI;AAC/B,WAAOM,kBAAkB,CAACP,EAAD,EAAKC,OAAL,CAAzB;AACD,GAFM,CAAP;AAGD;AAGD,OAAO,SAASO,WAAT,CAAqBR,EAArB,EAAyB;AAC9BA,EAAAA,EAAE,CAACS,IAAH,GAAUT,EAAE,CAACS,IAAH,IAAW,EAArB;AACAT,EAAAA,EAAE,CAACS,IAAH,CAAQC,IAAR,GAAeV,EAAE,CAACS,IAAH,CAAQC,IAAR,IAAgB,EAA/B;;AACA,OAAK,MAAMC,GAAX,IAAkBjB,cAAlB,EAAkC;AAChC,QAAIM,EAAE,CAACS,IAAH,CAAQC,IAAR,CAAaC,GAAb,MAAsBC,SAA1B,EAAqC;AACnCZ,MAAAA,EAAE,CAACS,IAAH,CAAQC,IAAR,CAAaC,GAAb,IAAoBJ,kBAAkB,CAACP,EAAD,EAAKW,GAAL,CAAtC;AACD;AACF;;AACD,SAAOX,EAAE,CAACS,IAAH,CAAQC,IAAf;AACD;;AAGD,SAASH,kBAAT,CAA4BP,EAA5B,EAAgCW,GAAhC,EAAqC;AACnCX,EAAAA,EAAE,CAACS,IAAH,GAAUT,EAAE,CAACS,IAAH,IAAW,EAArB;AACAT,EAAAA,EAAE,CAACS,IAAH,CAAQC,IAAR,GAAeV,EAAE,CAACS,IAAH,CAAQC,IAAR,IAAgB,EAA/B;;AAEA,MAAIV,EAAE,CAACS,IAAH,CAAQC,IAAR,CAAaC,GAAb,MAAsBC,SAA1B,EAAqC;AACnCZ,IAAAA,EAAE,CAACS,IAAH,CAAQC,IAAR,CAAaC,GAAb,IAAoBE,YAAY,CAACb,EAAD,EAAKW,GAAL,CAAhC;AACD;;AAED,MAAI,CAACX,EAAE,CAACS,IAAH,CAAQC,IAAR,CAAaC,GAAb,CAAL,EAAwB;AACtBf,IAAAA,GAAG,CAACA,GAAJ,CAAQE,uBAAR,qBAA6Ca,GAA7C;AACD;;AAED,SAAOX,EAAE,CAACS,IAAH,CAAQC,IAAR,CAAaC,GAAb,CAAP;AACD;;AAED,SAASE,YAAT,CAAsBb,EAAtB,EAA0BW,GAA1B,EAA+B;AAC7B,QAAMV,OAAO,GAAGP,cAAc,CAACiB,GAAD,CAA9B;AACAd,EAAAA,MAAM,CAACI,OAAD,EAAUU,GAAV,CAAN;AAEA,MAAIG,WAAJ;AAGA,QAAMC,iBAAiB,GAAGpB,QAAQ,CAACK,EAAD,CAAR,GAAeC,OAAO,CAAC,CAAD,CAAP,IAAcA,OAAO,CAAC,CAAD,CAApC,GAA0CA,OAAO,CAAC,CAAD,CAA3E;;AAGA,MAAI,OAAOc,iBAAP,KAA6B,UAAjC,EAA6C;AAC3CD,IAAAA,WAAW,GAAGC,iBAAiB,CAACf,EAAD,CAA/B;AACD,GAFD,MAEO,IAAII,KAAK,CAACC,OAAN,CAAcU,iBAAd,CAAJ,EAAsC;AAC3CD,IAAAA,WAAW,GAAG,IAAd;;AACA,SAAK,MAAME,SAAX,IAAwBD,iBAAxB,EAA2C;AACzCD,MAAAA,WAAW,GAAGA,WAAW,IAAIG,OAAO,CAACjB,EAAE,CAACkB,YAAH,CAAgBF,SAAhB,CAAD,CAApC;AACD;AACF,GALM,MAKA,IAAI,OAAOD,iBAAP,KAA6B,QAAjC,EAA2C;AAChDD,IAAAA,WAAW,GAAGG,OAAO,CAACjB,EAAE,CAACkB,YAAH,CAAgBH,iBAAhB,CAAD,CAArB;AACD,GAFM,MAEA,IAAI,OAAOA,iBAAP,KAA6B,SAAjC,EAA4C;AACjDD,IAAAA,WAAW,GAAGC,iBAAd;AACD,GAFM,MAEA;AACLlB,IAAAA,MAAM,CAAC,KAAD,CAAN;AACD;;AAED,SAAOiB,WAAP;AACD","sourcesContent":["// Feature detection for WebGL\n//\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\nimport WEBGL_FEATURES from './webgl-features-table';\nimport {isWebGL2, log} from '@luma.gl/gltools';\nimport {assert} from '../utils/assert';\n\nconst LOG_UNSUPPORTED_FEATURE = 2;\n\n// Check one feature\nexport function hasFeature(gl, feature) {\n return hasFeatures(gl, feature);\n}\n\n// Check one or more features\nexport function hasFeatures(gl, features) {\n features = Array.isArray(features) ? features : [features];\n return features.every(feature => {\n return isFeatureSupported(gl, feature);\n });\n}\n\n// Return a list of supported features\nexport function getFeatures(gl) {\n gl.luma = gl.luma || {};\n gl.luma.caps = gl.luma.caps || {};\n for (const cap in WEBGL_FEATURES) {\n if (gl.luma.caps[cap] === undefined) {\n gl.luma.caps[cap] = isFeatureSupported(gl, cap);\n }\n }\n return gl.luma.caps;\n}\n\n// TODO - cache the value\nfunction isFeatureSupported(gl, cap) {\n gl.luma = gl.luma || {};\n gl.luma.caps = gl.luma.caps || {};\n\n if (gl.luma.caps[cap] === undefined) {\n gl.luma.caps[cap] = queryFeature(gl, cap);\n }\n\n if (!gl.luma.caps[cap]) {\n log.log(LOG_UNSUPPORTED_FEATURE, `Feature: ${cap} not supported`)();\n }\n\n return gl.luma.caps[cap];\n}\n\nfunction queryFeature(gl, cap) {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n let isSupported;\n\n // Get extension name from table\n const featureDefinition = isWebGL2(gl) ? feature[1] || feature[0] : feature[0];\n\n // Check if the value is dependent on checking one or more extensions\n if (typeof featureDefinition === 'function') {\n isSupported = featureDefinition(gl);\n } else if (Array.isArray(featureDefinition)) {\n isSupported = true;\n for (const extension of featureDefinition) {\n isSupported = isSupported && Boolean(gl.getExtension(extension));\n }\n } else if (typeof featureDefinition === 'string') {\n isSupported = Boolean(gl.getExtension(featureDefinition));\n } else if (typeof featureDefinition === 'boolean') {\n isSupported = featureDefinition;\n } else {\n assert(false);\n }\n\n return isSupported;\n}\n"],"file":"features.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getContextInfo","getGLContextInfo","getContextLimits","FEATURES","hasFeature","hasFeatures","getFeatures","default","canCompileGLGSExtension"],"sources":["../../../src/features/index.js"],"sourcesContent":["export {getContextInfo, getGLContextInfo, getContextLimits} from './limits';\nexport {FEATURES} from './webgl-features-table';\nexport {hasFeature, hasFeatures, getFeatures} from './features';\n\nexport {default as canCompileGLGSExtension} from './check-glsl-extension';\n"],"mappings":"AAAA,SAAQA,cAAR,EAAwBC,gBAAxB,EAA0CC,gBAA1C,QAAiE,UAAjE;AACA,SAAQC,QAAR,QAAuB,wBAAvB;AACA,SAAQC,UAAR,EAAoBC,WAApB,EAAiCC,WAAjC,QAAmD,YAAnD;AAEA,SAAQC,OAAO,IAAIC,uBAAnB,QAAiD,wBAAjD"}
1
+ {"version":3,"sources":["../../../src/features/index.js"],"names":["getContextInfo","getGLContextInfo","getContextLimits","FEATURES","hasFeature","hasFeatures","getFeatures","default","canCompileGLGSExtension"],"mappings":"AAAA,SAAQA,cAAR,EAAwBC,gBAAxB,EAA0CC,gBAA1C,QAAiE,UAAjE;AACA,SAAQC,QAAR,QAAuB,wBAAvB;AACA,SAAQC,UAAR,EAAoBC,WAApB,EAAiCC,WAAjC,QAAmD,YAAnD;AAEA,SAAQC,OAAO,IAAIC,uBAAnB,QAAiD,wBAAjD","sourcesContent":["export {getContextInfo, getGLContextInfo, getContextLimits} from './limits';\nexport {FEATURES} from './webgl-features-table';\nexport {hasFeature, hasFeatures, getFeatures} from './features';\n\nexport {default as canCompileGLGSExtension} from './check-glsl-extension';\n"],"file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"file":"limits.js","names":["WEBGL_LIMITS","isWebGL2","getContextDebugInfo","getContextLimits","gl","luma","limits","webgl1MinLimits","webgl2MinLimits","isWebgl2","parameter","limit","webgl1MinLimit","gl1","webgl2MinLimit","gl2","minLimit","limitNotAvailable","getExtension","extension","value","getParameter","getGLContextInfo","info","vendor","renderer","vendorMasked","rendererMasked","version","shadingLanguageVersion","getContextInfo","Object","assign"],"sources":["../../../src/features/limits.js"],"sourcesContent":["import GL from '@luma.gl/constants';\n\nimport WEBGL_LIMITS from './webgl-limits-table';\nimport {isWebGL2, getContextDebugInfo} from '@luma.gl/gltools';\n\nexport function getContextLimits(gl) {\n gl.luma = gl.luma || {};\n\n if (!gl.luma.limits) {\n gl.luma.limits = {};\n gl.luma.webgl1MinLimits = {};\n gl.luma.webgl2MinLimits = {};\n\n const isWebgl2 = isWebGL2(gl);\n\n // WEBGL limits\n for (const parameter in WEBGL_LIMITS) {\n const limit = WEBGL_LIMITS[parameter];\n\n const webgl1MinLimit = limit.gl1;\n const webgl2MinLimit = 'gl2' in limit ? limit.gl2 : limit.gl1;\n const minLimit = isWebgl2 ? webgl2MinLimit : webgl1MinLimit;\n\n // Check if we can query for this limit\n const limitNotAvailable =\n ('gl2' in limit && !isWebgl2) ||\n // @ts-ignore\n ('extension' in limit && !gl.getExtension(limit.extension));\n\n const value = limitNotAvailable ? minLimit : gl.getParameter(parameter);\n gl.luma.limits[parameter] = value;\n gl.luma.webgl1MinLimits[parameter] = webgl1MinLimit;\n gl.luma.webgl2MinLimits[parameter] = webgl2MinLimit;\n }\n }\n\n return gl.luma.limits;\n}\n\nexport function getGLContextInfo(gl) {\n gl.luma = gl.luma || {};\n\n const info = getContextDebugInfo(gl);\n if (!gl.luma.info) {\n gl.luma.info = {\n [GL.UNMASKED_VENDOR_WEBGL]: info.vendor,\n [GL.UNMASKED_RENDERER_WEBGL]: info.renderer,\n [GL.VENDOR]: info.vendorMasked,\n [GL.RENDERER]: info.rendererMasked,\n [GL.VERSION]: info.version,\n [GL.SHADING_LANGUAGE_VERSION]: info.shadingLanguageVersion\n };\n }\n\n return gl.luma.info;\n}\n\nexport function getContextInfo(gl) {\n return Object.assign(getContextDebugInfo(gl), {\n limits: getContextLimits(gl),\n info: getGLContextInfo(gl),\n webgl1MinLimits: gl.luma.webgl1MinLimits,\n webgl2MinLimits: gl.luma.webgl2MinLimits\n });\n}\n"],"mappings":"AAEA,OAAOA,YAAP,MAAyB,sBAAzB;AACA,SAAQC,QAAR,EAAkBC,mBAAlB,QAA4C,kBAA5C;AAEA,OAAO,SAASC,gBAAT,CAA0BC,EAA1B,EAA8B;EACnCA,EAAE,CAACC,IAAH,GAAUD,EAAE,CAACC,IAAH,IAAW,EAArB;;EAEA,IAAI,CAACD,EAAE,CAACC,IAAH,CAAQC,MAAb,EAAqB;IACnBF,EAAE,CAACC,IAAH,CAAQC,MAAR,GAAiB,EAAjB;IACAF,EAAE,CAACC,IAAH,CAAQE,eAAR,GAA0B,EAA1B;IACAH,EAAE,CAACC,IAAH,CAAQG,eAAR,GAA0B,EAA1B;IAEA,MAAMC,QAAQ,GAAGR,QAAQ,CAACG,EAAD,CAAzB;;IAGA,KAAK,MAAMM,SAAX,IAAwBV,YAAxB,EAAsC;MACpC,MAAMW,KAAK,GAAGX,YAAY,CAACU,SAAD,CAA1B;MAEA,MAAME,cAAc,GAAGD,KAAK,CAACE,GAA7B;MACA,MAAMC,cAAc,GAAG,SAASH,KAAT,GAAiBA,KAAK,CAACI,GAAvB,GAA6BJ,KAAK,CAACE,GAA1D;MACA,MAAMG,QAAQ,GAAGP,QAAQ,GAAGK,cAAH,GAAoBF,cAA7C;MAGA,MAAMK,iBAAiB,GACpB,SAASN,KAAT,IAAkB,CAACF,QAApB,IAEC,eAAeE,KAAf,IAAwB,CAACP,EAAE,CAACc,YAAH,CAAgBP,KAAK,CAACQ,SAAtB,CAH5B;MAKA,MAAMC,KAAK,GAAGH,iBAAiB,GAAGD,QAAH,GAAcZ,EAAE,CAACiB,YAAH,CAAgBX,SAAhB,CAA7C;MACAN,EAAE,CAACC,IAAH,CAAQC,MAAR,CAAeI,SAAf,IAA4BU,KAA5B;MACAhB,EAAE,CAACC,IAAH,CAAQE,eAAR,CAAwBG,SAAxB,IAAqCE,cAArC;MACAR,EAAE,CAACC,IAAH,CAAQG,eAAR,CAAwBE,SAAxB,IAAqCI,cAArC;IACD;EACF;;EAED,OAAOV,EAAE,CAACC,IAAH,CAAQC,MAAf;AACD;AAED,OAAO,SAASgB,gBAAT,CAA0BlB,EAA1B,EAA8B;EACnCA,EAAE,CAACC,IAAH,GAAUD,EAAE,CAACC,IAAH,IAAW,EAArB;EAEA,MAAMkB,IAAI,GAAGrB,mBAAmB,CAACE,EAAD,CAAhC;;EACA,IAAI,CAACA,EAAE,CAACC,IAAH,CAAQkB,IAAb,EAAmB;IACjBnB,EAAE,CAACC,IAAH,CAAQkB,IAAR,GAAe;MACb,SAA4BA,IAAI,CAACC,MADpB;MAEb,SAA8BD,IAAI,CAACE,QAFtB;MAGb,QAAaF,IAAI,CAACG,YAHL;MAIb,QAAeH,IAAI,CAACI,cAJP;MAKb,QAAcJ,IAAI,CAACK,OALN;MAMb,SAA+BL,IAAI,CAACM;IANvB,CAAf;EAQD;;EAED,OAAOzB,EAAE,CAACC,IAAH,CAAQkB,IAAf;AACD;AAED,OAAO,SAASO,cAAT,CAAwB1B,EAAxB,EAA4B;EACjC,OAAO2B,MAAM,CAACC,MAAP,CAAc9B,mBAAmB,CAACE,EAAD,CAAjC,EAAuC;IAC5CE,MAAM,EAAEH,gBAAgB,CAACC,EAAD,CADoB;IAE5CmB,IAAI,EAAED,gBAAgB,CAAClB,EAAD,CAFsB;IAG5CG,eAAe,EAAEH,EAAE,CAACC,IAAH,CAAQE,eAHmB;IAI5CC,eAAe,EAAEJ,EAAE,CAACC,IAAH,CAAQG;EAJmB,CAAvC,CAAP;AAMD"}
1
+ {"version":3,"sources":["../../../src/features/limits.js"],"names":["WEBGL_LIMITS","isWebGL2","getContextDebugInfo","getContextLimits","gl","luma","limits","webgl1MinLimits","webgl2MinLimits","isWebgl2","parameter","limit","webgl1MinLimit","gl1","webgl2MinLimit","gl2","minLimit","limitNotAvailable","getExtension","extension","value","getParameter","getGLContextInfo","info","vendor","renderer","vendorMasked","rendererMasked","version","shadingLanguageVersion","getContextInfo","Object","assign"],"mappings":"AAEA,OAAOA,YAAP,MAAyB,sBAAzB;AACA,SAAQC,QAAR,EAAkBC,mBAAlB,QAA4C,kBAA5C;AAEA,OAAO,SAASC,gBAAT,CAA0BC,EAA1B,EAA8B;AACnCA,EAAAA,EAAE,CAACC,IAAH,GAAUD,EAAE,CAACC,IAAH,IAAW,EAArB;;AAEA,MAAI,CAACD,EAAE,CAACC,IAAH,CAAQC,MAAb,EAAqB;AACnBF,IAAAA,EAAE,CAACC,IAAH,CAAQC,MAAR,GAAiB,EAAjB;AACAF,IAAAA,EAAE,CAACC,IAAH,CAAQE,eAAR,GAA0B,EAA1B;AACAH,IAAAA,EAAE,CAACC,IAAH,CAAQG,eAAR,GAA0B,EAA1B;AAEA,UAAMC,QAAQ,GAAGR,QAAQ,CAACG,EAAD,CAAzB;;AAGA,SAAK,MAAMM,SAAX,IAAwBV,YAAxB,EAAsC;AACpC,YAAMW,KAAK,GAAGX,YAAY,CAACU,SAAD,CAA1B;AAEA,YAAME,cAAc,GAAGD,KAAK,CAACE,GAA7B;AACA,YAAMC,cAAc,GAAG,SAASH,KAAT,GAAiBA,KAAK,CAACI,GAAvB,GAA6BJ,KAAK,CAACE,GAA1D;AACA,YAAMG,QAAQ,GAAGP,QAAQ,GAAGK,cAAH,GAAoBF,cAA7C;AAGA,YAAMK,iBAAiB,GACpB,SAASN,KAAT,IAAkB,CAACF,QAApB,IAEC,eAAeE,KAAf,IAAwB,CAACP,EAAE,CAACc,YAAH,CAAgBP,KAAK,CAACQ,SAAtB,CAH5B;AAKA,YAAMC,KAAK,GAAGH,iBAAiB,GAAGD,QAAH,GAAcZ,EAAE,CAACiB,YAAH,CAAgBX,SAAhB,CAA7C;AACAN,MAAAA,EAAE,CAACC,IAAH,CAAQC,MAAR,CAAeI,SAAf,IAA4BU,KAA5B;AACAhB,MAAAA,EAAE,CAACC,IAAH,CAAQE,eAAR,CAAwBG,SAAxB,IAAqCE,cAArC;AACAR,MAAAA,EAAE,CAACC,IAAH,CAAQG,eAAR,CAAwBE,SAAxB,IAAqCI,cAArC;AACD;AACF;;AAED,SAAOV,EAAE,CAACC,IAAH,CAAQC,MAAf;AACD;AAED,OAAO,SAASgB,gBAAT,CAA0BlB,EAA1B,EAA8B;AACnCA,EAAAA,EAAE,CAACC,IAAH,GAAUD,EAAE,CAACC,IAAH,IAAW,EAArB;AAEA,QAAMkB,IAAI,GAAGrB,mBAAmB,CAACE,EAAD,CAAhC;;AACA,MAAI,CAACA,EAAE,CAACC,IAAH,CAAQkB,IAAb,EAAmB;AACjBnB,IAAAA,EAAE,CAACC,IAAH,CAAQkB,IAAR,GAAe;AACb,eAA4BA,IAAI,CAACC,MADpB;AAEb,eAA8BD,IAAI,CAACE,QAFtB;AAGb,cAAaF,IAAI,CAACG,YAHL;AAIb,cAAeH,IAAI,CAACI,cAJP;AAKb,cAAcJ,IAAI,CAACK,OALN;AAMb,eAA+BL,IAAI,CAACM;AANvB,KAAf;AAQD;;AAED,SAAOzB,EAAE,CAACC,IAAH,CAAQkB,IAAf;AACD;AAED,OAAO,SAASO,cAAT,CAAwB1B,EAAxB,EAA4B;AACjC,SAAO2B,MAAM,CAACC,MAAP,CAAc9B,mBAAmB,CAACE,EAAD,CAAjC,EAAuC;AAC5CE,IAAAA,MAAM,EAAEH,gBAAgB,CAACC,EAAD,CADoB;AAE5CmB,IAAAA,IAAI,EAAED,gBAAgB,CAAClB,EAAD,CAFsB;AAG5CG,IAAAA,eAAe,EAAEH,EAAE,CAACC,IAAH,CAAQE,eAHmB;AAI5CC,IAAAA,eAAe,EAAEJ,EAAE,CAACC,IAAH,CAAQG;AAJmB,GAAvC,CAAP;AAMD","sourcesContent":["import GL from '@luma.gl/constants';\n\nimport WEBGL_LIMITS from './webgl-limits-table';\nimport {isWebGL2, getContextDebugInfo} from '@luma.gl/gltools';\n\nexport function getContextLimits(gl) {\n gl.luma = gl.luma || {};\n\n if (!gl.luma.limits) {\n gl.luma.limits = {};\n gl.luma.webgl1MinLimits = {};\n gl.luma.webgl2MinLimits = {};\n\n const isWebgl2 = isWebGL2(gl);\n\n // WEBGL limits\n for (const parameter in WEBGL_LIMITS) {\n const limit = WEBGL_LIMITS[parameter];\n\n const webgl1MinLimit = limit.gl1;\n const webgl2MinLimit = 'gl2' in limit ? limit.gl2 : limit.gl1;\n const minLimit = isWebgl2 ? webgl2MinLimit : webgl1MinLimit;\n\n // Check if we can query for this limit\n const limitNotAvailable =\n ('gl2' in limit && !isWebgl2) ||\n // @ts-ignore\n ('extension' in limit && !gl.getExtension(limit.extension));\n\n const value = limitNotAvailable ? minLimit : gl.getParameter(parameter);\n gl.luma.limits[parameter] = value;\n gl.luma.webgl1MinLimits[parameter] = webgl1MinLimit;\n gl.luma.webgl2MinLimits[parameter] = webgl2MinLimit;\n }\n }\n\n return gl.luma.limits;\n}\n\nexport function getGLContextInfo(gl) {\n gl.luma = gl.luma || {};\n\n const info = getContextDebugInfo(gl);\n if (!gl.luma.info) {\n gl.luma.info = {\n [GL.UNMASKED_VENDOR_WEBGL]: info.vendor,\n [GL.UNMASKED_RENDERER_WEBGL]: info.renderer,\n [GL.VENDOR]: info.vendorMasked,\n [GL.RENDERER]: info.rendererMasked,\n [GL.VERSION]: info.version,\n [GL.SHADING_LANGUAGE_VERSION]: info.shadingLanguageVersion\n };\n }\n\n return gl.luma.info;\n}\n\nexport function getContextInfo(gl) {\n return Object.assign(getContextDebugInfo(gl), {\n limits: getContextLimits(gl),\n info: getGLContextInfo(gl),\n webgl1MinLimits: gl.luma.webgl1MinLimits,\n webgl2MinLimits: gl.luma.webgl2MinLimits\n });\n}\n"],"file":"limits.js"}