@luma.gl/webgl 8.5.17 → 8.5.18

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.
@@ -291,6 +291,8 @@ var Resource = function (_Symbol$toStringTag) {
291
291
  this._trackAllocatedMemoryForContext(bytes, name);
292
292
 
293
293
  this._trackAllocatedMemoryForContext(bytes, name, this.gl.canvas && this.gl.canvas.id);
294
+
295
+ this.byteLength = bytes;
294
296
  }
295
297
  }, {
296
298
  key: "_trackAllocatedMemoryForContext",
@@ -302,7 +304,6 @@ var Resource = function (_Symbol$toStringTag) {
302
304
 
303
305
  stats.get('GPU Memory').addCount(bytes);
304
306
  stats.get("".concat(name, " Memory")).addCount(bytes);
305
- this.byteLength = bytes;
306
307
  }
307
308
  }, {
308
309
  key: "_trackDeallocatedMemory",
@@ -312,6 +313,8 @@ var Resource = function (_Symbol$toStringTag) {
312
313
  this._trackDeallocatedMemoryForContext(name);
313
314
 
314
315
  this._trackDeallocatedMemoryForContext(name, this.gl.canvas && this.gl.canvas.id);
316
+
317
+ this.byteLength = 0;
315
318
  }
316
319
  }, {
317
320
  key: "_trackDeallocatedMemoryForContext",
@@ -323,7 +326,6 @@ var Resource = function (_Symbol$toStringTag) {
323
326
 
324
327
  stats.get('GPU Memory').subtractCount(this.byteLength);
325
328
  stats.get("".concat(name, " Memory")).subtractCount(this.byteLength);
326
- this.byteLength = 0;
327
329
  }
328
330
  }]);
329
331
  return Resource;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/classes/resource.js"],"names":["ERR_RESOURCE_METHOD_UNDEFINED","Resource","gl","opts","id","userData","gl2","Symbol","toStringTag","_bound","_handle","handle","undefined","_createHandle","byteLength","_addStats","constructor","name","deleteChildren","children","_deleteHandle","_removeStats","filter","Boolean","forEach","child","delete","funcOrHandle","_bindHandle","value","bind","pname","parameters","PARAMETERS","parameter","isWebgl2","parameterAvailable","getExtension","extension","webgl1Default","webgl1","webgl2Default","webgl2","defaultValue","_getParameter","options","keys","values","parameterKeys","Object","key","getParameter","type","Error","_setParameter","setParameter","className","version","methodNames","luma","stats","lumaStats","get","incrementCount","decrementCount","bytes","_trackAllocatedMemoryForContext","canvas","addCount","_trackDeallocatedMemoryForContext","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 this._trackAllocatedMemoryForContext(bytes, name);\n this._trackAllocatedMemoryForContext(bytes, name, this.gl.canvas && this.gl.canvas.id);\n }\n\n _trackAllocatedMemoryForContext(bytes, name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\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 this._trackDeallocatedMemoryForContext(name);\n this._trackDeallocatedMemoryForContext(name, this.gl.canvas && this.gl.canvas.id);\n }\n\n _trackDeallocatedMemoryForContext(name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\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":["ERR_RESOURCE_METHOD_UNDEFINED","Resource","gl","opts","id","userData","gl2","Symbol","toStringTag","_bound","_handle","handle","undefined","_createHandle","byteLength","_addStats","constructor","name","deleteChildren","children","_deleteHandle","_removeStats","filter","Boolean","forEach","child","delete","funcOrHandle","_bindHandle","value","bind","pname","parameters","PARAMETERS","parameter","isWebgl2","parameterAvailable","getExtension","extension","webgl1Default","webgl1","webgl2Default","webgl2","defaultValue","_getParameter","options","keys","values","parameterKeys","Object","key","getParameter","type","Error","_setParameter","setParameter","className","version","methodNames","luma","stats","lumaStats","get","incrementCount","decrementCount","bytes","_trackAllocatedMemoryForContext","canvas","addCount","_trackDeallocatedMemoryForContext","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 /**\n * Track common allocated memory and memory based on particular gl context.\n * @param {number} bytes\n * @param {string} name\n */\n _trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {\n this._trackAllocatedMemoryForContext(bytes, name);\n this._trackAllocatedMemoryForContext(bytes, name, this.gl.canvas && this.gl.canvas.id);\n this.byteLength = bytes;\n }\n\n _trackAllocatedMemoryForContext(bytes, name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\n stats.get('GPU Memory').addCount(bytes);\n stats.get(`${name} Memory`).addCount(bytes);\n }\n\n /**\n * Deallocate memory for common statistic and for each gl context as well.\n * @param {string} name\n */\n _trackDeallocatedMemory(name = this[Symbol.toStringTag]) {\n this._trackDeallocatedMemoryForContext(name);\n this._trackDeallocatedMemoryForContext(name, this.gl.canvas && this.gl.canvas.id);\n this.byteLength = 0;\n }\n\n _trackDeallocatedMemoryForContext(name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\n\n stats.get('GPU Memory').subtractCount(this.byteLength);\n stats.get(`${name} Memory`).subtractCount(this.byteLength);\n }\n}\n"],"file":"resource.js"}
