@luma.gl/webgl 8.5.11 → 8.5.14
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.
- package/dist/dist.js +80 -11
- package/dist/dist.min.js +1 -1
- package/dist/es5/classes/buffer.js +9 -2
- package/dist/es5/classes/buffer.js.map +1 -1
- package/dist/es5/classes/framebuffer.js +5 -0
- package/dist/es5/classes/framebuffer.js.map +1 -1
- package/dist/es5/classes/program.js +9 -2
- package/dist/es5/classes/program.js.map +1 -1
- package/dist/es5/classes/query.js +6 -1
- package/dist/es5/classes/query.js.map +1 -1
- package/dist/es5/classes/renderbuffer.js +6 -1
- package/dist/es5/classes/renderbuffer.js.map +1 -1
- package/dist/es5/classes/resource.js +13 -6
- package/dist/es5/classes/resource.js.map +1 -1
- package/dist/es5/classes/shader.js +20 -1
- package/dist/es5/classes/shader.js.map +1 -1
- package/dist/es5/classes/texture-2d.js +6 -1
- package/dist/es5/classes/texture-2d.js.map +1 -1
- package/dist/es5/classes/texture-3d.js +6 -1
- package/dist/es5/classes/texture-3d.js.map +1 -1
- package/dist/es5/classes/texture-cube.js +9 -2
- package/dist/es5/classes/texture-cube.js.map +1 -1
- package/dist/es5/classes/texture.js +11 -2
- package/dist/es5/classes/texture.js.map +1 -1
- package/dist/es5/classes/transform-feedback.js +6 -1
- package/dist/es5/classes/transform-feedback.js.map +1 -1
- package/dist/es5/classes/vertex-array-object.js +6 -1
- package/dist/es5/classes/vertex-array-object.js.map +1 -1
- package/dist/es5/init.js +1 -1
- package/dist/esm/classes/buffer.js +4 -0
- package/dist/esm/classes/buffer.js.map +1 -1
- package/dist/esm/classes/framebuffer.js +4 -0
- package/dist/esm/classes/framebuffer.js.map +1 -1
- package/dist/esm/classes/program.js +4 -0
- package/dist/esm/classes/program.js.map +1 -1
- package/dist/esm/classes/query.js +4 -0
- package/dist/esm/classes/query.js.map +1 -1
- package/dist/esm/classes/renderbuffer.js +4 -0
- package/dist/esm/classes/renderbuffer.js.map +1 -1
- package/dist/esm/classes/resource.js +10 -6
- package/dist/esm/classes/resource.js.map +1 -1
- package/dist/esm/classes/shader.js +12 -0
- package/dist/esm/classes/shader.js.map +1 -1
- package/dist/esm/classes/texture-2d.js +4 -0
- package/dist/esm/classes/texture-2d.js.map +1 -1
- package/dist/esm/classes/texture-3d.js +4 -0
- package/dist/esm/classes/texture-3d.js.map +1 -1
- package/dist/esm/classes/texture-cube.js +4 -0
- package/dist/esm/classes/texture-cube.js.map +1 -1
- package/dist/esm/classes/texture.js +9 -1
- package/dist/esm/classes/texture.js.map +1 -1
- package/dist/esm/classes/transform-feedback.js +4 -0
- package/dist/esm/classes/transform-feedback.js.map +1 -1
- package/dist/esm/classes/vertex-array-object.js +4 -0
- package/dist/esm/classes/vertex-array-object.js.map +1 -1
- package/dist/esm/init.js +1 -1
- package/package.json +4 -4
- package/src/classes/buffer.js +4 -0
- package/src/classes/framebuffer.js +4 -0
- package/src/classes/program.js +4 -0
- package/src/classes/query.js +4 -0
- package/src/classes/renderbuffer.js +4 -0
- package/src/classes/resource.js +10 -6
- package/src/classes/shader.js +14 -0
- package/src/classes/texture-2d.js +5 -0
- package/src/classes/texture-3d.js +5 -0
- package/src/classes/texture-cube.js +5 -0
- package/src/classes/texture.js +10 -2
- package/src/classes/transform-feedback.js +4 -0
- package/src/classes/vertex-array-object.js +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/transform-feedback.js"],"names":["isWebGL2","assertWebGL2Context","log","Resource","Buffer","isObjectEmpty","TransformFeedback","isSupported","gl","constructor","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","buffer","byteSize","byteOffset","_getBufferParams","warn","id","_bindBuffer","begin","primitiveMode","bindTransformFeedback","handle","_bindBuffers","beginTransformFeedback","end","endTransformFeedback","undefined","byteLength","_getVaryingInfo","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","bindBufferRange","_createHandle","createTransformFeedback","_deleteHandle","deleteTransformFeedback","_bindHandle"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isObjectEmpty} from '../utils/utils';\n\n// NOTE: The `bindOnUse` flag is a major workaround:\n// See https://github.com/KhronosGroup/WebGL/issues/2346\n\nexport default class TransformFeedback extends Resource {\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n super(gl, props);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props = {}) {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(() => `${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-ignore\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-ignore\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-ignore\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-ignore\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-ignore\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-ignore\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n"],"file":"transform-feedback.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/transform-feedback.js"],"names":["isWebGL2","assertWebGL2Context","log","Resource","Buffer","isObjectEmpty","TransformFeedback","Symbol","toStringTag","isSupported","gl","constructor","props","initialize","stubRemovedMethods","Object","seal","buffers","unused","configuration","bindOnUse","bind","_unbindBuffers","setProps","program","setBuffers","bufferName","setBuffer","locationOrName","bufferOrParams","location","_getVaryingIndex","buffer","byteSize","byteOffset","_getBufferParams","warn","id","_bindBuffer","begin","primitiveMode","bindTransformFeedback","handle","_bindBuffers","beginTransformFeedback","end","endTransformFeedback","undefined","byteLength","_getVaryingInfo","getVaryingInfo","Number","isFinite","bufferIndex","index","bindBufferBase","bindBufferRange","_createHandle","createTransformFeedback","_deleteHandle","deleteTransformFeedback","_bindHandle"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, log} from '@luma.gl/gltools';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isObjectEmpty} from '../utils/utils';\n\n// NOTE: The `bindOnUse` flag is a major workaround:\n// See https://github.com/KhronosGroup/WebGL/issues/2346\n\nexport default class TransformFeedback extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'TransformFeedback';\n }\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n super(gl, props);\n\n this.initialize(props);\n this.stubRemovedMethods('TransformFeedback', 'v6.0', ['pause', 'resume']);\n Object.seal(this);\n }\n\n initialize(props = {}) {\n this.buffers = {};\n this.unused = {};\n this.configuration = null;\n this.bindOnUse = true;\n\n // Unbind any currently bound buffers\n if (!isObjectEmpty(this.buffers)) {\n this.bind(() => this._unbindBuffers());\n }\n\n this.setProps(props);\n return this;\n }\n\n setProps(props) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('bindOnUse' in props) {\n props = props.bindOnUse;\n }\n if ('buffers' in props) {\n this.setBuffers(props.buffers);\n }\n }\n\n setBuffers(buffers = {}) {\n this.bind(() => {\n for (const bufferName in buffers) {\n this.setBuffer(bufferName, buffers[bufferName]);\n }\n });\n return this;\n }\n\n setBuffer(locationOrName, bufferOrParams) {\n const location = this._getVaryingIndex(locationOrName);\n const {buffer, byteSize, byteOffset} = this._getBufferParams(bufferOrParams);\n\n if (location < 0) {\n this.unused[locationOrName] = buffer;\n log.warn(() => `${this.id} unused varying buffer ${locationOrName}`)();\n return this;\n }\n\n this.buffers[location] = bufferOrParams;\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n if (!this.bindOnUse) {\n this._bindBuffer(location, buffer, byteOffset, byteSize);\n }\n\n return this;\n }\n\n begin(primitiveMode = GL.POINTS) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n this._bindBuffers();\n // @ts-ignore\n this.gl.beginTransformFeedback(primitiveMode);\n return this;\n }\n\n end() {\n // @ts-ignore\n this.gl.endTransformFeedback();\n this._unbindBuffers();\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);\n return this;\n }\n\n // PRIVATE METHODS\n\n _getBufferParams(bufferOrParams) {\n let byteOffset;\n let byteSize;\n let buffer;\n if (bufferOrParams instanceof Buffer === false) {\n buffer = bufferOrParams.buffer;\n byteSize = bufferOrParams.byteSize;\n byteOffset = bufferOrParams.byteOffset;\n } else {\n buffer = bufferOrParams;\n }\n // to use bindBufferRange, either offset or size must be specified, use default value for the other.\n if (byteOffset !== undefined || byteSize !== undefined) {\n byteOffset = byteOffset || 0;\n byteSize = byteSize || buffer.byteLength - byteOffset;\n }\n return {buffer, byteOffset, byteSize};\n }\n\n _getVaryingInfo(locationOrName) {\n return this.configuration && this.configuration.getVaryingInfo(locationOrName);\n }\n\n _getVaryingIndex(locationOrName) {\n if (this.configuration) {\n return this.configuration.getVaryingInfo(locationOrName).location;\n }\n const location = Number(locationOrName);\n return Number.isFinite(location) ? location : -1;\n }\n\n // Need to avoid chrome bug where buffer that is already bound to a different target\n // cannot be bound to 'TRANSFORM_FEEDBACK_BUFFER' target.\n _bindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n const {buffer, byteSize, byteOffset} = this._getBufferParams(this.buffers[bufferIndex]);\n this._bindBuffer(bufferIndex, buffer, byteOffset, byteSize);\n }\n }\n }\n\n _unbindBuffers() {\n if (this.bindOnUse) {\n for (const bufferIndex in this.buffers) {\n this._bindBuffer(bufferIndex, null);\n }\n }\n }\n\n _bindBuffer(index, buffer, byteOffset = 0, byteSize) {\n const handle = buffer && buffer.handle;\n if (!handle || byteSize === undefined) {\n // @ts-ignore\n this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);\n } else {\n // @ts-ignore\n this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteSize);\n }\n return this;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n // @ts-ignore\n return this.gl.createTransformFeedback();\n }\n\n _deleteHandle() {\n // @ts-ignore\n this.gl.deleteTransformFeedback(this.handle);\n }\n\n _bindHandle(handle) {\n // @ts-ignore\n this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);\n }\n}\n"],"file":"transform-feedback.js"}
|
|
@@ -6,6 +6,10 @@ import { assert } from '../utils/assert';
|
|
|
6
6
|
import { getBrowser } from 'probe.gl';
|
|
7
7
|
const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
|
|
8
8
|
export default class VertexArrayObject extends Resource {
|
|
9
|
+
get [Symbol.toStringTag]() {
|
|
10
|
+
return 'VertexArrayObject';
|
|
11
|
+
}
|
|
12
|
+
|
|
9
13
|
static isSupported(gl, options = {}) {
|
|
10
14
|
if (options.constantAttributeZero) {
|
|
11
15
|
return isWebGL2(gl) || getBrowser() === 'Chrome';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/vertex-array-object.js"],"names":["Resource","Buffer","isWebGL2","getScratchArray","fillArray","assert","getBrowser","ERR_ELEMENTS","VertexArrayObject","isSupported","gl","options","constantAttributeZero","getDefaultArray","luma","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","Object","assign","buffer","bufferValue","gl2","initialize","seal","delete","props","setProps","setElementBuffer","elementBuffer","target","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","getVertexAttribOffset","getVertexAttrib"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils/assert';\nimport {getBrowser} from 'probe.gl';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\nexport default class VertexArrayObject extends Resource {\n static isSupported(gl, options = {}) {\n // Attribute 0 can not be disable on most desktop OpenGL based browsers\n // and on iOS Safari browser.\n if (options.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n // Returns the global (null) vertex array object. Exists even when no extension available\n // TODO(Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n static getDefaultArray(gl) {\n gl.luma = gl.luma || {};\n if (!gl.luma.defaultVertexArray) {\n gl.luma.defaultVertexArray = new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n }\n return gl.luma.defaultVertexArray;\n }\n\n static getMaxAttributes(gl) {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n // Note: Constants are stored globally on the WebGL context, not the VAO\n // So they need to be updated before every render\n // TODO - use known type (in configuration or passed in) to allow non-typed arrays?\n // TODO - remember/cache values to avoid setting them unnecessarily?\n static setConstant(gl, location, array) {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(gl, location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(gl, location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // Create a VertexArray\n constructor(gl, opts = {}) {\n // Use program's id if program but no id is supplied\n const id = opts.id || (opts.program && opts.program.id);\n super(gl, Object.assign({}, opts, {id}));\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts.isDefaultArray || false;\n\n /** @type {WebGL2RenderingContext} */\n this.gl2 = gl;\n\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n delete() {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES() {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n initialize(props = {}) {\n return this.setProps(props);\n }\n\n setProps(props) {\n // TODO: decide which props should be supported\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n // Set a location in vertex attributes array to a bufferk, enables the location, sets divisor\n setBuffer(location, buffer, accessor) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n // Enabling an attribute location makes it reference the currently bound buffer\n // Disabling an attribute location makes it reference the global constant value\n // TODO - handle single values for size 1 attributes?\n // TODO - convert classic arrays based on known type?\n enable(location, enable = true) {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(\n () =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n // Provide a means to create a buffer that is equivalent to a constant.\n // NOTE: Desktop OpenGL cannot disable attribute 0.\n // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n // this-has-significant-performance-penalt\n getConstantBuffer(elementCount, value) {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl, location, array) {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1iv(location, array);\n break;\n case 2:\n gl.vertexAttribI2iv(location, array);\n break;\n case 3:\n gl.vertexAttribI3iv(location, array);\n break;\n case 4:\n gl.vertexAttribI4iv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantUintArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1uiv(location, array);\n break;\n case 2:\n gl.vertexAttribI2uiv(location, array);\n break;\n case 3:\n gl.vertexAttribI3uiv(location, array);\n break;\n case 4:\n gl.vertexAttribI4uiv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n /** @type {WebGL2RenderingContext} */\n // @ts-ignore\n const gl2 = this.gl;\n return gl2.createVertexArray();\n }\n\n _deleteHandle(handle) {\n this.gl2.deleteVertexArray(handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle) {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/vertex-array-object.js"],"names":["Resource","Buffer","isWebGL2","getScratchArray","fillArray","assert","getBrowser","ERR_ELEMENTS","VertexArrayObject","Symbol","toStringTag","isSupported","gl","options","constantAttributeZero","getDefaultArray","luma","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","Object","assign","buffer","bufferValue","gl2","initialize","seal","delete","props","setProps","setElementBuffer","elementBuffer","target","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","Number","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI1iv","vertexAttribI2iv","vertexAttribI3iv","vertexAttribI4iv","vertexAttribI1uiv","vertexAttribI2uiv","vertexAttribI3uiv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","getVertexAttribOffset","getVertexAttrib"],"mappings":"AACA,OAAOA,QAAP,MAAqB,YAArB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AACA,SAAQC,QAAR,QAAuB,kBAAvB;AACA,SAAQC,eAAR,EAAyBC,SAAzB,QAAyC,2BAAzC;AACA,SAAQC,MAAR,QAAqB,iBAArB;AACA,SAAQC,UAAR,QAAyB,UAAzB;AAEA,MAAMC,YAAY,GAAG,0CAArB;AAEA,eAAe,MAAMC,iBAAN,SAAgCR,QAAhC,CAAyC;AAEtD,OAAKS,MAAM,CAACC,WAAZ,IAA2B;AACzB,WAAO,mBAAP;AACD;;AACD,SAAOC,WAAP,CAAmBC,EAAnB,EAAuBC,OAAO,GAAG,EAAjC,EAAqC;AAGnC,QAAIA,OAAO,CAACC,qBAAZ,EAAmC;AACjC,aAAOZ,QAAQ,CAACU,EAAD,CAAR,IAAgBN,UAAU,OAAO,QAAxC;AACD;;AAGD,WAAO,IAAP;AACD;;AAID,SAAOS,eAAP,CAAuBH,EAAvB,EAA2B;AACzBA,IAAAA,EAAE,CAACI,IAAH,GAAUJ,EAAE,CAACI,IAAH,IAAW,EAArB;;AACA,QAAI,CAACJ,EAAE,CAACI,IAAH,CAAQC,kBAAb,EAAiC;AAC/BL,MAAAA,EAAE,CAACI,IAAH,CAAQC,kBAAR,GAA6B,IAAIT,iBAAJ,CAAsBI,EAAtB,EAA0B;AAACM,QAAAA,MAAM,EAAE,IAAT;AAAeC,QAAAA,cAAc,EAAE;AAA/B,OAA1B,CAA7B;AACD;;AACD,WAAOP,EAAE,CAACI,IAAH,CAAQC,kBAAf;AACD;;AAED,SAAOG,gBAAP,CAAwBR,EAAxB,EAA4B;AAG1BJ,IAAAA,iBAAiB,CAACa,cAAlB,GAEEb,iBAAiB,CAACa,cAAlB,IAAoCT,EAAE,CAACU,YAAH,OAFtC;AAIA,WAAOd,iBAAiB,CAACa,cAAzB;AACD;;AAMD,SAAOE,WAAP,CAAmBX,EAAnB,EAAuBY,QAAvB,EAAiCC,KAAjC,EAAwC;AACtC,YAAQA,KAAK,CAACC,WAAd;AACE,WAAKC,YAAL;AACEnB,QAAAA,iBAAiB,CAACoB,sBAAlB,CAAyChB,EAAzC,EAA6CY,QAA7C,EAAuDC,KAAvD;;AACA;;AACF,WAAKI,UAAL;AACErB,QAAAA,iBAAiB,CAACsB,oBAAlB,CAAuClB,EAAvC,EAA2CY,QAA3C,EAAqDC,KAArD;;AACA;;AACF,WAAKM,WAAL;AACEvB,QAAAA,iBAAiB,CAACwB,qBAAlB,CAAwCpB,EAAxC,EAA4CY,QAA5C,EAAsDC,KAAtD;;AACA;;AACF;AACEpB,QAAAA,MAAM,CAAC,KAAD,CAAN;AAXJ;AAaD;;AAGDqB,EAAAA,WAAW,CAACd,EAAD,EAAKqB,IAAI,GAAG,EAAZ,EAAgB;AAEzB,UAAMC,EAAE,GAAGD,IAAI,CAACC,EAAL,IAAYD,IAAI,CAACE,OAAL,IAAgBF,IAAI,CAACE,OAAL,CAAaD,EAApD;AACA,UAAMtB,EAAN,EAAUwB,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBJ,IAAlB,EAAwB;AAACC,MAAAA;AAAD,KAAxB,CAAV;AAEA,SAAKI,MAAL,GAAc,IAAd;AACA,SAAKC,WAAL,GAAmB,IAAnB;AACA,SAAKpB,cAAL,GAAsBc,IAAI,CAACd,cAAL,IAAuB,KAA7C;AAGA,SAAKqB,GAAL,GAAW5B,EAAX;AAEA,SAAK6B,UAAL,CAAgBR,IAAhB;AAEAG,IAAAA,MAAM,CAACM,IAAP,CAAY,IAAZ;AACD;;AAEDC,EAAAA,MAAM,GAAG;AACP,UAAMA,MAAN;;AACA,QAAI,KAAKL,MAAT,EAAiB;AACf,WAAKA,MAAL,CAAYK,MAAZ;AACD;;AACD,WAAO,IAAP;AACD;;AAED,MAAItB,cAAJ,GAAqB;AACnB,WAAOb,iBAAiB,CAACY,gBAAlB,CAAmC,KAAKR,EAAxC,CAAP;AACD;;AAED6B,EAAAA,UAAU,CAACG,KAAK,GAAG,EAAT,EAAa;AACrB,WAAO,KAAKC,QAAL,CAAcD,KAAd,CAAP;AACD;;AAEDC,EAAAA,QAAQ,CAACD,KAAD,EAAQ;AAEd,WAAO,IAAP;AACD;;AAIDE,EAAAA,gBAAgB,CAACC,aAAa,GAAG,IAAjB,EAAuBd,IAAI,GAAG,EAA9B,EAAkC;AAChD5B,IAAAA,MAAM,CAAC,CAAC0C,aAAD,IAAkBA,aAAa,CAACC,MAAd,UAAnB,EAAqEzC,YAArE,CAAN;AAGA,SAAK0C,IAAL,CAAU,MAAM;AACd,WAAKrC,EAAL,CAAQsC,UAAR,QAA4CH,aAAa,GAAGA,aAAa,CAAC7B,MAAjB,GAA0B,IAAnF;AACD,KAFD;AAIA,WAAO,IAAP;AACD;;AAGDiC,EAAAA,SAAS,CAAC3B,QAAD,EAAWc,MAAX,EAAmBc,QAAnB,EAA6B;AAEpC,QAAId,MAAM,CAACU,MAAP,UAAJ,EAA+C;AAC7C,aAAO,KAAKF,gBAAL,CAAsBR,MAAtB,EAA8Bc,QAA9B,CAAP;AACD;;AAED,UAAM;AAACC,MAAAA,IAAD;AAAOC,MAAAA,IAAP;AAAaC,MAAAA,MAAb;AAAqBC,MAAAA,MAArB;AAA6BC,MAAAA,UAA7B;AAAyCC,MAAAA,OAAzC;AAAkDC,MAAAA;AAAlD,QAA6DP,QAAnE;AAEA,UAAM;AAACxC,MAAAA,EAAD;AAAK4B,MAAAA;AAAL,QAAY,IAAlB;AACAhB,IAAAA,QAAQ,GAAGoC,MAAM,CAACpC,QAAD,CAAjB;AAEA,SAAKyB,IAAL,CAAU,MAAM;AAEdrC,MAAAA,EAAE,CAACsC,UAAH,QAA+BZ,MAAM,CAACpB,MAAtC;;AAGA,UAAIwC,OAAJ,EAAa;AACXrD,QAAAA,MAAM,CAACH,QAAQ,CAACU,EAAD,CAAT,CAAN;AACA4B,QAAAA,GAAG,CAACqB,oBAAJ,CAAyBrC,QAAzB,EAAmC6B,IAAnC,EAAyCC,IAAzC,EAA+CC,MAA/C,EAAuDC,MAAvD;AACD,OAHD,MAGO;AAEL5C,QAAAA,EAAE,CAACkD,mBAAH,CAAuBtC,QAAvB,EAAiC6B,IAAjC,EAAuCC,IAAvC,EAA6CG,UAA7C,EAAyDF,MAAzD,EAAiEC,MAAjE;AACD;;AACD5C,MAAAA,EAAE,CAACmD,uBAAH,CAA2BvC,QAA3B;AACAgB,MAAAA,GAAG,CAACwB,mBAAJ,CAAwBxC,QAAxB,EAAkCmC,OAAO,IAAI,CAA7C;AAGD,KAhBD;AAkBA,WAAO,IAAP;AACD;;AAMDM,EAAAA,MAAM,CAACzC,QAAD,EAAWyC,MAAM,GAAG,IAApB,EAA0B;AAE9B,UAAMC,sBAAsB,GAC1B,CAACD,MAAD,IACAzC,QAAQ,KAAK,CADb,IAEA,CAAChB,iBAAiB,CAACG,WAAlB,CAA8B,KAAKC,EAAnC,EAAuC;AAACE,MAAAA,qBAAqB,EAAE;AAAxB,KAAvC,CAHH;;AAKA,QAAI,CAACoD,sBAAL,EAA6B;AAC3B1C,MAAAA,QAAQ,GAAGoC,MAAM,CAACpC,QAAD,CAAjB;AACA,WAAKyB,IAAL,CACE,MACEgB,MAAM,GACF,KAAKrD,EAAL,CAAQmD,uBAAR,CAAgCvC,QAAhC,CADE,GAEF,KAAKZ,EAAL,CAAQuD,wBAAR,CAAiC3C,QAAjC,CAJR;AAMD;;AACD,WAAO,IAAP;AACD;;AAMD4C,EAAAA,iBAAiB,CAACC,YAAD,EAAeC,KAAf,EAAsB;AAGrC,UAAMC,aAAa,GAAG,KAAKC,4BAAL,CAAkCF,KAAlC,CAAtB;;AAEA,UAAMG,UAAU,GAAGF,aAAa,CAACE,UAAd,GAA2BJ,YAA9C;AACA,UAAMK,MAAM,GAAGH,aAAa,CAACG,MAAd,GAAuBL,YAAtC;AAEA,QAAIM,YAAY,GAAG,CAAC,KAAKrC,MAAzB;AAEA,SAAKA,MAAL,GAAc,KAAKA,MAAL,IAAe,IAAIrC,MAAJ,CAAW,KAAKW,EAAhB,EAAoB6D,UAApB,CAA7B;AACAE,IAAAA,YAAY,GAAGA,YAAY,IAAI,KAAKrC,MAAL,CAAYsC,UAAZ,CAAuBH,UAAvB,CAA/B;AAGAE,IAAAA,YAAY,GACVA,YAAY,IAAI,CAAC,KAAKE,2BAAL,CAAiCN,aAAjC,EAAgD,KAAKhC,WAArD,CADnB;;AAGA,QAAIoC,YAAJ,EAAkB;AAEhB,YAAMG,UAAU,GAAG3E,eAAe,CAACmE,KAAK,CAAC5C,WAAP,EAAoBgD,MAApB,CAAlC;AACAtE,MAAAA,SAAS,CAAC;AAAC4C,QAAAA,MAAM,EAAE8B,UAAT;AAAqBC,QAAAA,MAAM,EAAER,aAA7B;AAA4CS,QAAAA,KAAK,EAAE,CAAnD;AAAsDC,QAAAA,KAAK,EAAEP;AAA7D,OAAD,CAAT;AACA,WAAKpC,MAAL,CAAY4C,OAAZ,CAAoBJ,UAApB;AACA,WAAKvC,WAAL,GAAmB+B,KAAnB;AACD;;AAED,WAAO,KAAKhC,MAAZ;AACD;;AAMDkC,EAAAA,4BAA4B,CAACW,UAAD,EAAa;AACvC,QAAIC,KAAK,CAACC,OAAN,CAAcF,UAAd,CAAJ,EAA+B;AAC7B,aAAO,IAAIxD,YAAJ,CAAiBwD,UAAjB,CAAP;AACD;;AACD,WAAOA,UAAP;AACD;;AAEDN,EAAAA,2BAA2B,CAACS,EAAD,EAAKC,EAAL,EAAS;AAClC,QAAI,CAACD,EAAD,IAAO,CAACC,EAAR,IAAcD,EAAE,CAACZ,MAAH,KAAca,EAAE,CAACb,MAA/B,IAAyCY,EAAE,CAAC5D,WAAH,KAAmB6D,EAAE,CAAC7D,WAAnE,EAAgF;AAC9E,aAAO,KAAP;AACD;;AACD,SAAK,IAAI8D,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,EAAE,CAACZ,MAAvB,EAA+B,EAAEc,CAAjC,EAAoC;AAClC,UAAIF,EAAE,CAACE,CAAD,CAAF,KAAUD,EAAE,CAACC,CAAD,CAAhB,EAAqB;AACnB,eAAO,KAAP;AACD;AACF;;AACD,WAAO,IAAP;AACD;;AAED,SAAO5D,sBAAP,CAA8BhB,EAA9B,EAAkCY,QAAlC,EAA4CC,KAA5C,EAAmD;AACjD,YAAQA,KAAK,CAACiD,MAAd;AACE,WAAK,CAAL;AACE9D,QAAAA,EAAE,CAAC6E,eAAH,CAAmBjE,QAAnB,EAA6BC,KAA7B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAAC8E,eAAH,CAAmBlE,QAAnB,EAA6BC,KAA7B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAAC+E,eAAH,CAAmBnE,QAAnB,EAA6BC,KAA7B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAACgF,eAAH,CAAmBpE,QAAnB,EAA6BC,KAA7B;AACA;;AACF;AACEpB,QAAAA,MAAM,CAAC,KAAD,CAAN;AAdJ;AAgBD;;AAED,SAAOyB,oBAAP,CAA4BlB,EAA5B,EAAgCY,QAAhC,EAA0CC,KAA1C,EAAiD;AAC/CpB,IAAAA,MAAM,CAACH,QAAQ,CAACU,EAAD,CAAT,CAAN;;AACA,YAAQa,KAAK,CAACiD,MAAd;AACE,WAAK,CAAL;AACE9D,QAAAA,EAAE,CAACiF,gBAAH,CAAoBrE,QAApB,EAA8BC,KAA9B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAACkF,gBAAH,CAAoBtE,QAApB,EAA8BC,KAA9B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAACmF,gBAAH,CAAoBvE,QAApB,EAA8BC,KAA9B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAACoF,gBAAH,CAAoBxE,QAApB,EAA8BC,KAA9B;AACA;;AACF;AACEpB,QAAAA,MAAM,CAAC,KAAD,CAAN;AAdJ;AAgBD;;AAED,SAAO2B,qBAAP,CAA6BpB,EAA7B,EAAiCY,QAAjC,EAA2CC,KAA3C,EAAkD;AAChDpB,IAAAA,MAAM,CAACH,QAAQ,CAACU,EAAD,CAAT,CAAN;;AACA,YAAQa,KAAK,CAACiD,MAAd;AACE,WAAK,CAAL;AACE9D,QAAAA,EAAE,CAACqF,iBAAH,CAAqBzE,QAArB,EAA+BC,KAA/B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAACsF,iBAAH,CAAqB1E,QAArB,EAA+BC,KAA/B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAACuF,iBAAH,CAAqB3E,QAArB,EAA+BC,KAA/B;AACA;;AACF,WAAK,CAAL;AACEb,QAAAA,EAAE,CAACwF,iBAAH,CAAqB5E,QAArB,EAA+BC,KAA/B;AACA;;AACF;AACEpB,QAAAA,MAAM,CAAC,KAAD,CAAN;AAdJ;AAgBD;;AAIDgG,EAAAA,aAAa,GAAG;AAGd,UAAM7D,GAAG,GAAG,KAAK5B,EAAjB;AACA,WAAO4B,GAAG,CAAC8D,iBAAJ,EAAP;AACD;;AAEDC,EAAAA,aAAa,CAACrF,MAAD,EAAS;AACpB,SAAKsB,GAAL,CAASgE,iBAAT,CAA2BtF,MAA3B;AAEA,WAAO,CAAC,KAAKuF,QAAN,CAAP;AAED;;AAEDC,EAAAA,WAAW,CAACxF,MAAD,EAAS;AAClB,SAAKsB,GAAL,CAASmE,eAAT,CAAyBzF,MAAzB;AACD;;AAGD0F,EAAAA,aAAa,CAACC,KAAD,EAAQ;AAACrF,IAAAA;AAAD,GAAR,EAAoB;AAC/BnB,IAAAA,MAAM,CAACuD,MAAM,CAACkD,QAAP,CAAgBtF,QAAhB,CAAD,CAAN;AACA,WAAO,KAAKyB,IAAL,CAAU,MAAM;AACrB,cAAQ4D,KAAR;AACE;AACE,iBAAO,KAAKjG,EAAL,CAAQmG,qBAAR,CAA8BvF,QAA9B,EAAwCqF,KAAxC,CAAP;;AACF;AACE,iBAAO,KAAKjG,EAAL,CAAQoG,eAAR,CAAwBxF,QAAxB,EAAkCqF,KAAlC,CAAP;AAJJ;AAMD,KAPM,CAAP;AAQD;;AArTqD","sourcesContent":["import GL from '@luma.gl/constants';\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {isWebGL2} from '@luma.gl/gltools';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils/assert';\nimport {getBrowser} from 'probe.gl';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\nexport default class VertexArrayObject extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'VertexArrayObject';\n }\n static isSupported(gl, options = {}) {\n // Attribute 0 can not be disable on most desktop OpenGL based browsers\n // and on iOS Safari browser.\n if (options.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n // Returns the global (null) vertex array object. Exists even when no extension available\n // TODO(Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n static getDefaultArray(gl) {\n gl.luma = gl.luma || {};\n if (!gl.luma.defaultVertexArray) {\n gl.luma.defaultVertexArray = new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n }\n return gl.luma.defaultVertexArray;\n }\n\n static getMaxAttributes(gl) {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n // Note: Constants are stored globally on the WebGL context, not the VAO\n // So they need to be updated before every render\n // TODO - use known type (in configuration or passed in) to allow non-typed arrays?\n // TODO - remember/cache values to avoid setting them unnecessarily?\n static setConstant(gl, location, array) {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(gl, location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(gl, location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // Create a VertexArray\n constructor(gl, opts = {}) {\n // Use program's id if program but no id is supplied\n const id = opts.id || (opts.program && opts.program.id);\n super(gl, Object.assign({}, opts, {id}));\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts.isDefaultArray || false;\n\n /** @type {WebGL2RenderingContext} */\n this.gl2 = gl;\n\n this.initialize(opts);\n\n Object.seal(this);\n }\n\n delete() {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES() {\n return VertexArrayObject.getMaxAttributes(this.gl);\n }\n\n initialize(props = {}) {\n return this.setProps(props);\n }\n\n setProps(props) {\n // TODO: decide which props should be supported\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n // Set a location in vertex attributes array to a bufferk, enables the location, sets divisor\n setBuffer(location, buffer, accessor) {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n // Enabling an attribute location makes it reference the currently bound buffer\n // Disabling an attribute location makes it reference the global constant value\n // TODO - handle single values for size 1 attributes?\n // TODO - convert classic arrays based on known type?\n enable(location, enable = true) {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(\n () =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n // Provide a means to create a buffer that is equivalent to a constant.\n // NOTE: Desktop OpenGL cannot disable attribute 0.\n // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n // this-has-significant-performance-penalt\n getConstantBuffer(elementCount, value) {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2) {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl, location, array) {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1iv(location, array);\n break;\n case 2:\n gl.vertexAttribI2iv(location, array);\n break;\n case 3:\n gl.vertexAttribI3iv(location, array);\n break;\n case 4:\n gl.vertexAttribI4iv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantUintArray(gl, location, array) {\n assert(isWebGL2(gl));\n switch (array.length) {\n case 1:\n gl.vertexAttribI1uiv(location, array);\n break;\n case 2:\n gl.vertexAttribI2uiv(location, array);\n break;\n case 3:\n gl.vertexAttribI3uiv(location, array);\n break;\n case 4:\n gl.vertexAttribI4uiv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n /** @type {WebGL2RenderingContext} */\n // @ts-ignore\n const gl2 = this.gl;\n return gl2.createVertexArray();\n }\n\n _deleteHandle(handle) {\n this.gl2.deleteVertexArray(handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle) {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
|
package/dist/esm/init.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { log } from '@luma.gl/gltools';
|
|
2
2
|
import { Stats } from 'probe.gl';
|
|
3
3
|
import { isBrowser } from '@probe.gl/env';
|
|
4
|
-
const VERSION = typeof "8.5.
|
|
4
|
+
const VERSION = typeof "8.5.14" !== 'undefined' ? "8.5.14" : 'untranspiled source';
|
|
5
5
|
const STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';
|
|
6
6
|
|
|
7
7
|
class StatsManager {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luma.gl/webgl",
|
|
3
|
-
"version": "8.5.
|
|
3
|
+
"version": "8.5.14",
|
|
4
4
|
"description": "WebGL2 Classes",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -35,10 +35,10 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@babel/runtime": "^7.0.0",
|
|
38
|
-
"@luma.gl/constants": "8.5.
|
|
39
|
-
"@luma.gl/gltools": "8.5.
|
|
38
|
+
"@luma.gl/constants": "8.5.14",
|
|
39
|
+
"@luma.gl/gltools": "8.5.14",
|
|
40
40
|
"@probe.gl/env": "^3.5.0",
|
|
41
41
|
"probe.gl": "^3.4.0"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "1a28c0572d27f06fb6427c7ad72bc1ac7a37c747"
|
|
44
44
|
}
|
package/src/classes/buffer.js
CHANGED
|
@@ -13,6 +13,10 @@ import {assert} from '../utils/assert';
|
|
|
13
13
|
const ERR_MULTIPLE_RENDERTARGETS = 'Multiple render targets not supported';
|
|
14
14
|
|
|
15
15
|
export default class Framebuffer extends Resource {
|
|
16
|
+
// eslint-disable-next-line accessor-pairs
|
|
17
|
+
get [Symbol.toStringTag]() {
|
|
18
|
+
return 'Framebuffer';
|
|
19
|
+
}
|
|
16
20
|
static isSupported(gl, options = {}) {
|
|
17
21
|
const {
|
|
18
22
|
colorBufferFloat, // Whether floating point textures can be rendered and read
|
package/src/classes/program.js
CHANGED
package/src/classes/query.js
CHANGED
|
@@ -15,6 +15,10 @@ const GL_ANY_SAMPLES_PASSED = 0x8c2f; // Occlusion query (if drawing passed dept
|
|
|
15
15
|
const GL_ANY_SAMPLES_PASSED_CONSERVATIVE = 0x8d6a; // Occlusion query less accurate/faster version
|
|
16
16
|
|
|
17
17
|
export default class Query extends Resource {
|
|
18
|
+
// eslint-disable-next-line accessor-pairs
|
|
19
|
+
get [Symbol.toStringTag]() {
|
|
20
|
+
return 'Query';
|
|
21
|
+
}
|
|
18
22
|
// Returns true if Query is supported by the WebGL implementation
|
|
19
23
|
// Can also check whether timestamp queries are available.
|
|
20
24
|
static isSupported(gl, opts = []) {
|
|
@@ -18,6 +18,10 @@ function isFormatSupported(gl, format, formats) {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export default class Renderbuffer extends Resource {
|
|
21
|
+
// eslint-disable-next-line accessor-pairs
|
|
22
|
+
get [Symbol.toStringTag]() {
|
|
23
|
+
return 'Renderbuffer';
|
|
24
|
+
}
|
|
21
25
|
static isSupported(gl, {format} = {format: null}) {
|
|
22
26
|
return !format || isFormatSupported(gl, format, RENDERBUFFER_FORMATS);
|
|
23
27
|
}
|
package/src/classes/resource.js
CHANGED
|
@@ -13,6 +13,10 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
|
|
|
13
13
|
// }
|
|
14
14
|
|
|
15
15
|
export default class Resource {
|
|
16
|
+
// eslint-disable-next-line accessor-pairs
|
|
17
|
+
get [Symbol.toStringTag]() {
|
|
18
|
+
return 'Resource';
|
|
19
|
+
}
|
|
16
20
|
constructor(gl, opts = {}) {
|
|
17
21
|
assertWebGLContext(gl);
|
|
18
22
|
|
|
@@ -21,7 +25,7 @@ export default class Resource {
|
|
|
21
25
|
// @ts-ignore
|
|
22
26
|
this.gl2 = gl;
|
|
23
27
|
// this.ext = polyfillContext(gl);
|
|
24
|
-
this.id = id || uid(this.
|
|
28
|
+
this.id = id || uid(this[Symbol.toStringTag]);
|
|
25
29
|
this.userData = userData;
|
|
26
30
|
this._bound = false;
|
|
27
31
|
|
|
@@ -44,7 +48,7 @@ export default class Resource {
|
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
toString() {
|
|
47
|
-
return `${this.constructor.name}(${this.id})`;
|
|
51
|
+
return `${this[Symbol.toStringTag] || this.constructor.name}(${this.id})`;
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
get handle() {
|
|
@@ -275,7 +279,7 @@ export default class Resource {
|
|
|
275
279
|
}
|
|
276
280
|
|
|
277
281
|
_addStats() {
|
|
278
|
-
const name = this.
|
|
282
|
+
const name = this[Symbol.toStringTag];
|
|
279
283
|
const stats = lumaStats.get('Resource Counts');
|
|
280
284
|
|
|
281
285
|
stats.get('Resources Created').incrementCount();
|
|
@@ -284,13 +288,13 @@ export default class Resource {
|
|
|
284
288
|
}
|
|
285
289
|
|
|
286
290
|
_removeStats() {
|
|
287
|
-
const name = this.
|
|
291
|
+
const name = this[Symbol.toStringTag];
|
|
288
292
|
const stats = lumaStats.get('Resource Counts');
|
|
289
293
|
|
|
290
294
|
stats.get(`${name}s Active`).decrementCount();
|
|
291
295
|
}
|
|
292
296
|
|
|
293
|
-
_trackAllocatedMemory(bytes, name = this.
|
|
297
|
+
_trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {
|
|
294
298
|
const stats = lumaStats.get('Memory Usage');
|
|
295
299
|
|
|
296
300
|
stats.get('GPU Memory').addCount(bytes);
|
|
@@ -298,7 +302,7 @@ export default class Resource {
|
|
|
298
302
|
this.byteLength = bytes;
|
|
299
303
|
}
|
|
300
304
|
|
|
301
|
-
_trackDeallocatedMemory(name = this.
|
|
305
|
+
_trackDeallocatedMemory(name = this[Symbol.toStringTag]) {
|
|
302
306
|
const stats = lumaStats.get('Memory Usage');
|
|
303
307
|
|
|
304
308
|
stats.get('GPU Memory').subtractCount(this.byteLength);
|
package/src/classes/shader.js
CHANGED
|
@@ -9,6 +9,11 @@ const ERR_SOURCE = 'Shader: GLSL source code must be a JavaScript string';
|
|
|
9
9
|
|
|
10
10
|
// For now this is an internal class
|
|
11
11
|
export class Shader extends Resource {
|
|
12
|
+
// eslint-disable-next-line accessor-pairs
|
|
13
|
+
get [Symbol.toStringTag]() {
|
|
14
|
+
return 'Shader';
|
|
15
|
+
}
|
|
16
|
+
|
|
12
17
|
static getTypeName(shaderType) {
|
|
13
18
|
switch (shaderType) {
|
|
14
19
|
case GL.VERTEX_SHADER:
|
|
@@ -116,6 +121,11 @@ export class Shader extends Resource {
|
|
|
116
121
|
}
|
|
117
122
|
|
|
118
123
|
export class VertexShader extends Shader {
|
|
124
|
+
// eslint-disable-next-line accessor-pairs
|
|
125
|
+
get [Symbol.toStringTag]() {
|
|
126
|
+
return 'VertexShader';
|
|
127
|
+
}
|
|
128
|
+
|
|
119
129
|
constructor(gl, props) {
|
|
120
130
|
// Signature: new VertexShader(gl, source)
|
|
121
131
|
if (typeof props === 'string') {
|
|
@@ -131,6 +141,10 @@ export class VertexShader extends Shader {
|
|
|
131
141
|
}
|
|
132
142
|
|
|
133
143
|
export class FragmentShader extends Shader {
|
|
144
|
+
// eslint-disable-next-line accessor-pairs
|
|
145
|
+
get [Symbol.toStringTag]() {
|
|
146
|
+
return 'FragmentShader';
|
|
147
|
+
}
|
|
134
148
|
constructor(gl, props) {
|
|
135
149
|
// Signature: new FragmentShader(gl, source)
|
|
136
150
|
if (typeof props === 'string') {
|
|
@@ -4,6 +4,11 @@ import Texture from './texture';
|
|
|
4
4
|
import {loadImage} from '../utils/load-file';
|
|
5
5
|
|
|
6
6
|
export default class Texture2D extends Texture {
|
|
7
|
+
// eslint-disable-next-line accessor-pairs
|
|
8
|
+
get [Symbol.toStringTag]() {
|
|
9
|
+
return 'Texture2D';
|
|
10
|
+
}
|
|
11
|
+
|
|
7
12
|
static isSupported(gl, opts) {
|
|
8
13
|
return Texture.isSupported(gl, opts);
|
|
9
14
|
}
|
|
@@ -5,6 +5,11 @@ import {DATA_FORMAT_CHANNELS, TYPE_SIZES} from './texture-formats';
|
|
|
5
5
|
import Buffer from './buffer';
|
|
6
6
|
|
|
7
7
|
export default class Texture3D extends Texture {
|
|
8
|
+
// eslint-disable-next-line accessor-pairs
|
|
9
|
+
get [Symbol.toStringTag]() {
|
|
10
|
+
return 'Texture3D';
|
|
11
|
+
}
|
|
12
|
+
|
|
8
13
|
static isSupported(gl) {
|
|
9
14
|
return isWebGL2(gl);
|
|
10
15
|
}
|
package/src/classes/texture.js
CHANGED
|
@@ -21,6 +21,10 @@ const NPOT_MIN_FILTERS = [GL.LINEAR, GL.NEAREST];
|
|
|
21
21
|
const WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};
|
|
22
22
|
|
|
23
23
|
export default class Texture extends Resource {
|
|
24
|
+
// eslint-disable-next-line accessor-pairs
|
|
25
|
+
get [Symbol.toStringTag]() {
|
|
26
|
+
return 'Texture';
|
|
27
|
+
}
|
|
24
28
|
static isSupported(gl, opts = {}) {
|
|
25
29
|
const {format, linearFiltering} = opts;
|
|
26
30
|
let supported = true;
|
|
@@ -309,6 +313,8 @@ export default class Texture extends Resource {
|
|
|
309
313
|
|
|
310
314
|
let gl2;
|
|
311
315
|
|
|
316
|
+
let compressedTextureSize = 0;
|
|
317
|
+
|
|
312
318
|
withParameters(this.gl, parameters, () => {
|
|
313
319
|
switch (dataType) {
|
|
314
320
|
case 'null':
|
|
@@ -357,15 +363,17 @@ export default class Texture extends Resource {
|
|
|
357
363
|
border,
|
|
358
364
|
levelData.data
|
|
359
365
|
);
|
|
366
|
+
compressedTextureSize += levelData.levelSize;
|
|
360
367
|
}
|
|
361
|
-
|
|
362
368
|
break;
|
|
363
369
|
default:
|
|
364
370
|
assert(false, 'Unknown image data type');
|
|
365
371
|
}
|
|
366
372
|
});
|
|
367
373
|
|
|
368
|
-
if (
|
|
374
|
+
if (dataType === 'compressed') {
|
|
375
|
+
this._trackAllocatedMemory(compressedTextureSize, 'Texture');
|
|
376
|
+
} else if (data && data.byteLength) {
|
|
369
377
|
this._trackAllocatedMemory(data.byteLength, 'Texture');
|
|
370
378
|
} else {
|
|
371
379
|
// NOTE(Tarek): Default to RGBA bytes
|
|
@@ -8,6 +8,10 @@ import {isObjectEmpty} from '../utils/utils';
|
|
|
8
8
|
// See https://github.com/KhronosGroup/WebGL/issues/2346
|
|
9
9
|
|
|
10
10
|
export default class TransformFeedback extends Resource {
|
|
11
|
+
// eslint-disable-next-line accessor-pairs
|
|
12
|
+
get [Symbol.toStringTag]() {
|
|
13
|
+
return 'TransformFeedback';
|
|
14
|
+
}
|
|
11
15
|
static isSupported(gl) {
|
|
12
16
|
return isWebGL2(gl);
|
|
13
17
|
}
|
|
@@ -9,6 +9,10 @@ import {getBrowser} from 'probe.gl';
|
|
|
9
9
|
const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
|
|
10
10
|
|
|
11
11
|
export default class VertexArrayObject extends Resource {
|
|
12
|
+
// eslint-disable-next-line accessor-pairs
|
|
13
|
+
get [Symbol.toStringTag]() {
|
|
14
|
+
return 'VertexArrayObject';
|
|
15
|
+
}
|
|
12
16
|
static isSupported(gl, options = {}) {
|
|
13
17
|
// Attribute 0 can not be disable on most desktop OpenGL based browsers
|
|
14
18
|
// and on iOS Safari browser.
|