@luma.gl/webgl 8.5.11 → 8.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dist.js +80 -11
- package/dist/dist.min.js +1 -1
- package/dist/es5/classes/buffer.js +9 -2
- package/dist/es5/classes/buffer.js.map +1 -1
- package/dist/es5/classes/framebuffer.js +5 -0
- package/dist/es5/classes/framebuffer.js.map +1 -1
- package/dist/es5/classes/program.js +9 -2
- package/dist/es5/classes/program.js.map +1 -1
- package/dist/es5/classes/query.js +6 -1
- package/dist/es5/classes/query.js.map +1 -1
- package/dist/es5/classes/renderbuffer.js +6 -1
- package/dist/es5/classes/renderbuffer.js.map +1 -1
- package/dist/es5/classes/resource.js +13 -6
- package/dist/es5/classes/resource.js.map +1 -1
- package/dist/es5/classes/shader.js +20 -1
- package/dist/es5/classes/shader.js.map +1 -1
- package/dist/es5/classes/texture-2d.js +6 -1
- package/dist/es5/classes/texture-2d.js.map +1 -1
- package/dist/es5/classes/texture-3d.js +6 -1
- package/dist/es5/classes/texture-3d.js.map +1 -1
- package/dist/es5/classes/texture-cube.js +9 -2
- package/dist/es5/classes/texture-cube.js.map +1 -1
- package/dist/es5/classes/texture.js +11 -2
- package/dist/es5/classes/texture.js.map +1 -1
- package/dist/es5/classes/transform-feedback.js +6 -1
- package/dist/es5/classes/transform-feedback.js.map +1 -1
- package/dist/es5/classes/vertex-array-object.js +6 -1
- package/dist/es5/classes/vertex-array-object.js.map +1 -1
- package/dist/es5/init.js +1 -1
- package/dist/esm/classes/buffer.js +4 -0
- package/dist/esm/classes/buffer.js.map +1 -1
- package/dist/esm/classes/framebuffer.js +4 -0
- package/dist/esm/classes/framebuffer.js.map +1 -1
- package/dist/esm/classes/program.js +4 -0
- package/dist/esm/classes/program.js.map +1 -1
- package/dist/esm/classes/query.js +4 -0
- package/dist/esm/classes/query.js.map +1 -1
- package/dist/esm/classes/renderbuffer.js +4 -0
- package/dist/esm/classes/renderbuffer.js.map +1 -1
- package/dist/esm/classes/resource.js +10 -6
- package/dist/esm/classes/resource.js.map +1 -1
- package/dist/esm/classes/shader.js +12 -0
- package/dist/esm/classes/shader.js.map +1 -1
- package/dist/esm/classes/texture-2d.js +4 -0
- package/dist/esm/classes/texture-2d.js.map +1 -1
- package/dist/esm/classes/texture-3d.js +4 -0
- package/dist/esm/classes/texture-3d.js.map +1 -1
- package/dist/esm/classes/texture-cube.js +4 -0
- package/dist/esm/classes/texture-cube.js.map +1 -1
- package/dist/esm/classes/texture.js +9 -1
- package/dist/esm/classes/texture.js.map +1 -1
- package/dist/esm/classes/transform-feedback.js +4 -0
- package/dist/esm/classes/transform-feedback.js.map +1 -1
- package/dist/esm/classes/vertex-array-object.js +4 -0
- package/dist/esm/classes/vertex-array-object.js.map +1 -1
- package/dist/esm/init.js +1 -1
- package/package.json +4 -4
- package/src/classes/buffer.js +4 -0
- package/src/classes/framebuffer.js +4 -0
- package/src/classes/program.js +4 -0
- package/src/classes/query.js +4 -0
- package/src/classes/renderbuffer.js +4 -0
- package/src/classes/resource.js +10 -6
- package/src/classes/shader.js +14 -0
- package/src/classes/texture-2d.js +5 -0
- package/src/classes/texture-3d.js +5 -0
- package/src/classes/texture-cube.js +5 -0
- package/src/classes/texture.js +10 -2
- package/src/classes/transform-feedback.js +4 -0
- package/src/classes/vertex-array-object.js +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/resource.js"],"names":["isWebGL2","assertWebGLContext","lumaStats","getKey","getKeyValue","assert","uid","stubRemovedMethods","ERR_RESOURCE_METHOD_UNDEFINED","Resource","constructor","gl","opts","id","userData","gl2","name","_bound","_handle","handle","undefined","_createHandle","byteLength","_addStats","toString","delete","deleteChildren","children","_deleteHandle","_removeStats","filter","Boolean","forEach","child","bind","funcOrHandle","_bindHandle","value","unbind","getParameter","pname","parameters","PARAMETERS","parameter","isWebgl2","parameterAvailable","getExtension","extension","webgl1Default","webgl1","webgl2Default","webgl2","defaultValue","_getParameter","getParameters","options","keys","values","parameterKeys","Object","key","type","setParameter","Error","_setParameter","setParameters","className","version","methodNames","initialize","_getOptsFromHandle","_context","luma","stats","get","incrementCount","decrementCount","_trackAllocatedMemory","bytes","addCount","_trackDeallocatedMemory","subtractCount"],"mappings":"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","sourcesContent":["import {isWebGL2, assertWebGLContext} from '@luma.gl/gltools';\nimport {lumaStats} from '../init';\nimport {getKey, getKeyValue} from '../webgl-utils/constants-to-keys';\nimport {assert} from '../utils/assert';\nimport {uid} from '../utils/utils';\nimport {stubRemovedMethods} from '../utils/stub-methods';\n\nconst ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';\n\n// TODO - Handle context loss\n// function glGetContextLossCount(gl) {\n// return (gl.luma && gl.luma.glCount) || 0;\n// }\n\nexport default class Resource {\n constructor(gl, opts = {}) {\n assertWebGLContext(gl);\n\n const {id, userData = {}} = opts;\n this.gl = gl;\n // @ts-ignore\n this.gl2 = gl;\n // this.ext = polyfillContext(gl);\n this.id = id || uid(this.constructor.name);\n this.userData = userData;\n this._bound = false;\n\n // Set the handle\n // If handle was provided, use it, otherwise create a new handle\n\n // TODO - Stores the handle with context loss information\n // this.glCount = glGetContextLossCount(this.gl);\n\n // Default VertexArray needs to be created with null handle, so compare against undefined\n this._handle = opts.handle;\n if (this._handle === undefined) {\n this._handle = this._createHandle();\n }\n\n // Only meaningful for resources that allocate GPU memory\n this.byteLength = 0;\n\n this._addStats();\n }\n\n toString() {\n return `${this.constructor.name}(${this.id})`;\n }\n\n get handle() {\n // TODO - Add context loss handling\n // Will regenerate and reinitialize the handle if necessary\n // const glCount = glGetContextLossCount(this.gl);\n // if (this.glCount !== glCount) {\n // this._handle = this._createHandle(this.opts);\n // this._glCount = glCount;\n // // Reinitialize object\n // this.initialize(this.opts);\n // }\n return this._handle;\n }\n\n delete({deleteChildren = false} = {}) {\n // Delete this object, and get refs to any children\n // @ts-ignore\n const children = this._handle && this._deleteHandle(this._handle);\n if (this._handle) {\n this._removeStats();\n }\n this._handle = null;\n\n // Optionally, recursively delete the children\n // @ts-ignore\n if (children && deleteChildren) {\n // @ts-ignore\n children.filter(Boolean).forEach(child => child.delete());\n }\n\n return this;\n }\n\n bind(funcOrHandle = this.handle) {\n if (typeof funcOrHandle !== 'function') {\n this._bindHandle(funcOrHandle);\n return this;\n }\n\n let value;\n\n if (!this._bound) {\n this._bindHandle(this.handle);\n this._bound = true;\n\n value = funcOrHandle();\n\n this._bound = false;\n this._bindHandle(null);\n } else {\n value = funcOrHandle();\n }\n\n return value;\n }\n\n unbind() {\n this.bind(null);\n }\n\n /**\n * Query a Resource parameter\n *\n * @param {GLenum} pname\n * @return {GLint|GLfloat|GLenum} param\n */\n getParameter(pname, opts = {}) {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-ignore\n const parameters = this.constructor.PARAMETERS || {};\n\n // Use parameter definitions to handle unsupported parameters\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if we can query for this parameter\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n const webgl1Default = parameter.webgl1;\n const webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;\n const defaultValue = isWebgl2 ? webgl2Default : webgl1Default;\n return defaultValue;\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // Attempt to query for it and let WebGL report errors\n return this._getParameter(pname, opts);\n }\n\n // Many resources support a getParameter call -\n // getParameters will get all parameters - slow but useful for debugging\n // eslint-disable-next-line complexity\n getParameters(options = {}) {\n const {parameters, keys} = options;\n\n // Get parameter definitions for this Resource\n // @ts-ignore\n const PARAMETERS = this.constructor.PARAMETERS || {};\n\n const isWebgl2 = isWebGL2(this.gl);\n\n const values = {};\n\n // Query all parameters if no list provided\n const parameterKeys = parameters || Object.keys(PARAMETERS);\n\n // WEBGL limits\n for (const pname of parameterKeys) {\n const parameter = PARAMETERS[pname];\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n parameter &&\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (parameterAvailable) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getParameter(pname, options);\n if (keys && parameter.type === 'GLenum') {\n values[key] = getKey(this.gl, values[key]);\n }\n }\n }\n\n return values;\n }\n\n /**\n * Update a Resource setting\n *\n * @todo - cache parameter to avoid issuing WebGL calls?\n *\n * @param {string} pname - parameter (GL constant, value or key)\n * @param {GLint|GLfloat|GLenum} value\n * @return {Resource} returns self to enable chaining\n */\n setParameter(pname, value) {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-ignore\n const parameters = this.constructor.PARAMETERS || {};\n\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n throw new Error('Parameter not available on this platform');\n }\n\n // Handle string keys\n if (parameter.type === 'GLenum') {\n value = getKeyValue(value);\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // attempt to set it and let WebGL report errors\n this._setParameter(pname, value);\n return this;\n }\n\n /*\n * Batch update resource parameters\n * Assumes the subclass supports a setParameter call\n */\n setParameters(parameters) {\n for (const pname in parameters) {\n this.setParameter(pname, parameters[pname]);\n }\n return this;\n }\n\n // Install stubs for removed methods\n stubRemovedMethods(className, version, methodNames) {\n return stubRemovedMethods(this, className, version, methodNames);\n }\n\n // PUBLIC VIRTUAL METHODS\n initialize(opts) {}\n\n // PROTECTED METHODS - These must be overridden by subclass\n _createHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _deleteHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _bindHandle(handle) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _getOptsFromHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n /** @returns {number} */\n _getParameter(pname, opts) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _setParameter(pname, value) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n // PRIVATE METHODS\n\n _context() {\n this.gl.luma = this.gl.luma || {};\n return this.gl.luma;\n }\n\n _addStats() {\n const name = this.constructor.name;\n const stats = lumaStats.get('Resource Counts');\n\n stats.get('Resources Created').incrementCount();\n stats.get(`${name}s Created`).incrementCount();\n stats.get(`${name}s Active`).incrementCount();\n }\n\n _removeStats() {\n const name = this.constructor.name;\n const stats = lumaStats.get('Resource Counts');\n\n stats.get(`${name}s Active`).decrementCount();\n }\n\n _trackAllocatedMemory(bytes, name = this.constructor.name) {\n const stats = lumaStats.get('Memory Usage');\n\n stats.get('GPU Memory').addCount(bytes);\n stats.get(`${name} Memory`).addCount(bytes);\n this.byteLength = bytes;\n }\n\n _trackDeallocatedMemory(name = this.constructor.name) {\n const stats = lumaStats.get('Memory Usage');\n\n stats.get('GPU Memory').subtractCount(this.byteLength);\n stats.get(`${name} Memory`).subtractCount(this.byteLength);\n this.byteLength = 0;\n }\n}\n"],"file":"resource.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/resource.js"],"names":["isWebGL2","assertWebGLContext","lumaStats","getKey","getKeyValue","assert","uid","stubRemovedMethods","ERR_RESOURCE_METHOD_UNDEFINED","Resource","Symbol","toStringTag","constructor","gl","opts","id","userData","gl2","_bound","_handle","handle","undefined","_createHandle","byteLength","_addStats","toString","name","delete","deleteChildren","children","_deleteHandle","_removeStats","filter","Boolean","forEach","child","bind","funcOrHandle","_bindHandle","value","unbind","getParameter","pname","parameters","PARAMETERS","parameter","isWebgl2","parameterAvailable","getExtension","extension","webgl1Default","webgl1","webgl2Default","webgl2","defaultValue","_getParameter","getParameters","options","keys","values","parameterKeys","Object","key","type","setParameter","Error","_setParameter","setParameters","className","version","methodNames","initialize","_getOptsFromHandle","_context","luma","stats","get","incrementCount","decrementCount","_trackAllocatedMemory","bytes","addCount","_trackDeallocatedMemory","subtractCount"],"mappings":"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","sourcesContent":["import {isWebGL2, assertWebGLContext} from '@luma.gl/gltools';\nimport {lumaStats} from '../init';\nimport {getKey, getKeyValue} from '../webgl-utils/constants-to-keys';\nimport {assert} from '../utils/assert';\nimport {uid} from '../utils/utils';\nimport {stubRemovedMethods} from '../utils/stub-methods';\n\nconst ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';\n\n// TODO - Handle context loss\n// function glGetContextLossCount(gl) {\n// return (gl.luma && gl.luma.glCount) || 0;\n// }\n\nexport default class Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Resource';\n }\n constructor(gl, opts = {}) {\n assertWebGLContext(gl);\n\n const {id, userData = {}} = opts;\n this.gl = gl;\n // @ts-ignore\n this.gl2 = gl;\n // this.ext = polyfillContext(gl);\n this.id = id || uid(this[Symbol.toStringTag]);\n this.userData = userData;\n this._bound = false;\n\n // Set the handle\n // If handle was provided, use it, otherwise create a new handle\n\n // TODO - Stores the handle with context loss information\n // this.glCount = glGetContextLossCount(this.gl);\n\n // Default VertexArray needs to be created with null handle, so compare against undefined\n this._handle = opts.handle;\n if (this._handle === undefined) {\n this._handle = this._createHandle();\n }\n\n // Only meaningful for resources that allocate GPU memory\n this.byteLength = 0;\n\n this._addStats();\n }\n\n toString() {\n return `${this[Symbol.toStringTag] || this.constructor.name}(${this.id})`;\n }\n\n get handle() {\n // TODO - Add context loss handling\n // Will regenerate and reinitialize the handle if necessary\n // const glCount = glGetContextLossCount(this.gl);\n // if (this.glCount !== glCount) {\n // this._handle = this._createHandle(this.opts);\n // this._glCount = glCount;\n // // Reinitialize object\n // this.initialize(this.opts);\n // }\n return this._handle;\n }\n\n delete({deleteChildren = false} = {}) {\n // Delete this object, and get refs to any children\n // @ts-ignore\n const children = this._handle && this._deleteHandle(this._handle);\n if (this._handle) {\n this._removeStats();\n }\n this._handle = null;\n\n // Optionally, recursively delete the children\n // @ts-ignore\n if (children && deleteChildren) {\n // @ts-ignore\n children.filter(Boolean).forEach(child => child.delete());\n }\n\n return this;\n }\n\n bind(funcOrHandle = this.handle) {\n if (typeof funcOrHandle !== 'function') {\n this._bindHandle(funcOrHandle);\n return this;\n }\n\n let value;\n\n if (!this._bound) {\n this._bindHandle(this.handle);\n this._bound = true;\n\n value = funcOrHandle();\n\n this._bound = false;\n this._bindHandle(null);\n } else {\n value = funcOrHandle();\n }\n\n return value;\n }\n\n unbind() {\n this.bind(null);\n }\n\n /**\n * Query a Resource parameter\n *\n * @param {GLenum} pname\n * @return {GLint|GLfloat|GLenum} param\n */\n getParameter(pname, opts = {}) {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-ignore\n const parameters = this.constructor.PARAMETERS || {};\n\n // Use parameter definitions to handle unsupported parameters\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if we can query for this parameter\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n const webgl1Default = parameter.webgl1;\n const webgl2Default = 'webgl2' in parameter ? parameter.webgl2 : parameter.webgl1;\n const defaultValue = isWebgl2 ? webgl2Default : webgl1Default;\n return defaultValue;\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // Attempt to query for it and let WebGL report errors\n return this._getParameter(pname, opts);\n }\n\n // Many resources support a getParameter call -\n // getParameters will get all parameters - slow but useful for debugging\n // eslint-disable-next-line complexity\n getParameters(options = {}) {\n const {parameters, keys} = options;\n\n // Get parameter definitions for this Resource\n // @ts-ignore\n const PARAMETERS = this.constructor.PARAMETERS || {};\n\n const isWebgl2 = isWebGL2(this.gl);\n\n const values = {};\n\n // Query all parameters if no list provided\n const parameterKeys = parameters || Object.keys(PARAMETERS);\n\n // WEBGL limits\n for (const pname of parameterKeys) {\n const parameter = PARAMETERS[pname];\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n parameter &&\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (parameterAvailable) {\n const key = keys ? getKey(this.gl, pname) : pname;\n values[key] = this.getParameter(pname, options);\n if (keys && parameter.type === 'GLenum') {\n values[key] = getKey(this.gl, values[key]);\n }\n }\n }\n\n return values;\n }\n\n /**\n * Update a Resource setting\n *\n * @todo - cache parameter to avoid issuing WebGL calls?\n *\n * @param {string} pname - parameter (GL constant, value or key)\n * @param {GLint|GLfloat|GLenum} value\n * @return {Resource} returns self to enable chaining\n */\n setParameter(pname, value) {\n pname = getKeyValue(this.gl, pname);\n assert(pname);\n\n // @ts-ignore\n const parameters = this.constructor.PARAMETERS || {};\n\n const parameter = parameters[pname];\n if (parameter) {\n const isWebgl2 = isWebGL2(this.gl);\n\n // Check if this parameter is available on this platform\n const parameterAvailable =\n (!('webgl2' in parameter) || isWebgl2) &&\n (!('extension' in parameter) || this.gl.getExtension(parameter.extension));\n\n if (!parameterAvailable) {\n throw new Error('Parameter not available on this platform');\n }\n\n // Handle string keys\n if (parameter.type === 'GLenum') {\n value = getKeyValue(value);\n }\n }\n\n // If unknown parameter - Could be a valid parameter not covered by PARAMS\n // attempt to set it and let WebGL report errors\n this._setParameter(pname, value);\n return this;\n }\n\n /*\n * Batch update resource parameters\n * Assumes the subclass supports a setParameter call\n */\n setParameters(parameters) {\n for (const pname in parameters) {\n this.setParameter(pname, parameters[pname]);\n }\n return this;\n }\n\n // Install stubs for removed methods\n stubRemovedMethods(className, version, methodNames) {\n return stubRemovedMethods(this, className, version, methodNames);\n }\n\n // PUBLIC VIRTUAL METHODS\n initialize(opts) {}\n\n // PROTECTED METHODS - These must be overridden by subclass\n _createHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _deleteHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _bindHandle(handle) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _getOptsFromHandle() {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n /** @returns {number} */\n _getParameter(pname, opts) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n _setParameter(pname, value) {\n throw new Error(ERR_RESOURCE_METHOD_UNDEFINED);\n }\n\n // PRIVATE METHODS\n\n _context() {\n this.gl.luma = this.gl.luma || {};\n return this.gl.luma;\n }\n\n _addStats() {\n const name = this[Symbol.toStringTag];\n const stats = lumaStats.get('Resource Counts');\n\n stats.get('Resources Created').incrementCount();\n stats.get(`${name}s Created`).incrementCount();\n stats.get(`${name}s Active`).incrementCount();\n }\n\n _removeStats() {\n const name = this[Symbol.toStringTag];\n const stats = lumaStats.get('Resource Counts');\n\n stats.get(`${name}s Active`).decrementCount();\n }\n\n _trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {\n const stats = lumaStats.get('Memory Usage');\n\n stats.get('GPU Memory').addCount(bytes);\n stats.get(`${name} Memory`).addCount(bytes);\n this.byteLength = bytes;\n }\n\n _trackDeallocatedMemory(name = this[Symbol.toStringTag]) {\n const stats = lumaStats.get('Memory Usage');\n\n stats.get('GPU Memory').subtractCount(this.byteLength);\n stats.get(`${name} Memory`).subtractCount(this.byteLength);\n this.byteLength = 0;\n }\n}\n"],"file":"resource.js"}
|
|
@@ -5,6 +5,10 @@ import { uid } from '../utils/utils';
|
|
|
5
5
|
import Resource from './resource';
|
|
6
6
|
const ERR_SOURCE = 'Shader: GLSL source code must be a JavaScript string';
|
|
7
7
|
export class Shader extends Resource {
|
|
8
|
+
get [Symbol.toStringTag]() {
|
|
9
|
+
return 'Shader';
|
|
10
|
+
}
|
|
11
|
+
|
|
8
12
|
static getTypeName(shaderType) {
|
|
9
13
|
switch (shaderType) {
|
|
10
14
|
case 35633:
|
|
@@ -100,6 +104,10 @@ export class Shader extends Resource {
|
|
|
100
104
|
|
|
101
105
|
}
|
|
102
106
|
export class VertexShader extends Shader {
|
|
107
|
+
get [Symbol.toStringTag]() {
|
|
108
|
+
return 'VertexShader';
|
|
109
|
+
}
|
|
110
|
+
|
|
103
111
|
constructor(gl, props) {
|
|
104
112
|
if (typeof props === 'string') {
|
|
105
113
|
props = {
|
|
@@ -118,6 +126,10 @@ export class VertexShader extends Shader {
|
|
|
118
126
|
|
|
119
127
|
}
|
|
120
128
|
export class FragmentShader extends Shader {
|
|
129
|
+
get [Symbol.toStringTag]() {
|
|
130
|
+
return 'FragmentShader';
|
|
131
|
+
}
|
|
132
|
+
|
|
121
133
|
constructor(gl, props) {
|
|
122
134
|
if (typeof props === 'string') {
|
|
123
135
|
props = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/shader.js"],"names":["assertWebGLContext","log","parseGLSLCompilerError","getShaderName","assert","uid","Resource","ERR_SOURCE","Shader","getTypeName","shaderType","constructor","gl","props","source","id","initialize","shaderName","_compile","getParameter","pname","getShaderParameter","handle","toString","getName","getSource","getShaderSource","getTranslatedSource","extension","getExtension","getTranslatedShaderSource","startsWith","shaderSource","compileShader","compileStatus","infoLog","getShaderInfoLog","errors","warnings","error","warn","Error","_deleteHandle","deleteShader","_getOptsFromHandle","type","VertexShader","Object","assign","_createHandle","createShader","FragmentShader"],"mappings":"AACA,SAAQA,kBAAR,EAA4BC,GAA5B,QAAsC,kBAAtC;AACA,SAAQC,sBAAR,EAAgCC,aAAhC,QAAoD,eAApD;AACA,SAAQC,MAAR,QAAqB,iBAArB;AACA,SAAQC,GAAR,QAAkB,gBAAlB;AACA,OAAOC,QAAP,MAAqB,YAArB;AAEA,MAAMC,UAAU,GAAG,sDAAnB;AAGA,OAAO,MAAMC,MAAN,SAAqBF,QAArB,CAA8B;
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/shader.js"],"names":["assertWebGLContext","log","parseGLSLCompilerError","getShaderName","assert","uid","Resource","ERR_SOURCE","Shader","Symbol","toStringTag","getTypeName","shaderType","constructor","gl","props","source","id","initialize","shaderName","_compile","getParameter","pname","getShaderParameter","handle","toString","getName","getSource","getShaderSource","getTranslatedSource","extension","getExtension","getTranslatedShaderSource","startsWith","shaderSource","compileShader","compileStatus","infoLog","getShaderInfoLog","errors","warnings","error","warn","Error","_deleteHandle","deleteShader","_getOptsFromHandle","type","VertexShader","Object","assign","_createHandle","createShader","FragmentShader"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {assertWebGLContext, log} from '@luma.gl/gltools';\nimport {parseGLSLCompilerError, getShaderName} from '../glsl-utils';\nimport {assert} from '../utils/assert';\nimport {uid} from '../utils/utils';\nimport Resource from './resource';\n\nconst ERR_SOURCE = 'Shader: GLSL source code must be a JavaScript string';\n\n// For now this is an internal class\nexport class Shader extends Resource {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Shader';\n }\n\n static getTypeName(shaderType) {\n switch (shaderType) {\n case GL.VERTEX_SHADER:\n return 'vertex-shader';\n case GL.FRAGMENT_SHADER:\n return 'fragment-shader';\n default:\n assert(false);\n return 'unknown';\n }\n }\n\n /* eslint-disable max-statements */\n constructor(gl, props) {\n assertWebGLContext(gl);\n\n // Validate arguments\n assert(typeof props.source === 'string', ERR_SOURCE);\n\n // Deduce an id, from shader source, or supplied id, or shader type\n const id =\n getShaderName(props.source, null) ||\n props.id ||\n uid(`unnamed ${Shader.getTypeName(props.shaderType)}`);\n\n super(gl, {id});\n\n this.shaderType = props.shaderType;\n this.source = props.source;\n\n this.initialize(props);\n }\n\n initialize({source}) {\n const shaderName = getShaderName(source, null);\n if (shaderName) {\n this.id = uid(shaderName);\n }\n this._compile(source);\n }\n\n // Accessors\n\n getParameter(pname) {\n return this.gl.getShaderParameter(this.handle, pname);\n }\n\n toString() {\n return `${Shader.getTypeName(this.shaderType)}:${this.id}`;\n }\n\n getName() {\n return getShaderName(this.source) || 'unnamed-shader';\n }\n\n getSource() {\n return this.gl.getShaderSource(this.handle);\n }\n\n // Debug method - Returns translated source if available\n getTranslatedSource() {\n const extension = this.gl.getExtension('WEBGL_debug_shaders');\n return extension\n ? extension.getTranslatedShaderSource(this.handle)\n : 'No translated source available. WEBGL_debug_shaders not implemented';\n }\n\n // PRIVATE METHODS\n _compile(source = this.source) {\n if (!source.startsWith('#version ')) {\n source = `#version 100\\n${source}`;\n }\n this.source = source;\n this.gl.shaderSource(this.handle, this.source);\n this.gl.compileShader(this.handle);\n\n // TODO - For performance reasons, avoid checking shader compilation errors on production?\n // TODO - Load log even when no error reported, to catch warnings?\n // https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings\n const compileStatus = this.getParameter(GL.COMPILE_STATUS);\n if (!compileStatus) {\n const infoLog = this.gl.getShaderInfoLog(this.handle);\n const {shaderName, errors, warnings} = parseGLSLCompilerError(\n infoLog,\n this.source,\n this.shaderType,\n this.id\n );\n log.error(`GLSL compilation errors in ${shaderName}\\n${errors}`)();\n log.warn(`GLSL compilation warnings in ${shaderName}\\n${warnings}`)();\n throw new Error(`GLSL compilation errors in ${shaderName}`);\n }\n }\n\n _deleteHandle() {\n this.gl.deleteShader(this.handle);\n }\n\n _getOptsFromHandle() {\n return {\n type: this.getParameter(GL.SHADER_TYPE),\n source: this.getSource()\n };\n }\n}\n\nexport class VertexShader extends Shader {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'VertexShader';\n }\n\n constructor(gl, props) {\n // Signature: new VertexShader(gl, source)\n if (typeof props === 'string') {\n props = {source: props};\n }\n super(gl, Object.assign({}, props, {shaderType: GL.VERTEX_SHADER}));\n }\n\n // PRIVATE METHODS\n _createHandle() {\n return this.gl.createShader(GL.VERTEX_SHADER);\n }\n}\n\nexport class FragmentShader extends Shader {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'FragmentShader';\n }\n constructor(gl, props) {\n // Signature: new FragmentShader(gl, source)\n if (typeof props === 'string') {\n props = {source: props};\n }\n\n super(gl, Object.assign({}, props, {shaderType: GL.FRAGMENT_SHADER}));\n }\n\n // PRIVATE METHODS\n _createHandle() {\n return this.gl.createShader(GL.FRAGMENT_SHADER);\n }\n}\n"],"file":"shader.js"}
|
|
@@ -2,6 +2,10 @@ import { assertWebGLContext } from '@luma.gl/gltools';
|
|
|
2
2
|
import Texture from './texture';
|
|
3
3
|
import { loadImage } from '../utils/load-file';
|
|
4
4
|
export default class Texture2D extends Texture {
|
|
5
|
+
get [Symbol.toStringTag]() {
|
|
6
|
+
return 'Texture2D';
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
static isSupported(gl, opts) {
|
|
6
10
|
return Texture.isSupported(gl, opts);
|
|
7
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/texture-2d.js"],"names":["assertWebGLContext","Texture","loadImage","Texture2D","isSupported","gl","opts","constructor","props","Promise","data","Object","assign","target","initialize","seal"],"mappings":"AACA,SAAQA,kBAAR,QAAiC,kBAAjC;AACA,OAAOC,OAAP,MAAoB,WAApB;AACA,SAAQC,SAAR,QAAwB,oBAAxB;AAEA,eAAe,MAAMC,SAAN,SAAwBF,OAAxB,CAAgC;
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/texture-2d.js"],"names":["assertWebGLContext","Texture","loadImage","Texture2D","Symbol","toStringTag","isSupported","gl","opts","constructor","props","Promise","data","Object","assign","target","initialize","seal"],"mappings":"AACA,SAAQA,kBAAR,QAAiC,kBAAjC;AACA,OAAOC,OAAP,MAAoB,WAApB;AACA,SAAQC,SAAR,QAAwB,oBAAxB;AAEA,eAAe,MAAMC,SAAN,SAAwBF,OAAxB,CAAgC;AAE7C,OAAKG,MAAM,CAACC,WAAZ,IAA2B;AACzB,WAAO,WAAP;AACD;;AAED,SAAOC,WAAP,CAAmBC,EAAnB,EAAuBC,IAAvB,EAA6B;AAC3B,WAAOP,OAAO,CAACK,WAAR,CAAoBC,EAApB,EAAwBC,IAAxB,CAAP;AACD;;AAEDC,EAAAA,WAAW,CAACF,EAAD,EAAKG,KAAK,GAAG,EAAb,EAAiB;AAC1BV,IAAAA,kBAAkB,CAACO,EAAD,CAAlB;;AAGA,QAAIG,KAAK,YAAYC,OAAjB,IAA4B,OAAOD,KAAP,KAAiB,QAAjD,EAA2D;AACzDA,MAAAA,KAAK,GAAG;AAACE,QAAAA,IAAI,EAAEF;AAAP,OAAR;AACD;;AAGD,QAAI,OAAOA,KAAK,CAACE,IAAb,KAAsB,QAA1B,EAAoC;AAClCF,MAAAA,KAAK,GAAGG,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBJ,KAAlB,EAAyB;AAACE,QAAAA,IAAI,EAAEV,SAAS,CAACQ,KAAK,CAACE,IAAP;AAAhB,OAAzB,CAAR;AACD;;AAED,UAAML,EAAN,EAAUM,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBJ,KAAlB,EAAyB;AAACK,MAAAA,MAAM;AAAP,KAAzB,CAAV;AAEA,SAAKC,UAAL,CAAgBN,KAAhB;AAEAG,IAAAA,MAAM,CAACI,IAAP,CAAY,IAAZ;AACD;;AA5B4C","sourcesContent":["import GL from '@luma.gl/constants';\nimport {assertWebGLContext} from '@luma.gl/gltools';\nimport Texture from './texture';\nimport {loadImage} from '../utils/load-file';\n\nexport default class Texture2D extends Texture {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Texture2D';\n }\n\n static isSupported(gl, opts) {\n return Texture.isSupported(gl, opts);\n }\n\n constructor(gl, props = {}) {\n assertWebGLContext(gl);\n\n // Signature: new Texture2D(gl, url | Promise)\n if (props instanceof Promise || typeof props === 'string') {\n props = {data: props};\n }\n\n // Signature: new Texture2D(gl, {data: url})\n if (typeof props.data === 'string') {\n props = Object.assign({}, props, {data: loadImage(props.data)});\n }\n\n super(gl, Object.assign({}, props, {target: GL.TEXTURE_2D}));\n\n this.initialize(props);\n\n Object.seal(this);\n }\n}\n"],"file":"texture-2d.js"}
|
|
@@ -3,6 +3,10 @@ import Texture from './texture';
|
|
|
3
3
|
import { DATA_FORMAT_CHANNELS, TYPE_SIZES } from './texture-formats';
|
|
4
4
|
import Buffer from './buffer';
|
|
5
5
|
export default class Texture3D extends Texture {
|
|
6
|
+
get [Symbol.toStringTag]() {
|
|
7
|
+
return 'Texture3D';
|
|
8
|
+
}
|
|
9
|
+
|
|
6
10
|
static isSupported(gl) {
|
|
7
11
|
return isWebGL2(gl);
|
|
8
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/texture-3d.js"],"names":["isWebGL2","assertWebGL2Context","withParameters","Texture","DATA_FORMAT_CHANNELS","TYPE_SIZES","Buffer","Texture3D","isSupported","gl","constructor","props","Object","assign","depth","target","unpackFlipY","initialize","seal","setImageData","level","dataFormat","width","height","border","format","type","offset","data","parameters","_trackDeallocatedMemory","bindTexture","handle","ArrayBuffer","isView","texImage3D","bindBuffer","byteLength","_trackAllocatedMemory","channels","channelSize","loaded"],"mappings":"AACA,SAAQA,QAAR,EAAkBC,mBAAlB,EAAuCC,cAAvC,QAA4D,kBAA5D;AACA,OAAOC,OAAP,MAAoB,WAApB;AACA,SAAQC,oBAAR,EAA8BC,UAA9B,QAA+C,mBAA/C;AACA,OAAOC,MAAP,MAAmB,UAAnB;AAEA,eAAe,MAAMC,SAAN,SAAwBJ,OAAxB,CAAgC;
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/texture-3d.js"],"names":["isWebGL2","assertWebGL2Context","withParameters","Texture","DATA_FORMAT_CHANNELS","TYPE_SIZES","Buffer","Texture3D","Symbol","toStringTag","isSupported","gl","constructor","props","Object","assign","depth","target","unpackFlipY","initialize","seal","setImageData","level","dataFormat","width","height","border","format","type","offset","data","parameters","_trackDeallocatedMemory","bindTexture","handle","ArrayBuffer","isView","texImage3D","bindBuffer","byteLength","_trackAllocatedMemory","channels","channelSize","loaded"],"mappings":"AACA,SAAQA,QAAR,EAAkBC,mBAAlB,EAAuCC,cAAvC,QAA4D,kBAA5D;AACA,OAAOC,OAAP,MAAoB,WAApB;AACA,SAAQC,oBAAR,EAA8BC,UAA9B,QAA+C,mBAA/C;AACA,OAAOC,MAAP,MAAmB,UAAnB;AAEA,eAAe,MAAMC,SAAN,SAAwBJ,OAAxB,CAAgC;AAE7C,OAAKK,MAAM,CAACC,WAAZ,IAA2B;AACzB,WAAO,WAAP;AACD;;AAED,SAAOC,WAAP,CAAmBC,EAAnB,EAAuB;AACrB,WAAOX,QAAQ,CAACW,EAAD,CAAf;AACD;;AAEDC,EAAAA,WAAW,CAACD,EAAD,EAAKE,KAAK,GAAG,EAAb,EAAiB;AAC1BZ,IAAAA,mBAAmB,CAACU,EAAD,CAAnB;AACAE,IAAAA,KAAK,GAAGC,MAAM,CAACC,MAAP,CAAc;AAACC,MAAAA,KAAK,EAAE;AAAR,KAAd,EAA0BH,KAA1B,EAAiC;AAACI,MAAAA,MAAM,OAAP;AAAwBC,MAAAA,WAAW,EAAE;AAArC,KAAjC,CAAR;AACA,UAAMP,EAAN,EAAUE,KAAV;AACA,SAAKM,UAAL,CAAgBN,KAAhB;AAEAC,IAAAA,MAAM,CAACM,IAAP,CAAY,IAAZ;AACD;;AAGDC,EAAAA,YAAY,CAAC;AACXC,IAAAA,KAAK,GAAG,CADG;AAEXC,IAAAA,UAAU,OAFC;AAGXC,IAAAA,KAHW;AAIXC,IAAAA,MAJW;AAKXT,IAAAA,KAAK,GAAG,CALG;AAMXU,IAAAA,MAAM,GAAG,CANE;AAOXC,IAAAA,MAPW;AAQXC,IAAAA,IAAI,OARO;AASXC,IAAAA,MAAM,GAAG,CATE;AAUXC,IAAAA,IAVW;AAWXC,IAAAA,UAAU,GAAG;AAXF,GAAD,EAYT;AACD,SAAKC,uBAAL,CAA6B,SAA7B;;AAEA,SAAKrB,EAAL,CAAQsB,WAAR,CAAoB,KAAKhB,MAAzB,EAAiC,KAAKiB,MAAtC;AAEAhC,IAAAA,cAAc,CAAC,KAAKS,EAAN,EAAUoB,UAAV,EAAsB,MAAM;AACxC,UAAII,WAAW,CAACC,MAAZ,CAAmBN,IAAnB,CAAJ,EAA8B;AAE5B,aAAKnB,EAAL,CAAQ0B,UAAR,CACE,KAAKpB,MADP,EAEEK,KAFF,EAGEC,UAHF,EAIEC,KAJF,EAKEC,MALF,EAMET,KANF,EAOEU,MAPF,EAQEC,MARF,EASEC,IATF,EAUEE,IAVF;AAYD;;AAED,UAAIA,IAAI,YAAYxB,MAApB,EAA4B;AAC1B,aAAKK,EAAL,CAAQ2B,UAAR,QAA2CR,IAAI,CAACI,MAAhD;AAEA,aAAKvB,EAAL,CAAQ0B,UAAR,CACE,KAAKpB,MADP,EAEEK,KAFF,EAGEC,UAHF,EAIEC,KAJF,EAKEC,MALF,EAMET,KANF,EAOEU,MAPF,EAQEC,MARF,EASEC,IATF,EAUEC,MAVF;AAYD;AACF,KAjCa,CAAd;;AAmCA,QAAIC,IAAI,IAAIA,IAAI,CAACS,UAAjB,EAA6B;AAC3B,WAAKC,qBAAL,CAA2BV,IAAI,CAACS,UAAhC,EAA4C,SAA5C;AACD,KAFD,MAEO;AAGL,YAAME,QAAQ,GAAGrC,oBAAoB,CAAC,KAAKmB,UAAN,CAApB,IAAyC,CAA1D;AAEA,YAAMmB,WAAW,GAAGrC,UAAU,CAAC,KAAKuB,IAAN,CAAV,IAAyB,CAA7C;;AAEA,WAAKY,qBAAL,CACE,KAAKhB,KAAL,GAAa,KAAKC,MAAlB,GAA2B,KAAKT,KAAhC,GAAwCyB,QAAxC,GAAmDC,WADrD,EAEE,SAFF;AAID;;AAED,SAAKC,MAAL,GAAc,IAAd;AAEA,WAAO,IAAP;AACD;;AA1F4C","sourcesContent":["import GL from '@luma.gl/constants';\nimport {isWebGL2, assertWebGL2Context, withParameters} from '@luma.gl/gltools';\nimport Texture from './texture';\nimport {DATA_FORMAT_CHANNELS, TYPE_SIZES} from './texture-formats';\nimport Buffer from './buffer';\n\nexport default class Texture3D extends Texture {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'Texture3D';\n }\n\n static isSupported(gl) {\n return isWebGL2(gl);\n }\n\n constructor(gl, props = {}) {\n assertWebGL2Context(gl);\n props = Object.assign({depth: 1}, props, {target: GL.TEXTURE_3D, unpackFlipY: false});\n super(gl, props);\n this.initialize(props);\n\n Object.seal(this);\n }\n\n // Image 3D copies from Typed Array or WebGLBuffer\n setImageData({\n level = 0,\n dataFormat = GL.RGBA,\n width,\n height,\n depth = 1,\n border = 0,\n format,\n type = GL.UNSIGNED_BYTE,\n offset = 0,\n data,\n parameters = {}\n }) {\n this._trackDeallocatedMemory('Texture');\n\n this.gl.bindTexture(this.target, this.handle);\n\n withParameters(this.gl, parameters, () => {\n if (ArrayBuffer.isView(data)) {\n // @ts-ignore\n this.gl.texImage3D(\n this.target,\n level,\n dataFormat,\n width,\n height,\n depth,\n border,\n format,\n type,\n data\n );\n }\n\n if (data instanceof Buffer) {\n this.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle);\n // @ts-ignore\n this.gl.texImage3D(\n this.target,\n level,\n dataFormat,\n width,\n height,\n depth,\n border,\n format,\n type,\n offset\n );\n }\n });\n\n if (data && data.byteLength) {\n this._trackAllocatedMemory(data.byteLength, 'Texture');\n } else {\n // NOTE(Tarek): Default to RGBA bytes\n // @ts-ignore\n const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;\n // @ts-ignore\n const channelSize = TYPE_SIZES[this.type] || 1;\n\n this._trackAllocatedMemory(\n this.width * this.height * this.depth * channels * channelSize,\n 'Texture'\n );\n }\n\n this.loaded = true;\n\n return this;\n }\n}\n"],"file":"texture-3d.js"}
|
|
@@ -2,6 +2,10 @@ import { log, assertWebGLContext } from '@luma.gl/gltools';
|
|
|
2
2
|
import Texture from './texture';
|
|
3
3
|
const FACES = [34069, 34070, 34071, 34072, 34073, 34074];
|
|
4
4
|
export default class TextureCube extends Texture {
|
|
5
|
+
get [Symbol.toStringTag]() {
|
|
6
|
+
return 'TextureCube';
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
constructor(gl, props = {}) {
|
|
6
10
|
assertWebGLContext(gl);
|
|
7
11
|
super(gl, Object.assign({}, props, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/classes/texture-cube.js"],"names":["log","assertWebGLContext","Texture","FACES","TextureCube","constructor","gl","props","Object","assign","target","initialize","seal","mipmaps","parameters","opts","setCubeMapImageData","then","loaded","generateMipmap","setParameters","subImage","face","data","x","y","mipmapLevel","_subImage","width","height","pixels","border","format","type","imageDataMap","resolvedFaces","Promise","all","map","facePixels","Array","isArray","bind","forEach","index","length","warn","id","image","lodLevel","texImage2D","unbind","setImageDataForFace","options","imageData","resolvedImageData"],"mappings":"AACA,SAAQA,GAAR,EAAaC,kBAAb,QAAsC,kBAAtC;AACA,OAAOC,OAAP,MAAoB,WAApB;AAEA,MAAMC,KAAK,GAAG,0CAAd;AASA,eAAe,MAAMC,WAAN,SAA0BF,OAA1B,CAAkC;
|
|
1
|
+
{"version":3,"sources":["../../../src/classes/texture-cube.js"],"names":["log","assertWebGLContext","Texture","FACES","TextureCube","Symbol","toStringTag","constructor","gl","props","Object","assign","target","initialize","seal","mipmaps","parameters","opts","setCubeMapImageData","then","loaded","generateMipmap","setParameters","subImage","face","data","x","y","mipmapLevel","_subImage","width","height","pixels","border","format","type","imageDataMap","resolvedFaces","Promise","all","map","facePixels","Array","isArray","bind","forEach","index","length","warn","id","image","lodLevel","texImage2D","unbind","setImageDataForFace","options","imageData","resolvedImageData"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {log, assertWebGLContext} from '@luma.gl/gltools';\nimport Texture from './texture';\n\nconst FACES = [\n GL.TEXTURE_CUBE_MAP_POSITIVE_X,\n GL.TEXTURE_CUBE_MAP_NEGATIVE_X,\n GL.TEXTURE_CUBE_MAP_POSITIVE_Y,\n GL.TEXTURE_CUBE_MAP_NEGATIVE_Y,\n GL.TEXTURE_CUBE_MAP_POSITIVE_Z,\n GL.TEXTURE_CUBE_MAP_NEGATIVE_Z\n];\n\nexport default class TextureCube extends Texture {\n // eslint-disable-next-line accessor-pairs\n get [Symbol.toStringTag]() {\n return 'TextureCube';\n }\n\n constructor(gl, props = {}) {\n assertWebGLContext(gl);\n\n super(gl, Object.assign({}, props, {target: GL.TEXTURE_CUBE_MAP}));\n\n this.initialize(props);\n\n Object.seal(this);\n }\n\n initialize(props = {}) {\n const {mipmaps = true, parameters = {}} = props;\n\n // Store props for accessors\n this.opts = props;\n\n // @ts-ignore\n this.setCubeMapImageData(props).then(() => {\n this.loaded = true;\n\n // TODO - should genMipmap() be called on the cubemap or on the faces?\n // TODO - without generateMipmap() cube textures do not work at all!!! Why?\n if (mipmaps) {\n this.generateMipmap(props);\n }\n\n this.setParameters(parameters);\n });\n return this;\n }\n\n subImage({face, data, x = 0, y = 0, mipmapLevel = 0}) {\n // @ts-ignore TODO - is this a bug?\n return this._subImage({target: face, data, x, y, mipmapLevel});\n }\n\n /* eslint-disable max-statements, max-len */\n async setCubeMapImageData({\n width,\n height,\n pixels,\n data,\n border = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE\n }) {\n const {gl} = this;\n const imageDataMap = pixels || data;\n\n // pixel data (imageDataMap) is an Object from Face to Image or Promise.\n // For example:\n // {\n // GL.TEXTURE_CUBE_MAP_POSITIVE_X : Image-or-Promise,\n // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : Image-or-Promise,\n // ... }\n // To provide multiple level-of-details (LODs) this can be Face to Array\n // of Image or Promise, like this\n // {\n // GL.TEXTURE_CUBE_MAP_POSITIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],\n // GL.TEXTURE_CUBE_MAP_NEGATIVE_X : [Image-or-Promise-LOD-0, Image-or-Promise-LOD-1],\n // ... }\n\n const resolvedFaces = await Promise.all(\n FACES.map(face => {\n const facePixels = imageDataMap[face];\n return Promise.all(Array.isArray(facePixels) ? facePixels : [facePixels]);\n })\n );\n\n this.bind();\n\n FACES.forEach((face, index) => {\n if (resolvedFaces[index].length > 1 && this.opts.mipmaps !== false) {\n // If the user provides multiple LODs, then automatic mipmap\n // generation generateMipmap() should be disabled to avoid overwritting them.\n log.warn(`${this.id} has mipmap and multiple LODs.`)();\n }\n resolvedFaces[index].forEach((image, lodLevel) => {\n // TODO: adjust width & height for LOD!\n if (width && height) {\n gl.texImage2D(face, lodLevel, format, width, height, border, format, type, image);\n } else {\n gl.texImage2D(face, lodLevel, format, format, type, image);\n }\n });\n });\n\n this.unbind();\n }\n\n // TODO: update this method to accept LODs\n setImageDataForFace(options) {\n const {\n face,\n width,\n height,\n pixels,\n data,\n border = 0,\n format = GL.RGBA,\n type = GL.UNSIGNED_BYTE\n // generateMipmap = false // TODO\n } = options;\n\n const {gl} = this;\n\n const imageData = pixels || data;\n\n this.bind();\n if (imageData instanceof Promise) {\n imageData.then(resolvedImageData =>\n this.setImageDataForFace(\n Object.assign({}, options, {\n face,\n data: resolvedImageData,\n pixels: resolvedImageData\n })\n )\n );\n } else if (this.width || this.height) {\n gl.texImage2D(face, 0, format, width, height, border, format, type, imageData);\n } else {\n gl.texImage2D(face, 0, format, format, type, imageData);\n }\n\n return this;\n }\n}\n\nTextureCube.FACES = FACES;\n"],"file":"texture-cube.js"}
|
|
@@ -9,6 +9,10 @@ const NPOT_MIN_FILTERS = [9729, 9728];
|
|
|
9
9
|
const WebGLBuffer = globalThis.WebGLBuffer || function WebGLBuffer() {};
|
|
10
10
|
|
|
11
11
|
export default class Texture extends Resource {
|
|
12
|
+
get [Symbol.toStringTag]() {
|
|
13
|
+
return 'Texture';
|
|
14
|
+
}
|
|
15
|
+
|
|
12
16
|
static isSupported(gl, opts = {}) {
|
|
13
17
|
const {
|
|
14
18
|
format,
|
|
@@ -281,6 +285,7 @@ export default class Texture extends Resource {
|
|
|
281
285
|
compressed
|
|
282
286
|
}));
|
|
283
287
|
let gl2;
|
|
288
|
+
let compressedTextureSize = 0;
|
|
284
289
|
withParameters(this.gl, parameters, () => {
|
|
285
290
|
switch (dataType) {
|
|
286
291
|
case 'null':
|
|
@@ -310,6 +315,7 @@ export default class Texture extends Resource {
|
|
|
310
315
|
case 'compressed':
|
|
311
316
|
for (const [levelIndex, levelData] of data.entries()) {
|
|
312
317
|
gl.compressedTexImage2D(target, levelIndex, levelData.format, levelData.width, levelData.height, border, levelData.data);
|
|
318
|
+
compressedTextureSize += levelData.levelSize;
|
|
313
319
|
}
|
|
314
320
|
|
|
315
321
|
break;
|
|
@@ -319,7 +325,9 @@ export default class Texture extends Resource {
|
|
|
319
325
|
}
|
|
320
326
|
});
|
|
321
327
|
|
|
322
|
-
if (
|
|
328
|
+
if (dataType === 'compressed') {
|
|
329
|
+
this._trackAllocatedMemory(compressedTextureSize, 'Texture');
|
|
330
|
+
} else if (data && data.byteLength) {
|
|
323
331
|
this._trackAllocatedMemory(data.byteLength, 'Texture');
|
|
324
332
|
} else {
|
|
325
333
|
const channels = DATA_FORMAT_CHANNELS[this.dataFormat] || 4;
|
|
@@ -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","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","texImage2D","bindBuffer","levelIndex","levelData","entries","compressedTexImage2D","byteLength","_trackAllocatedMemory","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 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 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 }\n\n break;\n default:\n assert(false, 'Unknown image data type');\n }\n });\n\n 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"}
|
|
@@ -3,6 +3,10 @@ import Resource from './resource';
|
|
|
3
3
|
import Buffer from './buffer';
|
|
4
4
|
import { isObjectEmpty } from '../utils/utils';
|
|
5
5
|
export default class TransformFeedback extends Resource {
|
|
6
|
+
get [Symbol.toStringTag]() {
|
|
7
|
+
return 'TransformFeedback';
|
|
8
|
+
}
|
|
9
|
+
|
|
6
10
|
static isSupported(gl) {
|
|
7
11
|
return isWebGL2(gl);
|
|
8
12
|
}
|