@luma.gl/webgl 8.5.12 → 8.5.15

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.
@@ -59,6 +59,8 @@ var Resource = function () {
59
59
 
60
60
  this.byteLength = 0;
61
61
 
62
+ this._initStats();
63
+
62
64
  this._addStats();
63
65
  }
64
66
 
@@ -260,6 +262,11 @@ var Resource = function () {
260
262
  this.gl.luma = this.gl.luma || {};
261
263
  return this.gl.luma;
262
264
  }
265
+ }, {
266
+ key: "_initStats",
267
+ value: function _initStats() {
268
+ this.gl.stats = this.gl.stats || new _init.StatsManager();
269
+ }
263
270
  }, {
264
271
  key: "_addStats",
265
272
  value: function _addStats() {
@@ -285,8 +292,15 @@ var Resource = function () {
285
292
  value: function _trackAllocatedMemory(bytes) {
286
293
  var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this[Symbol.toStringTag];
287
294
 
288
- var stats = _init.lumaStats.get('Memory Usage');
295
+ this._doTrackAllocatedMemory(bytes, name);
289
296
 
297
+ this._doTrackAllocatedMemory(bytes, name, this.gl.stats.get("Memory Usage"));
298
+ }
299
+ }, {
300
+ key: "_doTrackAllocatedMemory",
301
+ value: function _doTrackAllocatedMemory(bytes) {
302
+ var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this[Symbol.toStringTag];
303
+ var stats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _init.lumaStats.get("Memory Usage");
290
304
  stats.get('GPU Memory').addCount(bytes);
291
305
  stats.get("".concat(name, " Memory")).addCount(bytes);
292
306
  this.byteLength = bytes;
@@ -296,8 +310,15 @@ var Resource = function () {
296
310
  value: function _trackDeallocatedMemory() {
297
311
  var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this[Symbol.toStringTag];
298
312
 
299
- var stats = _init.lumaStats.get('Memory Usage');
313
+ this._doTrackDeallocatedMemory(name);
300
314
 
315
+ this._doTrackDeallocatedMemory(name, this.gl.stats.get("Memory Usage"));
316
+ }
317
+ }, {
318
+ key: "_doTrackDeallocatedMemory",
319
+ value: function _doTrackDeallocatedMemory() {
320
+ var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this[Symbol.toStringTag];
321
+ var stats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _init.lumaStats.get("Memory Usage");
301
322
  stats.get('GPU Memory').subtractCount(this.byteLength);
302
323
  stats.get("".concat(name, " Memory")).subtractCount(this.byteLength);
303
324
  this.byteLength = 0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/classes/resource.js"],"names":["ERR_RESOURCE_METHOD_UNDEFINED","Resource","Symbol","toStringTag","gl","opts","id","userData","gl2","_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","addCount","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"}
1
+ {"version":3,"sources":["../../../src/classes/resource.js"],"names":["ERR_RESOURCE_METHOD_UNDEFINED","Resource","Symbol","toStringTag","gl","opts","id","userData","gl2","_bound","_handle","handle","undefined","_createHandle","byteLength","_initStats","_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","StatsManager","lumaStats","get","incrementCount","decrementCount","bytes","_doTrackAllocatedMemory","addCount","_doTrackDeallocatedMemory","subtractCount"],"mappings":"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","sourcesContent":["import {isWebGL2, assertWebGLContext} from '@luma.gl/gltools';\nimport {lumaStats, StatsManager} 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._initStats();\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 _initStats() {\n this.gl.stats = this.gl.stats || new StatsManager();\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._doTrackAllocatedMemory(bytes, name);\n this._doTrackAllocatedMemory(bytes, name, this.gl.stats.get(`Memory Usage`));\n }\n\n _doTrackAllocatedMemory(\n bytes,\n name = this[Symbol.toStringTag],\n 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 this._doTrackDeallocatedMemory(name);\n this._doTrackDeallocatedMemory(name, this.gl.stats.get(`Memory Usage`));\n }\n\n _doTrackDeallocatedMemory(\n name = this[Symbol.toStringTag],\n 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"}
package/dist/es5/init.js CHANGED
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = exports.lumaStats = void 0;
8
+ exports.default = exports.lumaStats = exports.StatsManager = void 0;
9
9
 
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
11
 
@@ -17,7 +17,7 @@ var _probe = require("probe.gl");
17
17
 
18
18
  var _env = require("@probe.gl/env");
19
19
 
20
- var VERSION = typeof "8.5.12" !== 'undefined' ? "8.5.12" : 'untranspiled source';
20
+ var VERSION = typeof "8.5.15" !== 'undefined' ? "8.5.15" : 'untranspiled source';
21
21
  var STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';
22
22
 
23
23
  var StatsManager = function () {
@@ -41,6 +41,7 @@ var StatsManager = function () {
41
41
  return StatsManager;
42
42
  }();
43
43
 
44
+ exports.StatsManager = StatsManager;
44
45
  var lumaStats = new StatsManager();
45
46
  exports.lumaStats = lumaStats;
46
47
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/init.js"],"names":["VERSION","STARTUP_MESSAGE","StatsManager","stats","Map","name","has","set","Stats","id","get","lumaStats","globalThis","luma","Error","log","version","globals","modules","nodeIO"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAKA,IAAMA,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,qBAAnE;AAEA,IAAMC,eAAe,GAAG,qDAAxB;;IAKMC,Y;AACJ,0BAAc;AAAA;AACZ,SAAKC,KAAL,GAAa,IAAIC,GAAJ,EAAb;AACD;;;;wBAEGC,I,EAAM;AACR,UAAI,CAAC,KAAKF,KAAL,CAAWG,GAAX,CAAeD,IAAf,CAAL,EAA2B;AACzB,aAAKF,KAAL,CAAWI,GAAX,CAAeF,IAAf,EAAqB,IAAIG,YAAJ,CAAU;AAACC,UAAAA,EAAE,EAAEJ;AAAL,SAAV,CAArB;AACD;;AAED,aAAO,KAAKF,KAAL,CAAWO,GAAX,CAAeL,IAAf,CAAP;AACD;;;;;AAGH,IAAMM,SAAS,GAAG,IAAIT,YAAJ,EAAlB;;;AAEA,IAAIU,UAAU,CAACC,IAAX,IAAmBD,UAAU,CAACC,IAAX,CAAgBb,OAAhB,KAA4BA,OAAnD,EAA4D;AAC1D,QAAM,IAAIc,KAAJ,iDAAmDF,UAAU,CAACC,IAAX,CAAgBb,OAAnE,iBAAiFA,OAAjF,EAAN;AACD;;AAED,IAAI,CAACY,UAAU,CAACC,IAAhB,EAAsB;AACpB,MAAI,qBAAJ,EAAiB;AACfE,iBAAIA,GAAJ,CAAQ,CAAR,oBAAsBf,OAAtB,gBAAmCC,eAAnC;AACD;;AAEDW,EAAAA,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACC,IAAX,IAAmB;AACnCb,IAAAA,OAAO,EAAPA,OADmC;AAEnCgB,IAAAA,OAAO,EAAEhB,OAF0B;AAGnCe,IAAAA,GAAG,EAAHA,YAHmC;AAOnCZ,IAAAA,KAAK,EAAEQ,SAP4B;AAcnCM,IAAAA,OAAO,EAAE;AACPC,MAAAA,OAAO,EAAE,EADF;AAEPC,MAAAA,MAAM,EAAE;AAFD;AAd0B,GAArC;AAmBD;;eAGcP,UAAU,CAACC,I","sourcesContent":["import {log} from '@luma.gl/gltools';\nimport {Stats} from 'probe.gl';\nimport {isBrowser} from '@probe.gl/env';\n\n// Version detection using babel plugin\n/* global __VERSION__ */\n// @ts-ignore\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'untranspiled source';\n\nconst STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';\n// Assign luma.log.level in console to control logging: \\\n// 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs\n// luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;\n\nclass StatsManager {\n constructor() {\n this.stats = new Map();\n }\n\n get(name) {\n if (!this.stats.has(name)) {\n this.stats.set(name, new Stats({id: name}));\n }\n\n return this.stats.get(name);\n }\n}\n\nconst lumaStats = new StatsManager();\n\nif (globalThis.luma && globalThis.luma.VERSION !== VERSION) {\n throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${VERSION}`);\n}\n\nif (!globalThis.luma) {\n if (isBrowser()) {\n log.log(1, `luma.gl ${VERSION} - ${STARTUP_MESSAGE}`)();\n }\n\n globalThis.luma = globalThis.luma || {\n VERSION,\n version: VERSION,\n log,\n\n // A global stats object that various components can add information to\n // E.g. see webgl/resource.js\n stats: lumaStats,\n\n // Keep some luma globals in a sub-object\n // This allows us to dynamically detect if certain modules have been\n // included (such as IO and headless) and enable related functionality,\n // without unconditionally requiring and thus bundling big dependencies\n // into the app.\n globals: {\n modules: {},\n nodeIO: {}\n }\n };\n}\n\nexport {lumaStats};\nexport default globalThis.luma;\n"],"file":"init.js"}
1
+ {"version":3,"sources":["../../src/init.js"],"names":["VERSION","STARTUP_MESSAGE","StatsManager","stats","Map","name","has","set","Stats","id","get","lumaStats","globalThis","luma","Error","log","version","globals","modules","nodeIO"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAKA,IAAMA,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,qBAAnE;AAEA,IAAMC,eAAe,GAAG,qDAAxB;;IAKaC,Y;AACX,0BAAc;AAAA;AACZ,SAAKC,KAAL,GAAa,IAAIC,GAAJ,EAAb;AACD;;;;wBAEGC,I,EAAM;AACR,UAAI,CAAC,KAAKF,KAAL,CAAWG,GAAX,CAAeD,IAAf,CAAL,EAA2B;AACzB,aAAKF,KAAL,CAAWI,GAAX,CAAeF,IAAf,EAAqB,IAAIG,YAAJ,CAAU;AAACC,UAAAA,EAAE,EAAEJ;AAAL,SAAV,CAArB;AACD;;AAED,aAAO,KAAKF,KAAL,CAAWO,GAAX,CAAeL,IAAf,CAAP;AACD;;;;;;AAGH,IAAMM,SAAS,GAAG,IAAIT,YAAJ,EAAlB;;;AAEA,IAAIU,UAAU,CAACC,IAAX,IAAmBD,UAAU,CAACC,IAAX,CAAgBb,OAAhB,KAA4BA,OAAnD,EAA4D;AAC1D,QAAM,IAAIc,KAAJ,iDAAmDF,UAAU,CAACC,IAAX,CAAgBb,OAAnE,iBAAiFA,OAAjF,EAAN;AACD;;AAED,IAAI,CAACY,UAAU,CAACC,IAAhB,EAAsB;AACpB,MAAI,qBAAJ,EAAiB;AACfE,iBAAIA,GAAJ,CAAQ,CAAR,oBAAsBf,OAAtB,gBAAmCC,eAAnC;AACD;;AAEDW,EAAAA,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACC,IAAX,IAAmB;AACnCb,IAAAA,OAAO,EAAPA,OADmC;AAEnCgB,IAAAA,OAAO,EAAEhB,OAF0B;AAGnCe,IAAAA,GAAG,EAAHA,YAHmC;AAOnCZ,IAAAA,KAAK,EAAEQ,SAP4B;AAcnCM,IAAAA,OAAO,EAAE;AACPC,MAAAA,OAAO,EAAE,EADF;AAEPC,MAAAA,MAAM,EAAE;AAFD;AAd0B,GAArC;AAmBD;;eAGcP,UAAU,CAACC,I","sourcesContent":["import {log} from '@luma.gl/gltools';\nimport {Stats} from 'probe.gl';\nimport {isBrowser} from '@probe.gl/env';\n\n// Version detection using babel plugin\n/* global __VERSION__ */\n// @ts-ignore\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'untranspiled source';\n\nconst STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';\n// Assign luma.log.level in console to control logging: \\\n// 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs\n// luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;\n\nexport class StatsManager {\n constructor() {\n this.stats = new Map();\n }\n\n get(name) {\n if (!this.stats.has(name)) {\n this.stats.set(name, new Stats({id: name}));\n }\n\n return this.stats.get(name);\n }\n}\n\nconst lumaStats = new StatsManager();\n\nif (globalThis.luma && globalThis.luma.VERSION !== VERSION) {\n throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${VERSION}`);\n}\n\nif (!globalThis.luma) {\n if (isBrowser()) {\n log.log(1, `luma.gl ${VERSION} - ${STARTUP_MESSAGE}`)();\n }\n\n globalThis.luma = globalThis.luma || {\n VERSION,\n version: VERSION,\n log,\n\n // A global stats object that various components can add information to\n // E.g. see webgl/resource.js\n stats: lumaStats,\n\n // Keep some luma globals in a sub-object\n // This allows us to dynamically detect if certain modules have been\n // included (such as IO and headless) and enable related functionality,\n // without unconditionally requiring and thus bundling big dependencies\n // into the app.\n globals: {\n modules: {},\n nodeIO: {}\n }\n };\n}\n\nexport {lumaStats};\nexport default globalThis.luma;\n"],"file":"init.js"}
@@ -1,5 +1,5 @@
1
1
  import { isWebGL2, assertWebGLContext } from '@luma.gl/gltools';
2
- import { lumaStats } from '../init';
2
+ import { lumaStats, StatsManager } from '../init';
3
3
  import { getKey, getKeyValue } from '../webgl-utils/constants-to-keys';
4
4
  import { assert } from '../utils/assert';
5
5
  import { uid } from '../utils/utils';
@@ -29,6 +29,8 @@ export default class Resource {
29
29
 
30
30
  this.byteLength = 0;
31
31
 
32
+ this._initStats();
33
+
32
34
  this._addStats();
33
35
  }
34
36
 
@@ -201,6 +203,10 @@ export default class Resource {
201
203
  return this.gl.luma;
202
204
  }
203
205
 
206
+ _initStats() {
207
+ this.gl.stats = this.gl.stats || new StatsManager();
208
+ }
209
+
204
210
  _addStats() {
205
211
  const name = this[Symbol.toStringTag];
206
212
  const stats = lumaStats.get('Resource Counts');
@@ -216,14 +222,24 @@ export default class Resource {
216
222
  }
217
223
 
218
224
  _trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {
219
- const stats = lumaStats.get('Memory Usage');
225
+ this._doTrackAllocatedMemory(bytes, name);
226
+
227
+ this._doTrackAllocatedMemory(bytes, name, this.gl.stats.get(`Memory Usage`));
228
+ }
229
+
230
+ _doTrackAllocatedMemory(bytes, name = this[Symbol.toStringTag], stats = lumaStats.get(`Memory Usage`)) {
220
231
  stats.get('GPU Memory').addCount(bytes);
221
232
  stats.get(`${name} Memory`).addCount(bytes);
222
233
  this.byteLength = bytes;
223
234
  }
224
235
 
225
236
  _trackDeallocatedMemory(name = this[Symbol.toStringTag]) {
226
- const stats = lumaStats.get('Memory Usage');
237
+ this._doTrackDeallocatedMemory(name);
238
+
239
+ this._doTrackDeallocatedMemory(name, this.gl.stats.get(`Memory Usage`));
240
+ }
241
+
242
+ _doTrackDeallocatedMemory(name = this[Symbol.toStringTag], stats = lumaStats.get(`Memory Usage`)) {
227
243
  stats.get('GPU Memory').subtractCount(this.byteLength);
228
244
  stats.get(`${name} Memory`).subtractCount(this.byteLength);
229
245
  this.byteLength = 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","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"}
1
+ {"version":3,"sources":["../../../src/classes/resource.js"],"names":["isWebGL2","assertWebGLContext","lumaStats","StatsManager","getKey","getKeyValue","assert","uid","stubRemovedMethods","ERR_RESOURCE_METHOD_UNDEFINED","Resource","Symbol","toStringTag","constructor","gl","opts","id","userData","gl2","_bound","_handle","handle","undefined","_createHandle","byteLength","_initStats","_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","_doTrackAllocatedMemory","addCount","_trackDeallocatedMemory","_doTrackDeallocatedMemory","subtractCount"],"mappings":"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","sourcesContent":["import {isWebGL2, assertWebGLContext} from '@luma.gl/gltools';\nimport {lumaStats, StatsManager} 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._initStats();\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 _initStats() {\n this.gl.stats = this.gl.stats || new StatsManager();\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._doTrackAllocatedMemory(bytes, name);\n this._doTrackAllocatedMemory(bytes, name, this.gl.stats.get(`Memory Usage`));\n }\n\n _doTrackAllocatedMemory(\n bytes,\n name = this[Symbol.toStringTag],\n 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 this._doTrackDeallocatedMemory(name);\n this._doTrackDeallocatedMemory(name, this.gl.stats.get(`Memory Usage`));\n }\n\n _doTrackDeallocatedMemory(\n name = this[Symbol.toStringTag],\n 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"}
package/dist/esm/init.js CHANGED
@@ -1,10 +1,9 @@
1
1
  import { log } from '@luma.gl/gltools';
2
2
  import { Stats } from 'probe.gl';
3
3
  import { isBrowser } from '@probe.gl/env';
4
- const VERSION = typeof "8.5.12" !== 'undefined' ? "8.5.12" : 'untranspiled source';
4
+ const VERSION = typeof "8.5.15" !== 'undefined' ? "8.5.15" : 'untranspiled source';
5
5
  const STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';
6
-
7
- class StatsManager {
6
+ export class StatsManager {
8
7
  constructor() {
9
8
  this.stats = new Map();
10
9
  }
@@ -20,7 +19,6 @@ class StatsManager {
20
19
  }
21
20
 
22
21
  }
23
-
24
22
  const lumaStats = new StatsManager();
25
23
 
26
24
  if (globalThis.luma && globalThis.luma.VERSION !== VERSION) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/init.js"],"names":["log","Stats","isBrowser","VERSION","STARTUP_MESSAGE","StatsManager","constructor","stats","Map","get","name","has","set","id","lumaStats","globalThis","luma","Error","version","globals","modules","nodeIO"],"mappings":"AAAA,SAAQA,GAAR,QAAkB,kBAAlB;AACA,SAAQC,KAAR,QAAoB,UAApB;AACA,SAAQC,SAAR,QAAwB,eAAxB;AAKA,MAAMC,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,qBAAnE;AAEA,MAAMC,eAAe,GAAG,qDAAxB;;AAKA,MAAMC,YAAN,CAAmB;AACjBC,EAAAA,WAAW,GAAG;AACZ,SAAKC,KAAL,GAAa,IAAIC,GAAJ,EAAb;AACD;;AAEDC,EAAAA,GAAG,CAACC,IAAD,EAAO;AACR,QAAI,CAAC,KAAKH,KAAL,CAAWI,GAAX,CAAeD,IAAf,CAAL,EAA2B;AACzB,WAAKH,KAAL,CAAWK,GAAX,CAAeF,IAAf,EAAqB,IAAIT,KAAJ,CAAU;AAACY,QAAAA,EAAE,EAAEH;AAAL,OAAV,CAArB;AACD;;AAED,WAAO,KAAKH,KAAL,CAAWE,GAAX,CAAeC,IAAf,CAAP;AACD;;AAXgB;;AAcnB,MAAMI,SAAS,GAAG,IAAIT,YAAJ,EAAlB;;AAEA,IAAIU,UAAU,CAACC,IAAX,IAAmBD,UAAU,CAACC,IAAX,CAAgBb,OAAhB,KAA4BA,OAAnD,EAA4D;AAC1D,QAAM,IAAIc,KAAJ,CAAW,yCAAwCF,UAAU,CAACC,IAAX,CAAgBb,OAAQ,OAAMA,OAAQ,EAAzF,CAAN;AACD;;AAED,IAAI,CAACY,UAAU,CAACC,IAAhB,EAAsB;AACpB,MAAId,SAAS,EAAb,EAAiB;AACfF,IAAAA,GAAG,CAACA,GAAJ,CAAQ,CAAR,EAAY,WAAUG,OAAQ,MAAKC,eAAgB,EAAnD;AACD;;AAEDW,EAAAA,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACC,IAAX,IAAmB;AACnCb,IAAAA,OADmC;AAEnCe,IAAAA,OAAO,EAAEf,OAF0B;AAGnCH,IAAAA,GAHmC;AAOnCO,IAAAA,KAAK,EAAEO,SAP4B;AAcnCK,IAAAA,OAAO,EAAE;AACPC,MAAAA,OAAO,EAAE,EADF;AAEPC,MAAAA,MAAM,EAAE;AAFD;AAd0B,GAArC;AAmBD;;AAED,SAAQP,SAAR;AACA,eAAeC,UAAU,CAACC,IAA1B","sourcesContent":["import {log} from '@luma.gl/gltools';\nimport {Stats} from 'probe.gl';\nimport {isBrowser} from '@probe.gl/env';\n\n// Version detection using babel plugin\n/* global __VERSION__ */\n// @ts-ignore\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'untranspiled source';\n\nconst STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';\n// Assign luma.log.level in console to control logging: \\\n// 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs\n// luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;\n\nclass StatsManager {\n constructor() {\n this.stats = new Map();\n }\n\n get(name) {\n if (!this.stats.has(name)) {\n this.stats.set(name, new Stats({id: name}));\n }\n\n return this.stats.get(name);\n }\n}\n\nconst lumaStats = new StatsManager();\n\nif (globalThis.luma && globalThis.luma.VERSION !== VERSION) {\n throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${VERSION}`);\n}\n\nif (!globalThis.luma) {\n if (isBrowser()) {\n log.log(1, `luma.gl ${VERSION} - ${STARTUP_MESSAGE}`)();\n }\n\n globalThis.luma = globalThis.luma || {\n VERSION,\n version: VERSION,\n log,\n\n // A global stats object that various components can add information to\n // E.g. see webgl/resource.js\n stats: lumaStats,\n\n // Keep some luma globals in a sub-object\n // This allows us to dynamically detect if certain modules have been\n // included (such as IO and headless) and enable related functionality,\n // without unconditionally requiring and thus bundling big dependencies\n // into the app.\n globals: {\n modules: {},\n nodeIO: {}\n }\n };\n}\n\nexport {lumaStats};\nexport default globalThis.luma;\n"],"file":"init.js"}
1
+ {"version":3,"sources":["../../src/init.js"],"names":["log","Stats","isBrowser","VERSION","STARTUP_MESSAGE","StatsManager","constructor","stats","Map","get","name","has","set","id","lumaStats","globalThis","luma","Error","version","globals","modules","nodeIO"],"mappings":"AAAA,SAAQA,GAAR,QAAkB,kBAAlB;AACA,SAAQC,KAAR,QAAoB,UAApB;AACA,SAAQC,SAAR,QAAwB,eAAxB;AAKA,MAAMC,OAAO,GAAG,oBAAuB,WAAvB,cAAmD,qBAAnE;AAEA,MAAMC,eAAe,GAAG,qDAAxB;AAKA,OAAO,MAAMC,YAAN,CAAmB;AACxBC,EAAAA,WAAW,GAAG;AACZ,SAAKC,KAAL,GAAa,IAAIC,GAAJ,EAAb;AACD;;AAEDC,EAAAA,GAAG,CAACC,IAAD,EAAO;AACR,QAAI,CAAC,KAAKH,KAAL,CAAWI,GAAX,CAAeD,IAAf,CAAL,EAA2B;AACzB,WAAKH,KAAL,CAAWK,GAAX,CAAeF,IAAf,EAAqB,IAAIT,KAAJ,CAAU;AAACY,QAAAA,EAAE,EAAEH;AAAL,OAAV,CAArB;AACD;;AAED,WAAO,KAAKH,KAAL,CAAWE,GAAX,CAAeC,IAAf,CAAP;AACD;;AAXuB;AAc1B,MAAMI,SAAS,GAAG,IAAIT,YAAJ,EAAlB;;AAEA,IAAIU,UAAU,CAACC,IAAX,IAAmBD,UAAU,CAACC,IAAX,CAAgBb,OAAhB,KAA4BA,OAAnD,EAA4D;AAC1D,QAAM,IAAIc,KAAJ,CAAW,yCAAwCF,UAAU,CAACC,IAAX,CAAgBb,OAAQ,OAAMA,OAAQ,EAAzF,CAAN;AACD;;AAED,IAAI,CAACY,UAAU,CAACC,IAAhB,EAAsB;AACpB,MAAId,SAAS,EAAb,EAAiB;AACfF,IAAAA,GAAG,CAACA,GAAJ,CAAQ,CAAR,EAAY,WAAUG,OAAQ,MAAKC,eAAgB,EAAnD;AACD;;AAEDW,EAAAA,UAAU,CAACC,IAAX,GAAkBD,UAAU,CAACC,IAAX,IAAmB;AACnCb,IAAAA,OADmC;AAEnCe,IAAAA,OAAO,EAAEf,OAF0B;AAGnCH,IAAAA,GAHmC;AAOnCO,IAAAA,KAAK,EAAEO,SAP4B;AAcnCK,IAAAA,OAAO,EAAE;AACPC,MAAAA,OAAO,EAAE,EADF;AAEPC,MAAAA,MAAM,EAAE;AAFD;AAd0B,GAArC;AAmBD;;AAED,SAAQP,SAAR;AACA,eAAeC,UAAU,CAACC,IAA1B","sourcesContent":["import {log} from '@luma.gl/gltools';\nimport {Stats} from 'probe.gl';\nimport {isBrowser} from '@probe.gl/env';\n\n// Version detection using babel plugin\n/* global __VERSION__ */\n// @ts-ignore\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'untranspiled source';\n\nconst STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';\n// Assign luma.log.level in console to control logging: \\\n// 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs\n// luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;\n\nexport class StatsManager {\n constructor() {\n this.stats = new Map();\n }\n\n get(name) {\n if (!this.stats.has(name)) {\n this.stats.set(name, new Stats({id: name}));\n }\n\n return this.stats.get(name);\n }\n}\n\nconst lumaStats = new StatsManager();\n\nif (globalThis.luma && globalThis.luma.VERSION !== VERSION) {\n throw new Error(`luma.gl - multiple VERSIONs detected: ${globalThis.luma.VERSION} vs ${VERSION}`);\n}\n\nif (!globalThis.luma) {\n if (isBrowser()) {\n log.log(1, `luma.gl ${VERSION} - ${STARTUP_MESSAGE}`)();\n }\n\n globalThis.luma = globalThis.luma || {\n VERSION,\n version: VERSION,\n log,\n\n // A global stats object that various components can add information to\n // E.g. see webgl/resource.js\n stats: lumaStats,\n\n // Keep some luma globals in a sub-object\n // This allows us to dynamically detect if certain modules have been\n // included (such as IO and headless) and enable related functionality,\n // without unconditionally requiring and thus bundling big dependencies\n // into the app.\n globals: {\n modules: {},\n nodeIO: {}\n }\n };\n}\n\nexport {lumaStats};\nexport default globalThis.luma;\n"],"file":"init.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luma.gl/webgl",
3
- "version": "8.5.12",
3
+ "version": "8.5.15",
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.12",
39
- "@luma.gl/gltools": "8.5.12",
38
+ "@luma.gl/constants": "8.5.15",
39
+ "@luma.gl/gltools": "8.5.15",
40
40
  "@probe.gl/env": "^3.5.0",
41
41
  "probe.gl": "^3.4.0"
42
42
  },
43
- "gitHead": "0a16c6910a0daaa25e1822fa7210b258c9cad60f"
43
+ "gitHead": "2a9dceee72071b3a6df63e94736c6a68da357efb"
44
44
  }
@@ -1,5 +1,5 @@
1
1
  import {isWebGL2, assertWebGLContext} from '@luma.gl/gltools';
2
- import {lumaStats} from '../init';
2
+ import {lumaStats, StatsManager} from '../init';
3
3
  import {getKey, getKeyValue} from '../webgl-utils/constants-to-keys';
4
4
  import {assert} from '../utils/assert';
5
5
  import {uid} from '../utils/utils';
@@ -44,6 +44,7 @@ export default class Resource {
44
44
  // Only meaningful for resources that allocate GPU memory
45
45
  this.byteLength = 0;
46
46
 
47
+ this._initStats();
47
48
  this._addStats();
48
49
  }
49
50
 
@@ -278,6 +279,10 @@ export default class Resource {
278
279
  return this.gl.luma;
279
280
  }
280
281
 
282
+ _initStats() {
283
+ this.gl.stats = this.gl.stats || new StatsManager();
284
+ }
285
+
281
286
  _addStats() {
282
287
  const name = this[Symbol.toStringTag];
283
288
  const stats = lumaStats.get('Resource Counts');
@@ -295,16 +300,29 @@ export default class Resource {
295
300
  }
296
301
 
297
302
  _trackAllocatedMemory(bytes, name = this[Symbol.toStringTag]) {
298
- const stats = lumaStats.get('Memory Usage');
303
+ this._doTrackAllocatedMemory(bytes, name);
304
+ this._doTrackAllocatedMemory(bytes, name, this.gl.stats.get(`Memory Usage`));
305
+ }
299
306
 
307
+ _doTrackAllocatedMemory(
308
+ bytes,
309
+ name = this[Symbol.toStringTag],
310
+ stats = lumaStats.get(`Memory Usage`)
311
+ ) {
300
312
  stats.get('GPU Memory').addCount(bytes);
301
313
  stats.get(`${name} Memory`).addCount(bytes);
302
314
  this.byteLength = bytes;
303
315
  }
304
316
 
305
317
  _trackDeallocatedMemory(name = this[Symbol.toStringTag]) {
306
- const stats = lumaStats.get('Memory Usage');
318
+ this._doTrackDeallocatedMemory(name);
319
+ this._doTrackDeallocatedMemory(name, this.gl.stats.get(`Memory Usage`));
320
+ }
307
321
 
322
+ _doTrackDeallocatedMemory(
323
+ name = this[Symbol.toStringTag],
324
+ stats = lumaStats.get(`Memory Usage`)
325
+ ) {
308
326
  stats.get('GPU Memory').subtractCount(this.byteLength);
309
327
  stats.get(`${name} Memory`).subtractCount(this.byteLength);
310
328
  this.byteLength = 0;
package/src/init.js CHANGED
@@ -12,7 +12,7 @@ const STARTUP_MESSAGE = 'set luma.log.level=1 (or higher) to trace rendering';
12
12
  // 0: none, 1: minimal, 2: verbose, 3: attribute/uniforms, 4: gl logs
13
13
  // luma.log.break[], set to gl funcs, luma.log.profile[] set to model names`;
14
14
 
15
- class StatsManager {
15
+ export class StatsManager {
16
16
  constructor() {
17
17
  this.stats = new Map();
18
18
  }