@luma.gl/webgl 8.5.15 → 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.
- package/dist/dist.js +692 -816
- package/dist/dist.min.js +1 -1
- package/dist/es5/classes/accessor.js +31 -33
- package/dist/es5/classes/accessor.js.map +1 -1
- package/dist/es5/classes/buffer.js +24 -26
- package/dist/es5/classes/buffer.js.map +1 -1
- package/dist/es5/classes/clear.js.map +1 -1
- package/dist/es5/classes/copy-and-blit.js +3 -3
- package/dist/es5/classes/copy-and-blit.js.map +1 -1
- package/dist/es5/classes/framebuffer.js +70 -72
- package/dist/es5/classes/framebuffer.js.map +1 -1
- package/dist/es5/classes/program-configuration.js.map +1 -1
- package/dist/es5/classes/program.js +11 -13
- package/dist/es5/classes/program.js.map +1 -1
- package/dist/es5/classes/query.js +47 -49
- package/dist/es5/classes/query.js.map +1 -1
- package/dist/es5/classes/renderbuffer.js +37 -39
- package/dist/es5/classes/renderbuffer.js.map +1 -1
- package/dist/es5/classes/resource.js +29 -32
- package/dist/es5/classes/resource.js.map +1 -1
- package/dist/es5/classes/shader.js +38 -44
- package/dist/es5/classes/shader.js.map +1 -1
- package/dist/es5/classes/texture-2d.js +16 -17
- package/dist/es5/classes/texture-2d.js.map +1 -1
- package/dist/es5/classes/texture-3d.js +15 -17
- package/dist/es5/classes/texture-3d.js.map +1 -1
- package/dist/es5/classes/texture-cube.js +10 -12
- package/dist/es5/classes/texture-cube.js.map +1 -1
- package/dist/es5/classes/texture-formats.js +1 -1
- package/dist/es5/classes/texture.js +24 -26
- package/dist/es5/classes/texture.js.map +1 -1
- package/dist/es5/classes/transform-feedback.js +16 -22
- package/dist/es5/classes/transform-feedback.js.map +1 -1
- package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
- package/dist/es5/classes/uniforms.js +2 -2
- package/dist/es5/classes/vertex-array-object.js +69 -71
- package/dist/es5/classes/vertex-array-object.js.map +1 -1
- package/dist/es5/classes/vertex-array.js.map +1 -1
- package/dist/es5/debug/debug-program-configuration.js +1 -1
- package/dist/es5/debug/debug-program-configuration.js.map +1 -1
- package/dist/es5/debug/debug-uniforms.js +1 -1
- package/dist/es5/debug/debug-vertex-array.js.map +1 -1
- package/dist/es5/features/features.js +2 -2
- package/dist/es5/features/index.js +16 -16
- package/dist/es5/features/limits.js +1 -1
- package/dist/es5/glsl-utils/format-glsl-error.js.map +1 -1
- package/dist/es5/glsl-utils/index.js +11 -7
- package/dist/es5/index.js +104 -104
- package/dist/es5/init.d.ts +1 -1
- package/dist/es5/init.js +4 -4
- package/dist/es5/init.js.map +1 -1
- package/dist/es5/utils/array-utils-flat.js +2 -2
- package/dist/es5/utils/check-props.js.map +1 -1
- package/dist/es5/utils/format-value.js.map +1 -1
- package/dist/es5/utils/load-file.js +1 -1
- package/dist/es5/utils/utils.js +2 -2
- package/dist/es5/webgl-utils/attribute-utils.js +3 -3
- package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/es5/webgl-utils/constants-to-keys.js +1 -1
- package/dist/es5/webgl-utils/get-error.js +1 -1
- package/dist/es5/webgl-utils/request-animation-frame.js +1 -1
- package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
- package/dist/es5/webgl-utils/typed-array-utils.js +1 -1
- package/dist/esm/classes/accessor.js +12 -3
- package/dist/esm/classes/accessor.js.map +1 -1
- package/dist/esm/classes/buffer.js +41 -28
- package/dist/esm/classes/buffer.js.map +1 -1
- package/dist/esm/classes/clear.js +14 -12
- package/dist/esm/classes/clear.js.map +1 -1
- package/dist/esm/classes/copy-and-blit.js +27 -21
- package/dist/esm/classes/copy-and-blit.js.map +1 -1
- package/dist/esm/classes/framebuffer.js +89 -64
- package/dist/esm/classes/framebuffer.js.map +1 -1
- package/dist/esm/classes/program.js +40 -32
- package/dist/esm/classes/program.js.map +1 -1
- package/dist/esm/classes/query.js +11 -6
- package/dist/esm/classes/query.js.map +1 -1
- package/dist/esm/classes/renderbuffer.js +25 -19
- package/dist/esm/classes/renderbuffer.js.map +1 -1
- package/dist/esm/classes/resource.js +39 -28
- package/dist/esm/classes/resource.js.map +1 -1
- package/dist/esm/classes/shader.js +13 -10
- package/dist/esm/classes/shader.js.map +1 -1
- package/dist/esm/classes/texture-2d.js +2 -1
- package/dist/esm/classes/texture-2d.js.map +1 -1
- package/dist/esm/classes/texture-3d.js +17 -14
- package/dist/esm/classes/texture-3d.js.map +1 -1
- package/dist/esm/classes/texture-cube.js +23 -19
- package/dist/esm/classes/texture-cube.js.map +1 -1
- package/dist/esm/classes/texture.js +47 -35
- package/dist/esm/classes/texture.js.map +1 -1
- package/dist/esm/classes/transform-feedback.js +12 -6
- package/dist/esm/classes/transform-feedback.js.map +1 -1
- package/dist/esm/classes/uniforms.js +6 -6
- package/dist/esm/classes/uniforms.js.map +1 -1
- package/dist/esm/classes/vertex-array-object.js +17 -9
- package/dist/esm/classes/vertex-array-object.js.map +1 -1
- package/dist/esm/classes/vertex-array.js +17 -7
- package/dist/esm/classes/vertex-array.js.map +1 -1
- package/dist/esm/debug/debug-program-configuration.js +4 -4
- package/dist/esm/debug/debug-program-configuration.js.map +1 -1
- package/dist/esm/debug/debug-uniforms.js +16 -14
- package/dist/esm/debug/debug-uniforms.js.map +1 -1
- package/dist/esm/debug/debug-vertex-array.js +16 -14
- package/dist/esm/debug/debug-vertex-array.js.map +1 -1
- package/dist/esm/features/check-glsl-extension.js +3 -2
- package/dist/esm/features/check-glsl-extension.js.map +1 -1
- package/dist/esm/features/check-old-ie.js +2 -1
- package/dist/esm/features/check-old-ie.js.map +1 -1
- package/dist/esm/features/features.js +1 -1
- package/dist/esm/features/features.js.map +1 -1
- package/dist/esm/features/webgl-features-table.js +1 -1
- package/dist/esm/features/webgl-features-table.js.map +1 -1
- package/dist/esm/glsl-utils/format-glsl-error.js +9 -7
- package/dist/esm/glsl-utils/format-glsl-error.js.map +1 -1
- package/dist/esm/glsl-utils/get-shader-name.js +2 -1
- package/dist/esm/glsl-utils/get-shader-name.js.map +1 -1
- package/dist/esm/init.d.ts +1 -1
- package/dist/esm/init.js +4 -4
- package/dist/esm/init.js.map +1 -1
- package/dist/esm/utils/array-utils-flat.js +7 -6
- package/dist/esm/utils/array-utils-flat.js.map +1 -1
- package/dist/esm/utils/check-props.js +4 -4
- package/dist/esm/utils/check-props.js.map +1 -1
- package/dist/esm/utils/format-value.js +4 -3
- package/dist/esm/utils/format-value.js.map +1 -1
- package/dist/esm/utils/is-old-ie.js +2 -1
- package/dist/esm/utils/is-old-ie.js.map +1 -1
- package/dist/esm/utils/load-file.js +3 -2
- package/dist/esm/utils/load-file.js.map +1 -1
- package/dist/esm/utils/stub-methods.js +2 -3
- package/dist/esm/utils/stub-methods.js.map +1 -1
- package/dist/esm/utils/utils.js +3 -2
- package/dist/esm/utils/utils.js.map +1 -1
- package/dist/esm/webgl-utils/attribute-utils.js +11 -8
- package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
- package/dist/esm/webgl-utils/constants-to-keys.js +3 -3
- package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
- package/dist/esm/webgl-utils/get-error.js +1 -1
- package/dist/esm/webgl-utils/get-error.js.map +1 -1
- package/dist/esm/webgl-utils/texture-utils.js +1 -1
- package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
- package/dist/esm/webgl-utils/typed-array-utils.js +19 -15
- package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
- package/package.json +5 -5
- package/src/classes/framebuffer.js +1 -0
- package/src/classes/resource.js +11 -19
- package/src/classes/transform-feedback.js +1 -1
- package/src/classes/vertex-array-object.js +1 -1
- package/src/init.d.ts +1 -1
- package/src/init.js +1 -1
- package/src/webgl-utils/texture-utils.js +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/texture.js"],"names":["isWebGL2","assertWebGL2Context","withParameters","log","Resource","Buffer","TEXTURE_FORMATS","DATA_FORMAT_CHANNELS","TYPE_SIZES","isFormatSupported","isLinearFilteringSupported","assert","uid","isPowerOfTwo","NPOT_MIN_FILTERS","WebGLBuffer","globalThis","Texture","Symbol","toStringTag","isSupported","gl","opts","format","linearFiltering","supported","constructor","props","id","handle","target","textureUnit","undefined","loaded","width","height","depth","type","dataFormat","border","mipmaps","toString","initialize","data","Promise","then","resolvedImageData","Object","assign","pixels","isVideo","HTMLVideoElement","readyState","HAVE_METADATA","_video","addEventListener","recreate","parameters","pixelStore","compressed","_deduceParameters","Number","isFinite","activeTexture","bindTexture","_isNPOT","warn","_updateForNPOT","setImageData","generateMipmap","setParameters","video","lastTime","HAVE_CURRENT_DATA","currentTime","update","setSubImageData","resize","params","options","_trackDeallocatedMemory","level","offset","dataType","_getDataType","gl2","compressedTextureSize","texImage2D","bindBuffer","levelIndex","levelData","entries","compressedTexImage2D","levelSize","_trackAllocatedMemory","byteLength","channels","channelSize","x","y","ndarray","shape","compressedTexSubImage2D","texSubImage2D","ArrayBuffer","isView","copyFramebuffer","error","getActiveUnit","getParameter","bind","unbind","textureFormat","types","_deduceImageSize","size","ImageData","HTMLImageElement","naturalWidth","naturalHeight","HTMLCanvasElement","ImageBitmap","videoWidth","videoHeight","_createHandle","createTexture","_deleteHandle","deleteTexture","_getParameter","pname","value","getTexParameter","_setParameter","param","_getNPOTParam","texParameterf","texParameteri","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","indexOf"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, withParameters, log} from '@luma.gl/gltools';\n\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {\n TEXTURE_FORMATS,\n DATA_FORMAT_CHANNELS,\n TYPE_SIZES,\n isFormatSupported,\n isLinearFilteringSupported\n} from './texture-formats';\nimport {assert} from '../utils/assert';\nimport {uid, isPowerOfTwo} from '../utils/utils';\n\n// Supported min filters for NPOT texture.\nconst NPOT_MIN_FILTERS = [GL.LINEAR, GL.NEAREST];\n\n// Polyfill\n// Note (Tarek): Do we really need to support this API?\nconst WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};\n\nexport default class Texture extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Texture';\n }\n static isSupported(gl, opts = {}) {\n const {format, linearFiltering} = opts;\n let supported = true;\n if (format) {\n supported = supported && isFormatSupported(gl, format);\n supported = supported && (!linearFiltering || isLinearFilteringSupported(gl, format));\n }\n return supported;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n constructor(gl, props) {\n const {\n id = uid('texture'),\n handle,\n target\n // , magFilter, minFilter, wrapS, wrapT\n } = props;\n\n super(gl, {id, handle});\n\n this.target = target;\n this.textureUnit = undefined;\n\n // Program.draw() checks the loaded flag of all textures to avoid\n // Textures that are still loading from promises\n // Set to true as soon as texture has been initialized with valid data\n this.loaded = false;\n\n this.width = undefined;\n this.height = undefined;\n this.depth = undefined;\n this.format = undefined;\n this.type = undefined;\n this.dataFormat = undefined;\n this.border = undefined;\n this.textureUnit = undefined;\n this.mipmaps = undefined;\n }\n\n toString() {\n return `Texture(${this.id},${this.width}x${this.height})`;\n }\n\n /* eslint-disable max-len, max-statements */\n initialize(props = {}) {\n let data = props.data;\n\n if (data instanceof Promise) {\n data.then(resolvedImageData =>\n this.initialize(\n Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })\n )\n );\n return this;\n }\n const isVideo = typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement;\n // @ts-ignore\n if (isVideo && data.readyState < HTMLVideoElement.HAVE_METADATA) {\n this._video = null; // Declare member before the object is sealed\n data.addEventListener('loadeddata', () => this.initialize(props));\n return this;\n }\n\n const {\n pixels = null,\n format = GL.RGBA,\n border = 0,\n recreate = false,\n parameters = {},\n pixelStore = {},\n textureUnit = undefined\n } = props;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n // TODO - This looks backwards? Commenting out for now until we decide\n // which prop to use\n // log.deprecated('data', 'pixels')();\n data = pixels;\n }\n\n let {width, height, dataFormat, type, compressed = false, mipmaps = true} = props;\n const {depth = 0} = props;\n\n // Deduce width and height\n ({width, height, compressed, dataFormat, type} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n // Store opts for accessors\n this.width = width;\n this.height = height;\n this.depth = depth;\n this.format = format;\n this.type = type;\n this.dataFormat = dataFormat;\n this.border = border;\n this.textureUnit = textureUnit;\n\n if (Number.isFinite(this.textureUnit)) {\n this.gl.activeTexture(GL.TEXTURE0 + this.textureUnit);\n this.gl.bindTexture(this.target, this.handle);\n }\n\n if (mipmaps && this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n mipmaps = false;\n\n this._updateForNPOT(parameters);\n }\n\n this.mipmaps = mipmaps;\n\n this.setImageData({\n data,\n width,\n height,\n depth,\n format,\n type,\n dataFormat,\n border,\n mipmaps,\n parameters: pixelStore,\n compressed\n });\n\n if (mipmaps) {\n this.generateMipmap();\n }\n\n // Set texture sampler parameters\n this.setParameters(parameters);\n\n // TODO - Store data to enable auto recreate on context loss\n if (recreate) {\n this.data = data;\n }\n if (isVideo) {\n this._video = {\n video: data,\n parameters,\n // @ts-ignore\n lastTime: data.readyState >= HTMLVideoElement.HAVE_CURRENT_DATA ? data.currentTime : -1\n };\n }\n\n return this;\n }\n\n update() {\n if (this._video) {\n const {video, parameters, lastTime} = this._video;\n // @ts-ignore\n if (lastTime === video.currentTime || video.readyState < HTMLVideoElement.HAVE_CURRENT_DATA) {\n return;\n }\n this.setSubImageData({\n data: video,\n parameters\n });\n if (this.mipmaps) {\n this.generateMipmap();\n }\n this._video.lastTime = video.currentTime;\n }\n }\n\n // If size has changed, reinitializes with current format\n // note clears image and mipmaps\n resize({height, width, mipmaps = false}) {\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n format: this.format,\n type: this.type,\n dataFormat: this.dataFormat,\n border: this.border,\n mipmaps\n });\n }\n return this;\n }\n\n // Call to regenerate mipmaps after modifying texture(s)\n generateMipmap(params = {}) {\n if (this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n return this;\n }\n\n this.mipmaps = true;\n\n this.gl.bindTexture(this.target, this.handle);\n withParameters(this.gl, params, () => {\n this.gl.generateMipmap(this.target);\n });\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n /*\n * Allocates storage\n * @param {*} pixels -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} width -\n * @param {GLint} height -\n * @param {GLint} mipMapLevel -\n * @param {GLenum} format - format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n /* eslint-disable max-len, max-statements, complexity */\n setImageData(options) {\n this._trackDeallocatedMemory('Texture');\n\n const {\n target = this.target,\n pixels = null,\n level = 0,\n format = this.format,\n border = this.border,\n offset = 0,\n parameters = {}\n } = options;\n\n let {\n data = null,\n type = this.type,\n width = this.width,\n height = this.height,\n dataFormat = this.dataFormat,\n compressed = false\n } = options;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n const {gl} = this;\n gl.bindTexture(this.target, this.handle);\n\n let dataType = null;\n ({data, dataType} = this._getDataType({data, compressed}));\n\n let gl2;\n\n let compressedTextureSize = 0;\n\n withParameters(this.gl, parameters, () => {\n switch (dataType) {\n case 'null':\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n break;\n case 'typed-array':\n // Looks like this assert is not necessary, as offset is ignored under WebGL1\n // assert((offset === 0 || isWebGL2(gl)), 'offset supported in WebGL2 only');\n // @ts-ignore\n gl.texImage2D(\n target,\n level,\n format,\n width,\n height,\n border,\n dataFormat,\n type,\n data,\n // @ts-ignore\n offset\n );\n break;\n case 'buffer':\n // WebGL2 enables creating textures directly from a WebGL buffer\n gl2 = assertWebGL2Context(gl);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);\n gl2.texImage2D(target, level, format, width, height, border, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n break;\n case 'browser-object':\n if (isWebGL2(gl)) {\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n } else {\n gl.texImage2D(target, level, format, dataFormat, type, data);\n }\n break;\n case 'compressed':\n for (const [levelIndex, levelData] of data.entries()) {\n gl.compressedTexImage2D(\n target,\n levelIndex,\n levelData.format,\n levelData.width,\n levelData.height,\n border,\n levelData.data\n );\n compressedTextureSize += levelData.levelSize;\n }\n break;\n default:\n assert(false, 'Unknown image data type');\n }\n });\n\n if (dataType === 'compressed') {\n this._trackAllocatedMemory(compressedTextureSize, 'Texture');\n } else if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(this.width * this.height * channels * channelSize, 'Texture');\n }\n\n this.loaded = true;\n\n return this;\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Redefines an area of an existing texture\n * Note: does not allocate storage\n */\n /*\n * Redefines an area of an existing texture\n * @param {*} pixels, data -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} x - xOffset from where texture to be updated\n * @param {GLint} y - yOffset from where texture to be updated\n * @param {GLint} width - width of the sub image to be updated\n * @param {GLint} height - height of the sub image to be updated\n * @param {GLint} level - mip level to be updated\n * @param {GLenum} format - internal format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer or ArrayBufferView\n * @param {GLenum} dataFormat - format of image data.\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n setSubImageData({\n target = this.target,\n pixels = null,\n data = null,\n x = 0,\n y = 0,\n width = this.width,\n height = this.height,\n level = 0,\n format = this.format,\n type = this.type,\n dataFormat = this.dataFormat,\n compressed = false,\n offset = 0,\n border = this.border,\n parameters = {}\n }) {\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n assert(this.depth === 0, 'texSubImage not supported for 3D textures');\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n // Support ndarrays\n if (data && data.data) {\n const ndarray = data;\n data = ndarray.data;\n width = ndarray.shape[0];\n height = ndarray.shape[1];\n }\n\n // Support buffers\n if (data instanceof Buffer) {\n data = data.handle;\n }\n\n this.gl.bindTexture(this.target, this.handle);\n\n withParameters(this.gl, parameters, () => {\n // TODO - x,y parameters\n if (compressed) {\n this.gl.compressedTexSubImage2D(target, level, x, y, width, height, format, data);\n } else if (data === null) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);\n } else if (ArrayBuffer.isView(data)) {\n // const gl2 = assertWebGL2Context(this.gl);\n // @ts-ignore last offset parameter is ignored under WebGL1\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);\n } else if (data instanceof WebGLBuffer) {\n // WebGL2 allows us to create texture directly from a WebGL buffer\n const gl2 = assertWebGL2Context(this.gl);\n // This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n } else if (isWebGL2(this.gl)) {\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n const gl2 = assertWebGL2Context(this.gl);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);\n } else {\n this.gl.texSubImage2D(target, level, x, y, dataFormat, type, data);\n }\n });\n\n this.gl.bindTexture(this.target, null);\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Defines a two-dimensional texture image or cube-map texture image with\n * pixels from the current framebuffer (rather than from client memory).\n * (gl.copyTexImage2D wrapper)\n *\n * Note that binding a texture into a Framebuffer's color buffer and\n * rendering can be faster.\n */\n copyFramebuffer(opts = {}) {\n log.error(\n 'Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})'\n )();\n return null;\n }\n\n getActiveUnit() {\n return this.gl.getParameter(GL.ACTIVE_TEXTURE) - GL.TEXTURE0;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n\n bind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, this.handle);\n return textureUnit;\n }\n\n unbind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, null);\n return textureUnit;\n }\n\n // PRIVATE METHODS\n\n _getDataType({data, compressed = false}) {\n if (compressed) {\n return {data, dataType: 'compressed'};\n }\n if (data === null) {\n return {data, dataType: 'null'};\n }\n if (ArrayBuffer.isView(data)) {\n return {data, dataType: 'typed-array'};\n }\n if (data instanceof Buffer) {\n return {data: data.handle, dataType: 'buffer'};\n }\n if (data instanceof WebGLBuffer) {\n return {data, dataType: 'buffer'};\n }\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n return {data, dataType: 'browser-object'};\n }\n\n /* Copied from texture-2d.js\n // WebGL2\n setPixels(opts = {}) {\n const {\n buffer,\n width = null,\n height = null,\n mipmapLevel = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n\n // This signature of texImage2D uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, buffer.target);\n // And as always, we must also bind the texture itself\n this.bind();\n\n gl.texImage2D(gl.TEXTURE_2D,\n mipmapLevel, format, width, height, border, format, type, buffer.target);\n\n this.unbind();\n gl.bindBuffer(GL.GL.PIXEL_UNPACK_BUFFER, null);\n return this;\n }\n\n setImageDataFromCompressedBuffer(opts) {\n const {\n buffer,\n // offset = 0,\n width = null,\n height = null,\n mipmapLevel = 0,\n internalFormat = GL.RGBA,\n // format = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n gl.compressedTexImage2D(this.target,\n mipmapLevel, internalFormat, width, height, border, buffer);\n // gl.compressedTexSubImage2D(target,\n // level, xoffset, yoffset, width, height, format, ArrayBufferView? pixels);\n return this;\n }\n\n copySubImage(opts) {\n const {\n // pixels,\n // offset = 0,\n // x,\n // y,\n // width,\n // height,\n // mipmapLevel = 0,\n // internalFormat = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n // border = 0\n } = opts;\n\n // if (pixels instanceof ArrayBufferView) {\n // gl.texSubImage2D(target, level, x, y, width, height, format, type, pixels);\n // }\n // gl.texSubImage2D(target, level, x, y, format, type, ? pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLImageElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLCanvasElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLVideoElement pixels);\n // // Additional signature in a WebGL 2 context:\n // gl.texSubImage2D(target, level, x, y, format, type, GLintptr offset);\n }\n */\n\n // HELPER METHODS\n\n _deduceParameters(opts) {\n const {format, data} = opts;\n let {width, height, dataFormat, type, compressed} = opts;\n\n // Deduce format and type from format\n const textureFormat = TEXTURE_FORMATS[format];\n dataFormat = dataFormat || (textureFormat && textureFormat.dataFormat);\n type = type || (textureFormat && textureFormat.types[0]);\n\n // Deduce compression from format\n compressed = compressed || (textureFormat && textureFormat.compressed);\n\n ({width, height} = this._deduceImageSize(data, width, height));\n\n return {dataFormat, type, compressed, width, height, format, data};\n }\n\n // eslint-disable-next-line complexity\n _deduceImageSize(data, width, height) {\n let size;\n\n if (typeof ImageData !== 'undefined' && data instanceof ImageData) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {\n size = {width: data.naturalWidth, height: data.naturalHeight};\n } else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {\n size = {width: data.width, height: data.height};\n } else if (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {\n size = {width: data.videoWidth, height: data.videoHeight};\n } else if (!data) {\n size = {width: width >= 0 ? width : 1, height: height >= 0 ? height : 1};\n } else {\n size = {width, height};\n }\n\n assert(size, 'Could not deduced texture size');\n assert(\n width === undefined || size.width === width,\n 'Deduced texture width does not match supplied width'\n );\n assert(\n height === undefined || size.height === height,\n 'Deduced texture height does not match supplied height'\n );\n\n return size;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createTexture();\n }\n\n _deleteHandle() {\n this.gl.deleteTexture(this.handle);\n this._trackDeallocatedMemory('Texture');\n }\n\n _getParameter(pname) {\n switch (pname) {\n case GL.TEXTURE_WIDTH:\n return this.width;\n case GL.TEXTURE_HEIGHT:\n return this.height;\n default:\n this.gl.bindTexture(this.target, this.handle);\n const value = this.gl.getTexParameter(this.target, pname);\n this.gl.bindTexture(this.target, null);\n return value;\n }\n }\n\n _setParameter(pname, param) {\n this.gl.bindTexture(this.target, this.handle);\n\n // NOTE: Apply NPOT workaround\n param = this._getNPOTParam(pname, param);\n\n // Apparently there are some integer/float conversion rules that made\n // the WebGL committe expose two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n switch (pname) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.gl.texParameterf(this.handle, pname, param);\n break;\n\n case GL.TEXTURE_WIDTH:\n case GL.TEXTURE_HEIGHT:\n assert(false);\n break;\n\n default:\n this.gl.texParameteri(this.target, pname, param);\n break;\n }\n\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n _isNPOT() {\n if (isWebGL2(this.gl)) {\n // NPOT restriction is only for WebGL1\n return false;\n }\n // Width and height not available, consider it is not NPOT texture\n if (!this.width || !this.height) {\n return false;\n }\n return !isPowerOfTwo(this.width) || !isPowerOfTwo(this.height);\n }\n\n // Update default settings which are not supported by NPOT textures.\n _updateForNPOT(parameters) {\n if (parameters[this.gl.TEXTURE_MIN_FILTER] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;\n }\n if (parameters[this.gl.TEXTURE_WRAP_S] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\n }\n if (parameters[this.gl.TEXTURE_WRAP_T] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_T to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\n }\n }\n\n _getNPOTParam(pname, param) {\n if (this._isNPOT()) {\n switch (pname) {\n case GL.TEXTURE_MIN_FILTER:\n if (NPOT_MIN_FILTERS.indexOf(param) === -1) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n param = GL.LINEAR;\n }\n break;\n case GL.TEXTURE_WRAP_S:\n case GL.TEXTURE_WRAP_T:\n if (param !== GL.CLAMP_TO_EDGE) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, ${getKey(this.gl, pname)} to CLAMP_TO_EDGE`)();\n param = GL.CLAMP_TO_EDGE;\n }\n break;\n default:\n break;\n }\n }\n return param;\n }\n}\n"],"file":"texture.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/texture.js"],"names":["isWebGL2","assertWebGL2Context","withParameters","log","Resource","Buffer","TEXTURE_FORMATS","DATA_FORMAT_CHANNELS","TYPE_SIZES","isFormatSupported","isLinearFilteringSupported","assert","uid","isPowerOfTwo","NPOT_MIN_FILTERS","WebGLBuffer","globalThis","Texture","Symbol","toStringTag","isSupported","gl","opts","format","linearFiltering","supported","constructor","props","id","handle","target","textureUnit","undefined","loaded","width","height","depth","type","dataFormat","border","mipmaps","toString","initialize","data","Promise","then","resolvedImageData","Object","assign","pixels","isVideo","HTMLVideoElement","readyState","HAVE_METADATA","_video","addEventListener","recreate","parameters","pixelStore","compressed","_deduceParameters","Number","isFinite","activeTexture","bindTexture","_isNPOT","warn","_updateForNPOT","setImageData","generateMipmap","setParameters","video","lastTime","HAVE_CURRENT_DATA","currentTime","update","setSubImageData","resize","params","options","_trackDeallocatedMemory","level","offset","dataType","_getDataType","gl2","compressedTextureSize","texImage2D","bindBuffer","levelIndex","levelData","entries","compressedTexImage2D","levelSize","_trackAllocatedMemory","byteLength","channels","channelSize","x","y","ndarray","shape","compressedTexSubImage2D","texSubImage2D","ArrayBuffer","isView","copyFramebuffer","error","getActiveUnit","getParameter","bind","unbind","textureFormat","types","_deduceImageSize","size","ImageData","HTMLImageElement","naturalWidth","naturalHeight","HTMLCanvasElement","ImageBitmap","videoWidth","videoHeight","_createHandle","createTexture","_deleteHandle","deleteTexture","_getParameter","pname","value","getTexParameter","_setParameter","param","_getNPOTParam","texParameterf","texParameteri","TEXTURE_MIN_FILTER","LINEAR","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","indexOf"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, withParameters, log} from '@luma.gl/gltools';\n\nimport Resource from './resource';\nimport Buffer from './buffer';\nimport {\n TEXTURE_FORMATS,\n DATA_FORMAT_CHANNELS,\n TYPE_SIZES,\n isFormatSupported,\n isLinearFilteringSupported\n} from './texture-formats';\nimport {assert} from '../utils/assert';\nimport {uid, isPowerOfTwo} from '../utils/utils';\n\n// Supported min filters for NPOT texture.\nconst NPOT_MIN_FILTERS = [GL.LINEAR, GL.NEAREST];\n\n// Polyfill\n// Note (Tarek): Do we really need to support this API?\nconst WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};\n\nexport default class Texture extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Texture';\n }\n static isSupported(gl, opts = {}) {\n const {format, linearFiltering} = opts;\n let supported = true;\n if (format) {\n supported = supported && isFormatSupported(gl, format);\n supported = supported && (!linearFiltering || isLinearFilteringSupported(gl, format));\n }\n return supported;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n constructor(gl, props) {\n const {\n id = uid('texture'),\n handle,\n target\n // , magFilter, minFilter, wrapS, wrapT\n } = props;\n\n super(gl, {id, handle});\n\n this.target = target;\n this.textureUnit = undefined;\n\n // Program.draw() checks the loaded flag of all textures to avoid\n // Textures that are still loading from promises\n // Set to true as soon as texture has been initialized with valid data\n this.loaded = false;\n\n this.width = undefined;\n this.height = undefined;\n this.depth = undefined;\n this.format = undefined;\n this.type = undefined;\n this.dataFormat = undefined;\n this.border = undefined;\n this.textureUnit = undefined;\n this.mipmaps = undefined;\n }\n\n toString() {\n return `Texture(${this.id},${this.width}x${this.height})`;\n }\n\n /* eslint-disable max-len, max-statements */\n initialize(props = {}) {\n let data = props.data;\n\n if (data instanceof Promise) {\n data.then(resolvedImageData =>\n this.initialize(\n Object.assign({}, props, {\n pixels: resolvedImageData,\n data: resolvedImageData\n })\n )\n );\n return this;\n }\n const isVideo = typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement;\n // @ts-ignore\n if (isVideo && data.readyState < HTMLVideoElement.HAVE_METADATA) {\n this._video = null; // Declare member before the object is sealed\n data.addEventListener('loadeddata', () => this.initialize(props));\n return this;\n }\n\n const {\n pixels = null,\n format = GL.RGBA,\n border = 0,\n recreate = false,\n parameters = {},\n pixelStore = {},\n textureUnit = undefined\n } = props;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n // TODO - This looks backwards? Commenting out for now until we decide\n // which prop to use\n // log.deprecated('data', 'pixels')();\n data = pixels;\n }\n\n let {width, height, dataFormat, type, compressed = false, mipmaps = true} = props;\n const {depth = 0} = props;\n\n // Deduce width and height\n ({width, height, compressed, dataFormat, type} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n // Store opts for accessors\n this.width = width;\n this.height = height;\n this.depth = depth;\n this.format = format;\n this.type = type;\n this.dataFormat = dataFormat;\n this.border = border;\n this.textureUnit = textureUnit;\n\n if (Number.isFinite(this.textureUnit)) {\n this.gl.activeTexture(GL.TEXTURE0 + this.textureUnit);\n this.gl.bindTexture(this.target, this.handle);\n }\n\n if (mipmaps && this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n mipmaps = false;\n\n this._updateForNPOT(parameters);\n }\n\n this.mipmaps = mipmaps;\n\n this.setImageData({\n data,\n width,\n height,\n depth,\n format,\n type,\n dataFormat,\n border,\n mipmaps,\n parameters: pixelStore,\n compressed\n });\n\n if (mipmaps) {\n this.generateMipmap();\n }\n\n // Set texture sampler parameters\n this.setParameters(parameters);\n\n // TODO - Store data to enable auto recreate on context loss\n if (recreate) {\n this.data = data;\n }\n if (isVideo) {\n this._video = {\n video: data,\n parameters,\n // @ts-ignore\n lastTime: data.readyState >= HTMLVideoElement.HAVE_CURRENT_DATA ? data.currentTime : -1\n };\n }\n\n return this;\n }\n\n update() {\n if (this._video) {\n const {video, parameters, lastTime} = this._video;\n // @ts-ignore\n if (lastTime === video.currentTime || video.readyState < HTMLVideoElement.HAVE_CURRENT_DATA) {\n return;\n }\n this.setSubImageData({\n data: video,\n parameters\n });\n if (this.mipmaps) {\n this.generateMipmap();\n }\n this._video.lastTime = video.currentTime;\n }\n }\n\n // If size has changed, reinitializes with current format\n // note clears image and mipmaps\n resize({height, width, mipmaps = false}) {\n if (width !== this.width || height !== this.height) {\n return this.initialize({\n width,\n height,\n format: this.format,\n type: this.type,\n dataFormat: this.dataFormat,\n border: this.border,\n mipmaps\n });\n }\n return this;\n }\n\n // Call to regenerate mipmaps after modifying texture(s)\n generateMipmap(params = {}) {\n if (this._isNPOT()) {\n log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();\n return this;\n }\n\n this.mipmaps = true;\n\n this.gl.bindTexture(this.target, this.handle);\n withParameters(this.gl, params, () => {\n this.gl.generateMipmap(this.target);\n });\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n /*\n * Allocates storage\n * @param {*} pixels -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} width -\n * @param {GLint} height -\n * @param {GLint} mipMapLevel -\n * @param {GLenum} format - format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n /* eslint-disable max-len, max-statements, complexity */\n setImageData(options) {\n this._trackDeallocatedMemory('Texture');\n\n const {\n target = this.target,\n pixels = null,\n level = 0,\n format = this.format,\n border = this.border,\n offset = 0,\n parameters = {}\n } = options;\n\n let {\n data = null,\n type = this.type,\n width = this.width,\n height = this.height,\n dataFormat = this.dataFormat,\n compressed = false\n } = options;\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n const {gl} = this;\n gl.bindTexture(this.target, this.handle);\n\n let dataType = null;\n ({data, dataType} = this._getDataType({data, compressed}));\n\n let gl2;\n\n let compressedTextureSize = 0;\n\n withParameters(this.gl, parameters, () => {\n switch (dataType) {\n case 'null':\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n break;\n case 'typed-array':\n // Looks like this assert is not necessary, as offset is ignored under WebGL1\n // assert((offset === 0 || isWebGL2(gl)), 'offset supported in WebGL2 only');\n // @ts-ignore\n gl.texImage2D(\n target,\n level,\n format,\n width,\n height,\n border,\n dataFormat,\n type,\n data,\n // @ts-ignore\n offset\n );\n break;\n case 'buffer':\n // WebGL2 enables creating textures directly from a WebGL buffer\n gl2 = assertWebGL2Context(gl);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);\n gl2.texImage2D(target, level, format, width, height, border, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n break;\n case 'browser-object':\n if (isWebGL2(gl)) {\n gl.texImage2D(target, level, format, width, height, border, dataFormat, type, data);\n } else {\n gl.texImage2D(target, level, format, dataFormat, type, data);\n }\n break;\n case 'compressed':\n for (const [levelIndex, levelData] of data.entries()) {\n gl.compressedTexImage2D(\n target,\n levelIndex,\n levelData.format,\n levelData.width,\n levelData.height,\n border,\n levelData.data\n );\n compressedTextureSize += levelData.levelSize;\n }\n break;\n default:\n assert(false, 'Unknown image data type');\n }\n });\n\n if (dataType === 'compressed') {\n this._trackAllocatedMemory(compressedTextureSize, 'Texture');\n } else if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(this.width * this.height * channels * channelSize, 'Texture');\n }\n\n this.loaded = true;\n\n return this;\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Redefines an area of an existing texture\n * Note: does not allocate storage\n */\n /*\n * Redefines an area of an existing texture\n * @param {*} pixels, data -\n * null - create empty texture of specified format\n * Typed array - init from image data in typed array\n * Buffer|WebGLBuffer - (WEBGL2) init from image data in WebGLBuffer\n * HTMLImageElement|Image - Inits with content of image. Auto width/height\n * HTMLCanvasElement - Inits with contents of canvas. Auto width/height\n * HTMLVideoElement - Creates video texture. Auto width/height\n *\n * @param {GLint} x - xOffset from where texture to be updated\n * @param {GLint} y - yOffset from where texture to be updated\n * @param {GLint} width - width of the sub image to be updated\n * @param {GLint} height - height of the sub image to be updated\n * @param {GLint} level - mip level to be updated\n * @param {GLenum} format - internal format of image data.\n * @param {GLenum} type\n * - format of array (autodetect from type) or\n * - (WEBGL2) format of buffer or ArrayBufferView\n * @param {GLenum} dataFormat - format of image data.\n * @param {Number} offset - (WEBGL2) offset from start of buffer\n * @param {GLint} border - must be 0.\n * @parameters - temporary settings to be applied, can be used to supply pixel store settings.\n */\n setSubImageData({\n target = this.target,\n pixels = null,\n data = null,\n x = 0,\n y = 0,\n width = this.width,\n height = this.height,\n level = 0,\n format = this.format,\n type = this.type,\n dataFormat = this.dataFormat,\n compressed = false,\n offset = 0,\n border = this.border,\n parameters = {}\n }) {\n ({type, dataFormat, compressed, width, height} = this._deduceParameters({\n format,\n type,\n dataFormat,\n compressed,\n data,\n width,\n height\n }));\n\n assert(this.depth === 0, 'texSubImage not supported for 3D textures');\n\n // pixels variable is for API compatibility purpose\n if (!data) {\n data = pixels;\n }\n\n // Support ndarrays\n if (data && data.data) {\n const ndarray = data;\n data = ndarray.data;\n width = ndarray.shape[0];\n height = ndarray.shape[1];\n }\n\n // Support buffers\n if (data instanceof Buffer) {\n data = data.handle;\n }\n\n this.gl.bindTexture(this.target, this.handle);\n\n withParameters(this.gl, parameters, () => {\n // TODO - x,y parameters\n if (compressed) {\n this.gl.compressedTexSubImage2D(target, level, x, y, width, height, format, data);\n } else if (data === null) {\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);\n } else if (ArrayBuffer.isView(data)) {\n // const gl2 = assertWebGL2Context(this.gl);\n // @ts-ignore last offset parameter is ignored under WebGL1\n this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);\n } else if (data instanceof WebGLBuffer) {\n // WebGL2 allows us to create texture directly from a WebGL buffer\n const gl2 = assertWebGL2Context(this.gl);\n // This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);\n gl2.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);\n } else if (isWebGL2(this.gl)) {\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n const gl2 = assertWebGL2Context(this.gl);\n gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);\n } else {\n this.gl.texSubImage2D(target, level, x, y, dataFormat, type, data);\n }\n });\n\n this.gl.bindTexture(this.target, null);\n }\n /* eslint-enable max-len, max-statements, complexity */\n\n /**\n * Defines a two-dimensional texture image or cube-map texture image with\n * pixels from the current framebuffer (rather than from client memory).\n * (gl.copyTexImage2D wrapper)\n *\n * Note that binding a texture into a Framebuffer's color buffer and\n * rendering can be faster.\n */\n copyFramebuffer(opts = {}) {\n log.error(\n 'Texture.copyFramebuffer({...}) is no logner supported, use copyToTexture(source, target, opts})'\n )();\n return null;\n }\n\n getActiveUnit() {\n return this.gl.getParameter(GL.ACTIVE_TEXTURE) - GL.TEXTURE0;\n }\n\n // target cannot be modified by bind:\n // textures are special because when you first bind them to a target,\n // they get special information. When you first bind a texture as a\n // GL_TEXTURE_2D, you are actually setting special state in the texture.\n // You are saying that this texture is a 2D texture.\n // And it will always be a 2D texture; this state cannot be changed ever.\n // If you have a texture that was first bound as a GL_TEXTURE_2D,\n // you must always bind it as a GL_TEXTURE_2D;\n // attempting to bind it as GL_TEXTURE_1D will give rise to an error\n // (while run-time).\n\n bind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, this.handle);\n return textureUnit;\n }\n\n unbind(textureUnit = this.textureUnit) {\n const {gl} = this;\n\n if (textureUnit !== undefined) {\n this.textureUnit = textureUnit;\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n }\n\n gl.bindTexture(this.target, null);\n return textureUnit;\n }\n\n // PRIVATE METHODS\n\n _getDataType({data, compressed = false}) {\n if (compressed) {\n return {data, dataType: 'compressed'};\n }\n if (data === null) {\n return {data, dataType: 'null'};\n }\n if (ArrayBuffer.isView(data)) {\n return {data, dataType: 'typed-array'};\n }\n if (data instanceof Buffer) {\n return {data: data.handle, dataType: 'buffer'};\n }\n if (data instanceof WebGLBuffer) {\n return {data, dataType: 'buffer'};\n }\n // Assume data is a browser supported object (ImageData, Canvas, ...)\n return {data, dataType: 'browser-object'};\n }\n\n /* Copied from texture-2d.js\n // WebGL2\n setPixels(opts = {}) {\n const {\n buffer,\n width = null,\n height = null,\n mipmapLevel = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n\n // This signature of texImage2D uses currently bound GL.PIXEL_UNPACK_BUFFER\n gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, buffer.target);\n // And as always, we must also bind the texture itself\n this.bind();\n\n gl.texImage2D(gl.TEXTURE_2D,\n mipmapLevel, format, width, height, border, format, type, buffer.target);\n\n this.unbind();\n gl.bindBuffer(GL.GL.PIXEL_UNPACK_BUFFER, null);\n return this;\n }\n\n setImageDataFromCompressedBuffer(opts) {\n const {\n buffer,\n // offset = 0,\n width = null,\n height = null,\n mipmapLevel = 0,\n internalFormat = GL.RGBA,\n // format = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n border = 0\n } = opts;\n\n const {gl} = this;\n gl.compressedTexImage2D(this.target,\n mipmapLevel, internalFormat, width, height, border, buffer);\n // gl.compressedTexSubImage2D(target,\n // level, xoffset, yoffset, width, height, format, ArrayBufferView? pixels);\n return this;\n }\n\n copySubImage(opts) {\n const {\n // pixels,\n // offset = 0,\n // x,\n // y,\n // width,\n // height,\n // mipmapLevel = 0,\n // internalFormat = GL.RGBA,\n // type = GL.UNSIGNED_BYTE,\n // border = 0\n } = opts;\n\n // if (pixels instanceof ArrayBufferView) {\n // gl.texSubImage2D(target, level, x, y, width, height, format, type, pixels);\n // }\n // gl.texSubImage2D(target, level, x, y, format, type, ? pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLImageElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLCanvasElement pixels);\n // gl.texSubImage2D(target, level, x, y, format, type, HTMLVideoElement pixels);\n // // Additional signature in a WebGL 2 context:\n // gl.texSubImage2D(target, level, x, y, format, type, GLintptr offset);\n }\n */\n\n // HELPER METHODS\n\n _deduceParameters(opts) {\n const {format, data} = opts;\n let {width, height, dataFormat, type, compressed} = opts;\n\n // Deduce format and type from format\n const textureFormat = TEXTURE_FORMATS[format];\n dataFormat = dataFormat || (textureFormat && textureFormat.dataFormat);\n type = type || (textureFormat && textureFormat.types[0]);\n\n // Deduce compression from format\n compressed = compressed || (textureFormat && textureFormat.compressed);\n\n ({width, height} = this._deduceImageSize(data, width, height));\n\n return {dataFormat, type, compressed, width, height, format, data};\n }\n\n // eslint-disable-next-line complexity\n _deduceImageSize(data, width, height) {\n let size;\n\n if (typeof ImageData !== 'undefined' && data instanceof ImageData) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLImageElement !== 'undefined' && data instanceof HTMLImageElement) {\n size = {width: data.naturalWidth, height: data.naturalHeight};\n } else if (typeof HTMLCanvasElement !== 'undefined' && data instanceof HTMLCanvasElement) {\n size = {width: data.width, height: data.height};\n } else if (typeof ImageBitmap !== 'undefined' && data instanceof ImageBitmap) {\n size = {width: data.width, height: data.height};\n } else if (typeof HTMLVideoElement !== 'undefined' && data instanceof HTMLVideoElement) {\n size = {width: data.videoWidth, height: data.videoHeight};\n } else if (!data) {\n size = {width: width >= 0 ? width : 1, height: height >= 0 ? height : 1};\n } else {\n size = {width, height};\n }\n\n assert(size, 'Could not deduced texture size');\n assert(\n width === undefined || size.width === width,\n 'Deduced texture width does not match supplied width'\n );\n assert(\n height === undefined || size.height === height,\n 'Deduced texture height does not match supplied height'\n );\n\n return size;\n }\n\n // RESOURCE METHODS\n\n _createHandle() {\n return this.gl.createTexture();\n }\n\n _deleteHandle() {\n this.gl.deleteTexture(this.handle);\n this._trackDeallocatedMemory('Texture');\n }\n\n _getParameter(pname) {\n switch (pname) {\n case GL.TEXTURE_WIDTH:\n return this.width;\n case GL.TEXTURE_HEIGHT:\n return this.height;\n default:\n this.gl.bindTexture(this.target, this.handle);\n const value = this.gl.getTexParameter(this.target, pname);\n this.gl.bindTexture(this.target, null);\n return value;\n }\n }\n\n _setParameter(pname, param) {\n this.gl.bindTexture(this.target, this.handle);\n\n // NOTE: Apply NPOT workaround\n param = this._getNPOTParam(pname, param);\n\n // Apparently there are some integer/float conversion rules that made\n // the WebGL committe expose two parameter setting functions in JavaScript.\n // For now, pick the float version for parameters specified as GLfloat.\n switch (pname) {\n case GL.TEXTURE_MIN_LOD:\n case GL.TEXTURE_MAX_LOD:\n this.gl.texParameterf(this.handle, pname, param);\n break;\n\n case GL.TEXTURE_WIDTH:\n case GL.TEXTURE_HEIGHT:\n assert(false);\n break;\n\n default:\n this.gl.texParameteri(this.target, pname, param);\n break;\n }\n\n this.gl.bindTexture(this.target, null);\n return this;\n }\n\n _isNPOT() {\n if (isWebGL2(this.gl)) {\n // NPOT restriction is only for WebGL1\n return false;\n }\n // Width and height not available, consider it is not NPOT texture\n if (!this.width || !this.height) {\n return false;\n }\n return !isPowerOfTwo(this.width) || !isPowerOfTwo(this.height);\n }\n\n // Update default settings which are not supported by NPOT textures.\n _updateForNPOT(parameters) {\n if (parameters[this.gl.TEXTURE_MIN_FILTER] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n parameters[this.gl.TEXTURE_MIN_FILTER] = this.gl.LINEAR;\n }\n if (parameters[this.gl.TEXTURE_WRAP_S] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_S] = this.gl.CLAMP_TO_EDGE;\n }\n if (parameters[this.gl.TEXTURE_WRAP_T] === undefined) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_T to CLAMP_TO_EDGE`)();\n parameters[this.gl.TEXTURE_WRAP_T] = this.gl.CLAMP_TO_EDGE;\n }\n }\n\n _getNPOTParam(pname, param) {\n if (this._isNPOT()) {\n switch (pname) {\n case GL.TEXTURE_MIN_FILTER:\n if (NPOT_MIN_FILTERS.indexOf(param) === -1) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n param = GL.LINEAR;\n }\n break;\n case GL.TEXTURE_WRAP_S:\n case GL.TEXTURE_WRAP_T:\n if (param !== GL.CLAMP_TO_EDGE) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, ${getKey(this.gl, pname)} to CLAMP_TO_EDGE`)();\n param = GL.CLAMP_TO_EDGE;\n }\n break;\n default:\n break;\n }\n }\n return param;\n }\n}\n"],"file":"texture.js"}
|
|
@@ -11,7 +11,8 @@ export default class TransformFeedback extends Resource {
|
|
|
11
11
|
return isWebGL2(gl);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
constructor(gl
|
|
14
|
+
constructor(gl) {
|
|
15
|
+
let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
15
16
|
assertWebGL2Context(gl);
|
|
16
17
|
super(gl, props);
|
|
17
18
|
this.initialize(props);
|
|
@@ -19,7 +20,8 @@ export default class TransformFeedback extends Resource {
|
|
|
19
20
|
Object.seal(this);
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
initialize(
|
|
23
|
+
initialize() {
|
|
24
|
+
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
23
25
|
this.buffers = {};
|
|
24
26
|
this.unused = {};
|
|
25
27
|
this.configuration = null;
|
|
@@ -51,7 +53,8 @@ export default class TransformFeedback extends Resource {
|
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
|
|
54
|
-
setBuffers(
|
|
56
|
+
setBuffers() {
|
|
57
|
+
let buffers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
55
58
|
this.bind(() => {
|
|
56
59
|
for (const bufferName in buffers) {
|
|
57
60
|
this.setBuffer(bufferName, buffers[bufferName]);
|
|
@@ -71,7 +74,7 @@ export default class TransformFeedback extends Resource {
|
|
|
71
74
|
|
|
72
75
|
if (location < 0) {
|
|
73
76
|
this.unused[locationOrName] = buffer;
|
|
74
|
-
log.warn((
|
|
77
|
+
log.warn("".concat(this.id, " unused varying buffer ").concat(locationOrName))();
|
|
75
78
|
return this;
|
|
76
79
|
}
|
|
77
80
|
|
|
@@ -84,7 +87,8 @@ export default class TransformFeedback extends Resource {
|
|
|
84
87
|
return this;
|
|
85
88
|
}
|
|
86
89
|
|
|
87
|
-
begin(
|
|
90
|
+
begin() {
|
|
91
|
+
let primitiveMode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
88
92
|
this.gl.bindTransformFeedback(36386, this.handle);
|
|
89
93
|
|
|
90
94
|
this._bindBuffers();
|
|
@@ -162,7 +166,9 @@ export default class TransformFeedback extends Resource {
|
|
|
162
166
|
}
|
|
163
167
|
}
|
|
164
168
|
|
|
165
|
-
_bindBuffer(index, buffer
|
|
169
|
+
_bindBuffer(index, buffer) {
|
|
170
|
+
let byteOffset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
171
|
+
let byteSize = arguments.length > 3 ? arguments[3] : undefined;
|
|
166
172
|
const handle = buffer && buffer.handle;
|
|
167
173
|
|
|
168
174
|
if (!handle || byteSize === undefined) {
|
|
@@ -1 +1 @@
|
|
|
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":"AACA,SAAQA,QAAR,EAAkBC,mBAAlB,EAAuCC,GAAvC,QAAiD,kBAAjD;AACA,OAAOC,QAAP,MAAqB,YAArB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AACA,SAAQC,aAAR,QAA4B,gBAA5B;AAKA,eAAe,MAAMC,iBAAN,SAAgCH,QAAhC,CAAyC;AAEtD,OAAKI,MAAM,CAACC,WAAZ,IAA2B;AACzB,WAAO,mBAAP;AACD;;AACD,SAAOC,WAAP,CAAmBC,EAAnB,EAAuB;AACrB,WAAOV,QAAQ,CAACU,EAAD,CAAf;AACD;;AAEDC,EAAAA,WAAW,CAACD,EAAD,EAAKE,KAAK,GAAG,EAAb,EAAiB;AAC1BX,IAAAA,mBAAmB,CAACS,EAAD,CAAnB;AACA,UAAMA,EAAN,EAAUE,KAAV;AAEA,SAAKC,UAAL,CAAgBD,KAAhB;AACA,SAAKE,kBAAL,CAAwB,mBAAxB,EAA6C,MAA7C,EAAqD,CAAC,OAAD,EAAU,QAAV,CAArD;AACAC,IAAAA,MAAM,CAACC,IAAP,CAAY,IAAZ;AACD;;AAEDH,EAAAA,UAAU,CAACD,KAAK,GAAG,EAAT,EAAa;AACrB,SAAKK,OAAL,GAAe,EAAf;AACA,SAAKC,MAAL,GAAc,EAAd;AACA,SAAKC,aAAL,GAAqB,IAArB;AACA,SAAKC,SAAL,GAAiB,IAAjB;;AAGA,QAAI,CAACf,aAAa,CAAC,KAAKY,OAAN,CAAlB,EAAkC;AAChC,WAAKI,IAAL,CAAU,MAAM,KAAKC,cAAL,EAAhB;AACD;;AAED,SAAKC,QAAL,CAAcX,KAAd;AACA,WAAO,IAAP;AACD;;AAEDW,EAAAA,QAAQ,CAACX,KAAD,EAAQ;AACd,QAAI,aAAaA,KAAjB,EAAwB;AACtB,WAAKO,aAAL,GAAqBP,KAAK,CAACY,OAAN,IAAiBZ,KAAK,CAACY,OAAN,CAAcL,aAApD;AACD;;AACD,QAAI,mBAAmBP,KAAvB,EAA8B;AAC5B,WAAKO,aAAL,GAAqBP,KAAK,CAACO,aAA3B;AACD;;AACD,QAAI,eAAeP,KAAnB,EAA0B;AACxBA,MAAAA,KAAK,GAAGA,KAAK,CAACQ,SAAd;AACD;;AACD,QAAI,aAAaR,KAAjB,EAAwB;AACtB,WAAKa,UAAL,CAAgBb,KAAK,CAACK,OAAtB;AACD;AACF;;AAEDQ,EAAAA,UAAU,CAACR,OAAO,GAAG,EAAX,EAAe;AACvB,SAAKI,IAAL,CAAU,MAAM;AACd,WAAK,MAAMK,UAAX,IAAyBT,OAAzB,EAAkC;AAChC,aAAKU,SAAL,CAAeD,UAAf,EAA2BT,OAAO,CAACS,UAAD,CAAlC;AACD;AACF,KAJD;AAKA,WAAO,IAAP;AACD;;AAEDC,EAAAA,SAAS,CAACC,cAAD,EAAiBC,cAAjB,EAAiC;AACxC,UAAMC,QAAQ,GAAG,KAAKC,gBAAL,CAAsBH,cAAtB,CAAjB;;AACA,UAAM;AAACI,MAAAA,MAAD;AAASC,MAAAA,QAAT;AAAmBC,MAAAA;AAAnB,QAAiC,KAAKC,gBAAL,CAAsBN,cAAtB,CAAvC;;AAEA,QAAIC,QAAQ,GAAG,CAAf,EAAkB;AAChB,WAAKZ,MAAL,CAAYU,cAAZ,IAA8BI,MAA9B;AACA9B,MAAAA,GAAG,CAACkC,IAAJ,CAAS,MAAO,GAAE,KAAKC,EAAG,0BAAyBT,cAAe,EAAlE;AACA,aAAO,IAAP;AACD;;AAED,SAAKX,OAAL,CAAaa,QAAb,IAAyBD,cAAzB;;AAIA,QAAI,CAAC,KAAKT,SAAV,EAAqB;AACnB,WAAKkB,WAAL,CAAiBR,QAAjB,EAA2BE,MAA3B,EAAmCE,UAAnC,EAA+CD,QAA/C;AACD;;AAED,WAAO,IAAP;AACD;;AAEDM,EAAAA,KAAK,CAACC,aAAa,IAAd,EAA4B;AAE/B,SAAK9B,EAAL,CAAQ+B,qBAAR,QAAqD,KAAKC,MAA1D;;AACA,SAAKC,YAAL;;AAEA,SAAKjC,EAAL,CAAQkC,sBAAR,CAA+BJ,aAA/B;AACA,WAAO,IAAP;AACD;;AAEDK,EAAAA,GAAG,GAAG;AAEJ,SAAKnC,EAAL,CAAQoC,oBAAR;;AACA,SAAKxB,cAAL;;AAEA,SAAKZ,EAAL,CAAQ+B,qBAAR,QAAqD,IAArD;AACA,WAAO,IAAP;AACD;;AAIDN,EAAAA,gBAAgB,CAACN,cAAD,EAAiB;AAC/B,QAAIK,UAAJ;AACA,QAAID,QAAJ;AACA,QAAID,MAAJ;;AACA,QAAIH,cAAc,YAAYzB,MAA1B,KAAqC,KAAzC,EAAgD;AAC9C4B,MAAAA,MAAM,GAAGH,cAAc,CAACG,MAAxB;AACAC,MAAAA,QAAQ,GAAGJ,cAAc,CAACI,QAA1B;AACAC,MAAAA,UAAU,GAAGL,cAAc,CAACK,UAA5B;AACD,KAJD,MAIO;AACLF,MAAAA,MAAM,GAAGH,cAAT;AACD;;AAED,QAAIK,UAAU,KAAKa,SAAf,IAA4Bd,QAAQ,KAAKc,SAA7C,EAAwD;AACtDb,MAAAA,UAAU,GAAGA,UAAU,IAAI,CAA3B;AACAD,MAAAA,QAAQ,GAAGA,QAAQ,IAAID,MAAM,CAACgB,UAAP,GAAoBd,UAA3C;AACD;;AACD,WAAO;AAACF,MAAAA,MAAD;AAASE,MAAAA,UAAT;AAAqBD,MAAAA;AAArB,KAAP;AACD;;AAEDgB,EAAAA,eAAe,CAACrB,cAAD,EAAiB;AAC9B,WAAO,KAAKT,aAAL,IAAsB,KAAKA,aAAL,CAAmB+B,cAAnB,CAAkCtB,cAAlC,CAA7B;AACD;;AAEDG,EAAAA,gBAAgB,CAACH,cAAD,EAAiB;AAC/B,QAAI,KAAKT,aAAT,EAAwB;AACtB,aAAO,KAAKA,aAAL,CAAmB+B,cAAnB,CAAkCtB,cAAlC,EAAkDE,QAAzD;AACD;;AACD,UAAMA,QAAQ,GAAGqB,MAAM,CAACvB,cAAD,CAAvB;AACA,WAAOuB,MAAM,CAACC,QAAP,CAAgBtB,QAAhB,IAA4BA,QAA5B,GAAuC,CAAC,CAA/C;AACD;;AAIDa,EAAAA,YAAY,GAAG;AACb,QAAI,KAAKvB,SAAT,EAAoB;AAClB,WAAK,MAAMiC,WAAX,IAA0B,KAAKpC,OAA/B,EAAwC;AACtC,cAAM;AAACe,UAAAA,MAAD;AAASC,UAAAA,QAAT;AAAmBC,UAAAA;AAAnB,YAAiC,KAAKC,gBAAL,CAAsB,KAAKlB,OAAL,CAAaoC,WAAb,CAAtB,CAAvC;;AACA,aAAKf,WAAL,CAAiBe,WAAjB,EAA8BrB,MAA9B,EAAsCE,UAAtC,EAAkDD,QAAlD;AACD;AACF;AACF;;AAEDX,EAAAA,cAAc,GAAG;AACf,QAAI,KAAKF,SAAT,EAAoB;AAClB,WAAK,MAAMiC,WAAX,IAA0B,KAAKpC,OAA/B,EAAwC;AACtC,aAAKqB,WAAL,CAAiBe,WAAjB,EAA8B,IAA9B;AACD;AACF;AACF;;AAEDf,EAAAA,WAAW,CAACgB,KAAD,EAAQtB,MAAR,EAAgBE,UAAU,GAAG,CAA7B,EAAgCD,QAAhC,EAA0C;AACnD,UAAMS,MAAM,GAAGV,MAAM,IAAIA,MAAM,CAACU,MAAhC;;AACA,QAAI,CAACA,MAAD,IAAWT,QAAQ,KAAKc,SAA5B,EAAuC;AAErC,WAAKrC,EAAL,CAAQ6C,cAAR,QAAqDD,KAArD,EAA4DZ,MAA5D;AACD,KAHD,MAGO;AAEL,WAAKhC,EAAL,CAAQ8C,eAAR,QAAsDF,KAAtD,EAA6DZ,MAA7D,EAAqER,UAArE,EAAiFD,QAAjF;AACD;;AACD,WAAO,IAAP;AACD;;AAIDwB,EAAAA,aAAa,GAAG;AAEd,WAAO,KAAK/C,EAAL,CAAQgD,uBAAR,EAAP;AACD;;AAEDC,EAAAA,aAAa,GAAG;AAEd,SAAKjD,EAAL,CAAQkD,uBAAR,CAAgC,KAAKlB,MAArC;AACD;;AAEDmB,EAAAA,WAAW,CAACnB,MAAD,EAAS;AAElB,SAAKhC,EAAL,CAAQ+B,qBAAR,QAAqD,KAAKC,MAA1D;AACD;;AA/KqD","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"}
|
|
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"}
|
|
@@ -65,7 +65,7 @@ function toTypedArray(value, uniformLength, Type, cache) {
|
|
|
65
65
|
const length = value.length;
|
|
66
66
|
|
|
67
67
|
if (length % uniformLength) {
|
|
68
|
-
log.warn(
|
|
68
|
+
log.warn("Uniform size should be multiples of ".concat(uniformLength), value)();
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
if (value instanceof Type) {
|
|
@@ -102,7 +102,7 @@ export function getUniformSetter(gl, location, info) {
|
|
|
102
102
|
const setter = UNIFORM_SETTERS[info.type];
|
|
103
103
|
|
|
104
104
|
if (!setter) {
|
|
105
|
-
throw new Error(
|
|
105
|
+
throw new Error("Unknown GLSL uniform type ".concat(info.type));
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
return setter().bind(null, gl, location);
|
|
@@ -120,7 +120,7 @@ export function parseUniformName(name) {
|
|
|
120
120
|
const matches = name.match(UNIFORM_NAME_REGEXP);
|
|
121
121
|
|
|
122
122
|
if (!matches || matches.length < 2) {
|
|
123
|
-
throw new Error(
|
|
123
|
+
throw new Error("Failed to parse GLSL uniform name ".concat(name));
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
return {
|
|
@@ -135,9 +135,9 @@ export function checkUniformValues(uniforms, source, uniformMap) {
|
|
|
135
135
|
const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);
|
|
136
136
|
|
|
137
137
|
if (shouldCheck && !checkUniformValue(value)) {
|
|
138
|
-
source = source ?
|
|
139
|
-
console.error(
|
|
140
|
-
throw new Error(
|
|
138
|
+
source = source ? "".concat(source, " ") : '';
|
|
139
|
+
console.error("".concat(source, " Bad uniform ").concat(uniformName), value);
|
|
140
|
+
throw new Error("".concat(source, " Bad uniform ").concat(uniformName));
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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"}
|
|
@@ -3,14 +3,16 @@ import Buffer from './buffer';
|
|
|
3
3
|
import { isWebGL2 } from '@luma.gl/gltools';
|
|
4
4
|
import { getScratchArray, fillArray } from '../utils/array-utils-flat';
|
|
5
5
|
import { assert } from '../utils/assert';
|
|
6
|
-
import { getBrowser } from 'probe.gl';
|
|
6
|
+
import { getBrowser } from '@probe.gl/env';
|
|
7
7
|
const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
|
|
8
8
|
export default class VertexArrayObject extends Resource {
|
|
9
9
|
get [Symbol.toStringTag]() {
|
|
10
10
|
return 'VertexArrayObject';
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
static isSupported(gl
|
|
13
|
+
static isSupported(gl) {
|
|
14
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
15
|
+
|
|
14
16
|
if (options.constantAttributeZero) {
|
|
15
17
|
return isWebGL2(gl) || getBrowser() === 'Chrome';
|
|
16
18
|
}
|
|
@@ -58,7 +60,8 @@ export default class VertexArrayObject extends Resource {
|
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
|
|
61
|
-
constructor(gl
|
|
63
|
+
constructor(gl) {
|
|
64
|
+
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
62
65
|
const id = opts.id || opts.program && opts.program.id;
|
|
63
66
|
super(gl, Object.assign({}, opts, {
|
|
64
67
|
id
|
|
@@ -85,7 +88,8 @@ export default class VertexArrayObject extends Resource {
|
|
|
85
88
|
return VertexArrayObject.getMaxAttributes(this.gl);
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
initialize(
|
|
91
|
+
initialize() {
|
|
92
|
+
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
89
93
|
return this.setProps(props);
|
|
90
94
|
}
|
|
91
95
|
|
|
@@ -93,7 +97,9 @@ export default class VertexArrayObject extends Resource {
|
|
|
93
97
|
return this;
|
|
94
98
|
}
|
|
95
99
|
|
|
96
|
-
setElementBuffer(
|
|
100
|
+
setElementBuffer() {
|
|
101
|
+
let elementBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
102
|
+
let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
97
103
|
assert(!elementBuffer || elementBuffer.target === 34963, ERR_ELEMENTS);
|
|
98
104
|
this.bind(() => {
|
|
99
105
|
this.gl.bindBuffer(34963, elementBuffer ? elementBuffer.handle : null);
|
|
@@ -136,7 +142,8 @@ export default class VertexArrayObject extends Resource {
|
|
|
136
142
|
return this;
|
|
137
143
|
}
|
|
138
144
|
|
|
139
|
-
enable(location
|
|
145
|
+
enable(location) {
|
|
146
|
+
let enable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
140
147
|
const disablingAttributeZero = !enable && location === 0 && !VertexArrayObject.isSupported(this.gl, {
|
|
141
148
|
constantAttributeZero: true
|
|
142
149
|
});
|
|
@@ -283,9 +290,10 @@ export default class VertexArrayObject extends Resource {
|
|
|
283
290
|
this.gl2.bindVertexArray(handle);
|
|
284
291
|
}
|
|
285
292
|
|
|
286
|
-
_getParameter(pname, {
|
|
287
|
-
|
|
288
|
-
|
|
293
|
+
_getParameter(pname, _ref) {
|
|
294
|
+
let {
|
|
295
|
+
location
|
|
296
|
+
} = _ref;
|
|
289
297
|
assert(Number.isFinite(location));
|
|
290
298
|
return this.bind(() => {
|
|
291
299
|
switch (pname) {
|