package/dist/es5/init.js CHANGED
@@ -17,7 +17,7 @@ var _stats = require("@probe.gl/stats");
17
17
 
18
18
  var _env = require("@probe.gl/env");
19
19
 
20
- var VERSION = typeof "8.5.17" !== 'undefined' ? "8.5.17" : 'untranspiled source';
20
+ var VERSION = typeof "8.5.18" !== 'undefined' ? "8.5.18" : 'untranspiled source';
21
21
  var STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';
22
22
 
23
23
  var StatsManager = function () {
@@ -228,6 +228,8 @@ export default class Resource {
228
228
  this._trackAllocatedMemoryForContext(bytes, name);
229
229
 
230
230
  this._trackAllocatedMemoryForContext(bytes, name, this.gl.canvas && this.gl.canvas.id);
231
+
232
+ this.byteLength = bytes;
231
233
  }
232
234
 
233
235
  _trackAllocatedMemoryForContext(bytes) {
@@ -236,7 +238,6 @@ export default class Resource {
236
238
  const stats = lumaStats.get("Memory Usage".concat(id));
237
239
  stats.get('GPU Memory').addCount(bytes);
238
240
  stats.get("".concat(name, " Memory")).addCount(bytes);
239
- this.byteLength = bytes;
240
241
  }
241
242
 
242
243
  _trackDeallocatedMemory() {
@@ -245,6 +246,8 @@ export default class Resource {
245
246
  this._trackDeallocatedMemoryForContext(name);
246
247
 
247
248
  this._trackDeallocatedMemoryForContext(name, this.gl.canvas && this.gl.canvas.id);
249
+
250
+ this.byteLength = 0;
248
251
  }
249
252
 
250
253
  _trackDeallocatedMemoryForContext() {
@@ -253,7 +256,6 @@ export default class Resource {
253
256
  const stats = lumaStats.get("Memory Usage".concat(id));
254
257
  stats.get('GPU Memory').subtractCount(this.byteLength);
255
258
  stats.get("".concat(name, " Memory")).subtractCount(this.byteLength);
256
- this.byteLength = 0;
257
259
  }
258
260
 
259
261
  }
@@ -1 +1 @@
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","_trackAllocatedMemoryForContext","canvas","addCount","_trackDeallocatedMemory","_trackDeallocatedMemoryForContext","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 this._trackAllocatedMemoryForContext(bytes, name);\n this._trackAllocatedMemoryForContext(bytes, name, this.gl.canvas && this.gl.canvas.id);\n }\n\n _trackAllocatedMemoryForContext(bytes, name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\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 this._trackDeallocatedMemoryForContext(name);\n this._trackDeallocatedMemoryForContext(name, this.gl.canvas && this.gl.canvas.id);\n }\n\n _trackDeallocatedMemoryForContext(name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\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","_trackAllocatedMemoryForContext","canvas","addCount","_trackDeallocatedMemory","_trackDeallocatedMemoryForContext","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 /**\n * Track common allocated memory and memory based on particular gl context.\n * @param {number} bytes\n * @param {string} name\n */\n _trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {\n this._trackAllocatedMemoryForContext(bytes, name);\n this._trackAllocatedMemoryForContext(bytes, name, this.gl.canvas && this.gl.canvas.id);\n this.byteLength = bytes;\n }\n\n _trackAllocatedMemoryForContext(bytes, name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\n stats.get('GPU Memory').addCount(bytes);\n stats.get(`${name} Memory`).addCount(bytes);\n }\n\n /**\n * Deallocate memory for common statistic and for each gl context as well.\n * @param {string} name\n */\n _trackDeallocatedMemory(name = this[Symbol.toStringTag]) {\n this._trackDeallocatedMemoryForContext(name);\n this._trackDeallocatedMemoryForContext(name, this.gl.canvas && this.gl.canvas.id);\n this.byteLength = 0;\n }\n\n _trackDeallocatedMemoryForContext(name = this[Symbol.toStringTag], id = '') {\n const stats = lumaStats.get(`Memory Usage${id}`);\n\n stats.get('GPU Memory').subtractCount(this.byteLength);\n stats.get(`${name} Memory`).subtractCount(this.byteLength);\n }\n}\n"],"file":"resource.js"}
package/dist/esm/init.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { log } from '@luma.gl/gltools';
2
2
  import { Stats } from '@probe.gl/stats';
3
3
  import { isBrowser } from '@probe.gl/env';
4
- const VERSION = typeof "8.5.17" !== 'undefined' ? "8.5.17" : 'untranspiled source';
4
+ const VERSION = typeof "8.5.18" !== 'undefined' ? "8.5.18" : 'untranspiled source';
5
5
  const STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';
6
6
  export class StatsManager {
7
7
  constructor() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/webgl",
3
- "version": "8.5.17",
3
+ "version": "8.5.18",
4
4
  "description": "WebGL2 Classes",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -35,10 +35,10 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@babel/runtime": "^7.0.0",
38
- "@luma.gl/constants": "8.5.17",
39
- "@luma.gl/gltools": "8.5.17",
38
+ "@luma.gl/constants": "8.5.18",
39
+ "@luma.gl/gltools": "8.5.18",
40
40
  "@probe.gl/env": "^3.5.0",
41
41
  "@probe.gl/stats": "^3.5.0"
42
42
  },
43
- "gitHead": "d97aab89c8585b92cf6aa68ea32c823568a7329e"
43
+ "gitHead": "337c12325d3aa1699245fbdc0fba7f9252a29996"
44
44
  }
@@ -294,22 +294,31 @@ export default class Resource {
294
294
  stats.get(`${name}s Active`).decrementCount();
295
295
  }
296
296
 
297
+ /**
298
+ * Track common allocated memory and memory based on particular gl context.
299
+ * @param {number} bytes
300
+ * @param {string} name
301
+ */
297
302
  _trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {
298
303
  this._trackAllocatedMemoryForContext(bytes, name);
299
304
  this._trackAllocatedMemoryForContext(bytes, name, this.gl.canvas && this.gl.canvas.id);
305
+ this.byteLength = bytes;
300
306
  }
301
307
 
302
308
  _trackAllocatedMemoryForContext(bytes, name = this[Symbol.toStringTag], id = '') {
303
309
  const stats = lumaStats.get(`Memory Usage${id}`);
304
-
305
310
  stats.get('GPU Memory').addCount(bytes);
306
311
  stats.get(`${name} Memory`).addCount(bytes);
307
- this.byteLength = bytes;
308
312
  }
309
313
 
314
+ /**
315
+ * Deallocate memory for common statistic and for each gl context as well.
316
+ * @param {string} name
317
+ */
310
318
  _trackDeallocatedMemory(name = this[Symbol.toStringTag]) {
311
319
  this._trackDeallocatedMemoryForContext(name);
312
320
  this._trackDeallocatedMemoryForContext(name, this.gl.canvas && this.gl.canvas.id);
321
+ this.byteLength = 0;
313
322
  }
314
323
 
315
324
  _trackDeallocatedMemoryForContext(name = this[Symbol.toStringTag], id = '') {
@@ -317,6 +326,5 @@ export default class Resource {
317
326
 
318
327
  stats.get('GPU Memory').subtractCount(this.byteLength);
319
328
  stats.get(`${name} Memory`).subtractCount(this.byteLength);
320
- this.byteLength = 0;
321
329
  }
322
330
  }