@luma.gl/webgl 8.6.0-alpha.4 → 8.6.0-alpha.5

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.
Files changed (36) hide show
  1. package/dist/_deprecated/context-api.d.ts.map +1 -1
  2. package/dist/_deprecated/context-api.js +13 -7
  3. package/dist/_deprecated/context-api.js.map +1 -1
  4. package/dist/_deprecated/features.d.ts +1 -1
  5. package/dist/_deprecated/features.d.ts.map +1 -1
  6. package/dist/_deprecated/features.js +24 -24
  7. package/dist/_deprecated/features.js.map +1 -1
  8. package/dist/adapter/webgl-device.d.ts +0 -1
  9. package/dist/adapter/webgl-device.d.ts.map +1 -1
  10. package/dist/adapter/webgl-device.js +8 -9
  11. package/dist/adapter/webgl-device.js.map +1 -1
  12. package/dist/es5/_deprecated/context-api.js +12 -6
  13. package/dist/es5/_deprecated/context-api.js.map +1 -1
  14. package/dist/es5/_deprecated/features.js +5 -5
  15. package/dist/es5/_deprecated/features.js.map +1 -1
  16. package/dist/es5/adapter/webgl-device.js +8 -8
  17. package/dist/es5/adapter/webgl-device.js.map +1 -1
  18. package/dist/es5/index.js +1 -1
  19. package/dist/es5/index.js.map +1 -1
  20. package/dist/esm/_deprecated/context-api.js +13 -7
  21. package/dist/esm/_deprecated/context-api.js.map +1 -1
  22. package/dist/esm/_deprecated/features.js +24 -24
  23. package/dist/esm/_deprecated/features.js.map +1 -1
  24. package/dist/esm/adapter/webgl-device.js +8 -9
  25. package/dist/esm/adapter/webgl-device.js.map +1 -1
  26. package/dist/esm/index.js +1 -1
  27. package/dist/esm/index.js.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/package.json +4 -4
  33. package/src/_deprecated/context-api.ts +13 -7
  34. package/src/_deprecated/features.ts +24 -24
  35. package/src/adapter/webgl-device.ts +9 -16
  36. package/src/index.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"context-api.d.ts","sourceRoot":"","sources":["../../src/_deprecated/context-api.ts"],"names":[],"mappings":"AAMA,OAAO,EAAc,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAG7D,oBAAY,gBAAgB,GAAG,gBAAgB,GAAG;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,IAAI,CAIxF;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,qBAAqB,GAAG,sBAAsB,EAClD,OAAO,CAAC,EAAE,gBAAgB,GACzB,qBAAqB,CAGvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,qBAAqB,EACzB,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACpC,QAIF;AAED;;;EAGE;AACF,wBAAgB,WAAW,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAK3F;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO9E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,qBAAqB,GAAG;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAQA;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,CAAC,EAAE,KAAA;;;;;;EASlC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,EAAE,KAAA;;;;;;;;;;;;;;EAMhC;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,EAAE,KAAA;;EAGlC"}
1
+ {"version":3,"file":"context-api.d.ts","sourceRoot":"","sources":["../../src/_deprecated/context-api.ts"],"names":[],"mappings":"AAMA,OAAO,EAAc,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAG7D,oBAAY,gBAAgB,GAAG,gBAAgB,GAAG;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,IAAI,CAIxF;AAED,6CAA6C;AAC7C,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,qBAAqB,GAAG,sBAAsB,EAClD,OAAO,CAAC,EAAE,gBAAgB,GACzB,qBAAqB,CAGvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,qBAAqB,EACzB,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACpC,QAIF;AAED;;;EAGE;AACF,wBAAgB,WAAW,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAM3F;AAUD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9E;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQ9E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,qBAAqB,GAAG;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAQA;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,CAAC,EAAE,KAAA;;;;;;EASlC;AAED,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,EAAE,KAAA;;;;;;;;;;;;;;EAMhC;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAAC,EAAE,KAAA;;EAGlC"}
@@ -1,6 +1,6 @@
1
1
  import GL from '@luma.gl/constants';
2
2
  import { WebGLDevice } from '@luma.gl/webgl';
3
- import { FEATURES } from './features';
3
+ import { DEPRECATED_FEATURES } from './features';
4
4
  export function createGLContext(options) {
5
5
  const webglDevice = new WebGLDevice(options);
6
6
  return webglDevice.gl;
@@ -16,12 +16,18 @@ export function resizeGLContext(gl, options) {
16
16
  export function hasFeatures(gl, features) {
17
17
  const webglDevice = WebGLDevice.attach(gl);
18
18
  const normalizedFeatures = Array.isArray(features) ? features : [features];
19
- const deviceFeatures = normalizedFeatures.map(feature => getDeviceFeature(feature));
20
- return deviceFeatures.every(feature => webglDevice.webglFeatures.has(feature));
19
+ const deviceFeatures = normalizedFeatures.map(feature => classicToDeviceFeature(feature));
20
+ return deviceFeatures.every(feature => webglDevice.features.has(feature));
21
21
  }
22
22
 
23
- function getDeviceFeature(feature) {
24
- return feature.toLowerCase().replace('webgl-', '').replace('-', '_');
23
+ function classicToDeviceFeature(feature) {
24
+ const deviceFeature = feature.toLowerCase().replace(/\_/g, '-');
25
+
26
+ if (deviceFeature.startsWith('webgl2') || deviceFeature.startsWith('glsl-')) {
27
+ return deviceFeature;
28
+ }
29
+
30
+ return "webgl-".concat(deviceFeature);
25
31
  }
26
32
 
27
33
  export function hasFeature(gl, feature) {
@@ -31,8 +37,8 @@ export function getFeatures(gl) {
31
37
  const webglDevice = WebGLDevice.attach(gl);
32
38
  const featureMap = {};
33
39
 
34
- for (const feature in FEATURES) {
35
- featureMap[feature] = webglDevice.webglFeatures.has(feature);
40
+ for (const feature in DEPRECATED_FEATURES) {
41
+ featureMap[feature] = webglDevice.features.has(classicToDeviceFeature(feature));
36
42
  }
37
43
 
38
44
  return featureMap;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/_deprecated/context-api.ts"],"names":["GL","WebGLDevice","FEATURES","createGLContext","options","webglDevice","gl","instrumentGLContext","attach","resizeGLContext","resize","hasFeatures","features","normalizedFeatures","Array","isArray","deviceFeatures","map","feature","getDeviceFeature","every","webglFeatures","has","toLowerCase","replace","hasFeature","getFeatures","featureMap","getContextDebugInfo","info","vendorMasked","vendor","rendererMasked","renderer","getGLContextInfo","UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL","VENDOR","RENDERER","VERSION","version","getContextInfo","getContextLimits","limits","webglLimits"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n// LEGACY luma.gl v8 API for WebGLRendering context\n// DEPRECATED API - may be removed in luma.gl v9 or v10.\n\n/* eslint-disable quotes */\nimport GL from '@luma.gl/constants';\nimport {WebGLDevice, WebGLDeviceProps} from '@luma.gl/webgl';\nimport {FEATURES} from './features';\n\nexport type GLContextOptions = WebGLDeviceProps & {\n throwOnError?: boolean; // If set to false, return `null` if context creation fails.\n};\n\n/** @deprecated Use `new WebGLDevice()` or `luma.createDevice()` */\nexport function createGLContext(options?: GLContextOptions): WebGLRenderingContext | null {\n const webglDevice = new WebGLDevice(options);\n // Note: OK to return the context, it holds on to the device\n return webglDevice.gl;\n}\n\n/** @deprecated Use `WebGLDevice.attach()` */\nexport function instrumentGLContext(\n gl: WebGLRenderingContext | WebGL2RenderingContext,\n options?: GLContextOptions\n): WebGLRenderingContext {\n const webglDevice = WebGLDevice.attach(gl, options);\n return webglDevice.gl;\n}\n\n/**\n * Resize the canvas' drawing buffer.\n *\n * Can match the canvas CSS size, and optionally also consider devicePixelRatio\n * Can be called every frame\n *\n * Regardless of size, the drawing buffer will always be scaled to the viewport, but\n * for best visual results, usually set to either:\n * canvas CSS width x canvas CSS height\n * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio\n * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n *\n * resizeGLContext(gl, {width, height, useDevicePixels})\n * @deprecated Use WebGLDevice.resize()\n */\nexport function resizeGLContext(\n gl: WebGLRenderingContext,\n options?: {\n width?: number;\n height?: number;\n useDevicePixels?: boolean | number;\n }\n) {\n const webglDevice = WebGLDevice.attach(gl);\n webglDevice.resize(options);\n}\n\n/** \n * Check one or more features\n * @deprecated Use `WebGLDevice.features.has()`\n*/\nexport function hasFeatures(gl: WebGLRenderingContext, features: string | string[]): boolean {\n const webglDevice = WebGLDevice.attach(gl);\n const normalizedFeatures = Array.isArray(features) ? features : [features];\n const deviceFeatures = normalizedFeatures.map(feature => getDeviceFeature(feature));\n return deviceFeatures.every((feature) => webglDevice.webglFeatures.has(feature));\n}\n\nfunction getDeviceFeature(feature) {\n return feature.toLowerCase().replace('webgl-', '').replace('-', '_');\n}\n\n/**\n * Check one feature\n * @deprecated Use `WebGLDevice.features`\n */\nexport function hasFeature(gl: WebGLRenderingContext, feature: string): boolean {\n return hasFeatures(gl, feature);\n}\n\n/**\n * Return a map of supported features\n * @deprecated Use `WebGLDevice.features`\n */\nexport function getFeatures(gl: WebGLRenderingContext): Record<string, boolean> {\n const webglDevice = WebGLDevice.attach(gl);\n const featureMap: Record<string, boolean> = {};\n for (const feature in FEATURES) {\n featureMap[feature] = webglDevice.webglFeatures.has(feature);\n }\n return featureMap;\n}\n\n/**\n * Provides strings identifying the GPU vendor and driver.\n * https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n *\n * @deprecated Use `WebGLDevice.info`\n */\nexport function getContextDebugInfo(gl: WebGLRenderingContext): {\n vendor: string;\n renderer: string;\n vendorMasked: string;\n rendererMasked: string;\n version: string;\n} {\n const webglDevice = WebGLDevice.attach(gl);\n const info = webglDevice.info;\n return {\n ...webglDevice.info,\n vendorMasked: webglDevice.info.vendor,\n rendererMasked: webglDevice.info.renderer\n };\n}\n\n/** @deprecated Use `WebGLDevice.info` */\nexport function getGLContextInfo(gl) {\n const info = getContextDebugInfo(gl);\n return {\n [GL.UNMASKED_VENDOR_WEBGL]: info.vendor,\n [GL.UNMASKED_RENDERER_WEBGL]: info.renderer,\n [GL.VENDOR]: info.vendorMasked,\n [GL.RENDERER]: info.rendererMasked,\n [GL.VERSION]: info.version,\n };\n}\n\n/** @deprecated Use `WebGLDevice.info` and `WebGLDevice.limits` */\nexport function getContextInfo(gl) {\n return {\n ...getContextDebugInfo(gl),\n ...getContextLimits(gl),\n info: getGLContextInfo(gl),\n };\n}\n\n/** @deprecated Use `WebGLDevice.limits` */\nexport function getContextLimits(gl) {\n const webglDevice = WebGLDevice.attach(gl);\n return {limits: webglDevice.webglLimits};\n}\n"],"file":"context-api.js"}
1
+ {"version":3,"sources":["../../src/_deprecated/context-api.ts"],"names":["GL","WebGLDevice","DEPRECATED_FEATURES","createGLContext","options","webglDevice","gl","instrumentGLContext","attach","resizeGLContext","resize","hasFeatures","features","normalizedFeatures","Array","isArray","deviceFeatures","map","feature","classicToDeviceFeature","every","has","deviceFeature","toLowerCase","replace","startsWith","hasFeature","getFeatures","featureMap","getContextDebugInfo","info","vendorMasked","vendor","rendererMasked","renderer","getGLContextInfo","UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL","VENDOR","RENDERER","VERSION","version","getContextInfo","getContextLimits","limits","webglLimits"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n// LEGACY luma.gl v8 API for WebGLRendering context\n// DEPRECATED API - may be removed in luma.gl v9 or v10.\n\n/* eslint-disable quotes */\nimport GL from '@luma.gl/constants';\nimport {WebGLDevice, WebGLDeviceProps} from '@luma.gl/webgl';\nimport {DEPRECATED_FEATURES} from './features';\n\nexport type GLContextOptions = WebGLDeviceProps & {\n throwOnError?: boolean; // If set to false, return `null` if context creation fails.\n};\n\n/** @deprecated Use `new WebGLDevice()` or `luma.createDevice()` */\nexport function createGLContext(options?: GLContextOptions): WebGLRenderingContext | null {\n const webglDevice = new WebGLDevice(options);\n // Note: OK to return the context, it holds on to the device\n return webglDevice.gl;\n}\n\n/** @deprecated Use `WebGLDevice.attach()` */\nexport function instrumentGLContext(\n gl: WebGLRenderingContext | WebGL2RenderingContext,\n options?: GLContextOptions\n): WebGLRenderingContext {\n const webglDevice = WebGLDevice.attach(gl, options);\n return webglDevice.gl;\n}\n\n/**\n * Resize the canvas' drawing buffer.\n *\n * Can match the canvas CSS size, and optionally also consider devicePixelRatio\n * Can be called every frame\n *\n * Regardless of size, the drawing buffer will always be scaled to the viewport, but\n * for best visual results, usually set to either:\n * canvas CSS width x canvas CSS height\n * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio\n * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n *\n * resizeGLContext(gl, {width, height, useDevicePixels})\n * @deprecated Use WebGLDevice.resize()\n */\nexport function resizeGLContext(\n gl: WebGLRenderingContext,\n options?: {\n width?: number;\n height?: number;\n useDevicePixels?: boolean | number;\n }\n) {\n const webglDevice = WebGLDevice.attach(gl);\n webglDevice.resize(options);\n}\n\n/** \n * Check one or more features\n * @deprecated Use `WebGLDevice.features.has()`\n*/\nexport function hasFeatures(gl: WebGLRenderingContext, features: string | string[]): boolean {\n const webglDevice = WebGLDevice.attach(gl);\n const normalizedFeatures = Array.isArray(features) ? features : [features];\n const deviceFeatures = normalizedFeatures.map(feature => classicToDeviceFeature(feature));\n // @ts-expect-error Feature is a string enum\n return deviceFeatures.every((feature) => webglDevice.features.has(feature));\n}\n\nfunction classicToDeviceFeature(feature: string): string {\n const deviceFeature = feature.toLowerCase().replace(/\\_/g, '-');\n if (deviceFeature.startsWith('webgl2') || deviceFeature.startsWith('glsl-')) {\n return deviceFeature;\n }\n return `webgl-${deviceFeature}`;\n}\n\n/**\n * Check one feature\n * @deprecated Use `WebGLDevice.features`\n */\nexport function hasFeature(gl: WebGLRenderingContext, feature: string): boolean {\n return hasFeatures(gl, feature);\n}\n\n/**\n * Return a map of supported features\n * @deprecated Use `WebGLDevice.features`\n */\nexport function getFeatures(gl: WebGLRenderingContext): Record<string, boolean> {\n const webglDevice = WebGLDevice.attach(gl);\n const featureMap: Record<string, boolean> = {};\n for (const feature in DEPRECATED_FEATURES) {\n // @ts-expect-error Feature is a string enum\n featureMap[feature] = webglDevice.features.has(classicToDeviceFeature(feature));\n }\n return featureMap;\n}\n\n/**\n * Provides strings identifying the GPU vendor and driver.\n * https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n *\n * @deprecated Use `WebGLDevice.info`\n */\nexport function getContextDebugInfo(gl: WebGLRenderingContext): {\n vendor: string;\n renderer: string;\n vendorMasked: string;\n rendererMasked: string;\n version: string;\n} {\n const webglDevice = WebGLDevice.attach(gl);\n const info = webglDevice.info;\n return {\n ...webglDevice.info,\n vendorMasked: webglDevice.info.vendor,\n rendererMasked: webglDevice.info.renderer\n };\n}\n\n/** @deprecated Use `WebGLDevice.info` */\nexport function getGLContextInfo(gl) {\n const info = getContextDebugInfo(gl);\n return {\n [GL.UNMASKED_VENDOR_WEBGL]: info.vendor,\n [GL.UNMASKED_RENDERER_WEBGL]: info.renderer,\n [GL.VENDOR]: info.vendorMasked,\n [GL.RENDERER]: info.rendererMasked,\n [GL.VERSION]: info.version,\n };\n}\n\n/** @deprecated Use `WebGLDevice.info` and `WebGLDevice.limits` */\nexport function getContextInfo(gl) {\n return {\n ...getContextDebugInfo(gl),\n ...getContextLimits(gl),\n info: getGLContextInfo(gl),\n };\n}\n\n/** @deprecated Use `WebGLDevice.limits` */\nexport function getContextLimits(gl) {\n const webglDevice = WebGLDevice.attach(gl);\n return {limits: webglDevice.webglLimits};\n}\n"],"file":"context-api.js"}
@@ -1,4 +1,4 @@
1
- export declare const FEATURES: {
1
+ export declare const DEPRECATED_FEATURES: {
2
2
  WEBGL2: string;
3
3
  VERTEX_ARRAY_OBJECT: string;
4
4
  TIMER_QUERY: string;
@@ -1 +1 @@
1
- {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/_deprecated/features.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;CAsCpB,CAAC;AAEF,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,CAavE"}
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/_deprecated/features.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;CAsC/B,CAAC;AAEF,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,CAavE"}
@@ -1,7 +1,7 @@
1
1
  import GL from '@luma.gl/constants';
2
2
  import { isWebGL2 } from '@luma.gl/webgl';
3
3
  import { assert } from '@luma.gl/api';
4
- export const FEATURES = {
4
+ export const DEPRECATED_FEATURES = {
5
5
  WEBGL2: 'WEBGL2',
6
6
  VERTEX_ARRAY_OBJECT: 'VERTEX_ARRAY_OBJECT',
7
7
  TIMER_QUERY: 'TIMER_QUERY',
@@ -46,7 +46,7 @@ function isFeatureSupported(gl, cap) {
46
46
  const [webgl1Feature, webgl2Feature] = feature;
47
47
  const featureDefinition = isWebGL2(gl) ? webgl2Feature : webgl1Feature;
48
48
 
49
- if (cap === FEATURES.COLOR_ATTACHMENT_RGBA32F && !isWebGL2(gl)) {
49
+ if (cap === DEPRECATED_FEATURES.COLOR_ATTACHMENT_RGBA32F && !isWebGL2(gl)) {
50
50
  return checkFloat32ColorAttachment(gl);
51
51
  }
52
52
 
@@ -85,27 +85,27 @@ function checkFloat32ColorAttachment(gl) {
85
85
  }
86
86
 
87
87
  const WEBGL_FEATURES = {
88
- [FEATURES.WEBGL2]: [false, true],
89
- [FEATURES.VERTEX_ARRAY_OBJECT]: ['OES_vertex_array_object', true],
90
- [FEATURES.TIMER_QUERY]: ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],
91
- [FEATURES.INSTANCED_RENDERING]: ['ANGLE_instanced_arrays', true],
92
- [FEATURES.MULTIPLE_RENDER_TARGETS]: ['WEBGL_draw_buffers', true],
93
- [FEATURES.ELEMENT_INDEX_UINT32]: ['OES_element_index_uint', true],
94
- [FEATURES.BLEND_EQUATION_MINMAX]: ['EXT_blend_minmax', true],
95
- [FEATURES.FLOAT_BLEND]: ['EXT_float_blend', 'EXT_float_blend'],
96
- [FEATURES.COLOR_ENCODING_SRGB]: ['EXT_sRGB', true],
97
- [FEATURES.TEXTURE_DEPTH]: ['WEBGL_depth_texture', true],
98
- [FEATURES.TEXTURE_FLOAT]: ['OES_texture_float', true],
99
- [FEATURES.TEXTURE_HALF_FLOAT]: ['OES_texture_half_float', true],
100
- [FEATURES.TEXTURE_FILTER_LINEAR_FLOAT]: ['OES_texture_float_linear', 'OES_texture_float_linear'],
101
- [FEATURES.TEXTURE_FILTER_LINEAR_HALF_FLOAT]: ['OES_texture_half_float_linear', 'OES_texture_half_float_linear'],
102
- [FEATURES.TEXTURE_FILTER_ANISOTROPIC]: ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic'],
103
- [FEATURES.COLOR_ATTACHMENT_RGBA32F]: [false, 'EXT_color_buffer_float'],
104
- [FEATURES.COLOR_ATTACHMENT_FLOAT]: [false, 'EXT_color_buffer_float'],
105
- [FEATURES.COLOR_ATTACHMENT_HALF_FLOAT]: ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float'],
106
- [FEATURES.GLSL_FRAG_DATA]: ['WEBGL_draw_buffers', true],
107
- [FEATURES.GLSL_FRAG_DEPTH]: ['EXT_frag_depth', true],
108
- [FEATURES.GLSL_DERIVATIVES]: ['OES_standard_derivatives', true],
109
- [FEATURES.GLSL_TEXTURE_LOD]: ['EXT_shader_texture_lod', true]
88
+ [DEPRECATED_FEATURES.WEBGL2]: [false, true],
89
+ [DEPRECATED_FEATURES.VERTEX_ARRAY_OBJECT]: ['OES_vertex_array_object', true],
90
+ [DEPRECATED_FEATURES.TIMER_QUERY]: ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],
91
+ [DEPRECATED_FEATURES.INSTANCED_RENDERING]: ['ANGLE_instanced_arrays', true],
92
+ [DEPRECATED_FEATURES.MULTIPLE_RENDER_TARGETS]: ['WEBGL_draw_buffers', true],
93
+ [DEPRECATED_FEATURES.ELEMENT_INDEX_UINT32]: ['OES_element_index_uint', true],
94
+ [DEPRECATED_FEATURES.BLEND_EQUATION_MINMAX]: ['EXT_blend_minmax', true],
95
+ [DEPRECATED_FEATURES.FLOAT_BLEND]: ['EXT_float_blend', 'EXT_float_blend'],
96
+ [DEPRECATED_FEATURES.COLOR_ENCODING_SRGB]: ['EXT_sRGB', true],
97
+ [DEPRECATED_FEATURES.TEXTURE_DEPTH]: ['WEBGL_depth_texture', true],
98
+ [DEPRECATED_FEATURES.TEXTURE_FLOAT]: ['OES_texture_float', true],
99
+ [DEPRECATED_FEATURES.TEXTURE_HALF_FLOAT]: ['OES_texture_half_float', true],
100
+ [DEPRECATED_FEATURES.TEXTURE_FILTER_LINEAR_FLOAT]: ['OES_texture_float_linear', 'OES_texture_float_linear'],
101
+ [DEPRECATED_FEATURES.TEXTURE_FILTER_LINEAR_HALF_FLOAT]: ['OES_texture_half_float_linear', 'OES_texture_half_float_linear'],
102
+ [DEPRECATED_FEATURES.TEXTURE_FILTER_ANISOTROPIC]: ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic'],
103
+ [DEPRECATED_FEATURES.COLOR_ATTACHMENT_RGBA32F]: [false, 'EXT_color_buffer_float'],
104
+ [DEPRECATED_FEATURES.COLOR_ATTACHMENT_FLOAT]: [false, 'EXT_color_buffer_float'],
105
+ [DEPRECATED_FEATURES.COLOR_ATTACHMENT_HALF_FLOAT]: ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float'],
106
+ [DEPRECATED_FEATURES.GLSL_FRAG_DATA]: ['WEBGL_draw_buffers', true],
107
+ [DEPRECATED_FEATURES.GLSL_FRAG_DEPTH]: ['EXT_frag_depth', true],
108
+ [DEPRECATED_FEATURES.GLSL_DERIVATIVES]: ['OES_standard_derivatives', true],
109
+ [DEPRECATED_FEATURES.GLSL_TEXTURE_LOD]: ['EXT_shader_texture_lod', true]
110
110
  };
111
111
  //# sourceMappingURL=features.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/_deprecated/features.ts"],"names":["GL","isWebGL2","assert","FEATURES","WEBGL2","VERTEX_ARRAY_OBJECT","TIMER_QUERY","INSTANCED_RENDERING","MULTIPLE_RENDER_TARGETS","ELEMENT_INDEX_UINT32","BLEND_EQUATION_MINMAX","FLOAT_BLEND","COLOR_ENCODING_SRGB","TEXTURE_DEPTH","TEXTURE_FLOAT","TEXTURE_HALF_FLOAT","TEXTURE_FILTER_LINEAR_FLOAT","TEXTURE_FILTER_LINEAR_HALF_FLOAT","TEXTURE_FILTER_ANISOTROPIC","COLOR_ATTACHMENT_RGBA32F","COLOR_ATTACHMENT_FLOAT","COLOR_ATTACHMENT_HALF_FLOAT","GLSL_FRAG_DATA","GLSL_FRAG_DEPTH","GLSL_DERIVATIVES","GLSL_TEXTURE_LOD","getWebGLFeatures","gl","getExtension","features","Set","feature","WEBGL_FEATURES","isFeatureSupported","add","cap","webgl1Feature","webgl2Feature","featureDefinition","checkFloat32ColorAttachment","Boolean","texture","framebuffer","createTexture","bindTexture","TEXTURE_2D","level","internalFormat","RGBA","width","height","border","srcFormat","srcType","UNSIGNED_BYTE","pixel","Uint8Array","texImage2D","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","deleteTexture","deleteFramebuffer"],"mappings":"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","sourcesContent":["// Feature detection for WebGL\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '@luma.gl/webgl';\nimport {assert} from '@luma.gl/api';\n\n// TODO - this should be the default export, test cases need updating\nexport const FEATURES = {\n WEBGL2: 'WEBGL2',\n\n // API SUPPORT\n VERTEX_ARRAY_OBJECT: 'VERTEX_ARRAY_OBJECT',\n TIMER_QUERY: 'TIMER_QUERY',\n INSTANCED_RENDERING: 'INSTANCED_RENDERING',\n MULTIPLE_RENDER_TARGETS: 'MULTIPLE_RENDER_TARGETS',\n\n // FEATURES\n ELEMENT_INDEX_UINT32: 'ELEMENT_INDEX_UINT32',\n\n // BLENDING\n BLEND_EQUATION_MINMAX: 'BLEND_EQUATION_MINMAX',\n FLOAT_BLEND: 'FLOAT_BLEND',\n\n // TEXTURES: '// TEXTURES', RENDERBUFFERS\n COLOR_ENCODING_SRGB: 'COLOR_ENCODING_SRGB',\n\n // TEXTURES\n TEXTURE_DEPTH: 'TEXTURE_DEPTH',\n TEXTURE_FLOAT: 'TEXTURE_FLOAT',\n TEXTURE_HALF_FLOAT: 'TEXTURE_HALF_FLOAT',\n\n TEXTURE_FILTER_LINEAR_FLOAT: 'TEXTURE_FILTER_LINEAR_FLOAT',\n TEXTURE_FILTER_LINEAR_HALF_FLOAT: 'TEXTURE_FILTER_LINEAR_HALF_FLOAT',\n TEXTURE_FILTER_ANISOTROPIC: 'TEXTURE_FILTER_ANISOTROPIC',\n\n // FRAMEBUFFERS: '// FRAMEBUFFERS', TEXTURES AND RENDERBUFFERS\n COLOR_ATTACHMENT_RGBA32F: 'COLOR_ATTACHMENT_RGBA32F',\n COLOR_ATTACHMENT_FLOAT: 'COLOR_ATTACHMENT_FLOAT',\n COLOR_ATTACHMENT_HALF_FLOAT: 'COLOR_ATTACHMENT_HALF_FLOAT',\n\n // GLSL extensions\n GLSL_FRAG_DATA: 'GLSL_FRAG_DATA',\n GLSL_FRAG_DEPTH: 'GLSL_FRAG_DEPTH',\n GLSL_DERIVATIVES: 'GLSL_DERIVATIVES',\n GLSL_TEXTURE_LOD: 'GLSL_TEXTURE_LOD'\n};\n\n/** Extract all WebGL features */\nexport function getWebGLFeatures(gl: WebGLRenderingContext): Set<string> {\n // Enable EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend\n gl.getExtension('EXT_color_buffer_float');\n gl.getExtension('WEBGL_color_buffer_float');\n gl.getExtension('EXT_float_blend');\n\n const features = new Set<string>();\n for (const feature in WEBGL_FEATURES) {\n if (isFeatureSupported(gl, feature)) {\n features.add(feature);\n }\n }\n return features;\n}\n\nfunction isFeatureSupported(gl: WebGLRenderingContext, cap: string): boolean {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n const [webgl1Feature, webgl2Feature] = feature;\n\n // Get extension name from table\n const featureDefinition = isWebGL2(gl) ? webgl2Feature : webgl1Feature;\n\n if (cap === FEATURES.COLOR_ATTACHMENT_RGBA32F && !isWebGL2(gl)) {\n return checkFloat32ColorAttachment(gl);\n }\n\n // Check if the value is dependent on checking one or more extensions\n if (typeof featureDefinition === 'string') {\n return Boolean(gl.getExtension(featureDefinition));\n }\n\n return featureDefinition;\n}\n\n\n// function to test if Float 32 bit format texture can be bound as color attachment\nfunction checkFloat32ColorAttachment(gl: WebGLRenderingContext) {\n let texture: WebGLTexture;\n let framebuffer: WebGLFramebuffer;\n try {\n const texture = gl.createTexture();\n gl.bindTexture(GL.TEXTURE_2D, texture);\n\n const level = 0;\n const internalFormat = gl.RGBA;\n const width = 1;\n const height = 1;\n const border = 0;\n const srcFormat = gl.RGBA;\n const srcType = gl.UNSIGNED_BYTE;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(gl.TEXTURE_2D, level, internalFormat,\n width, height, border, srcFormat, srcType,\n pixel);\n\n const framebuffer = gl.createFramebuffer();\n gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) === GL.FRAMEBUFFER_COMPLETE;\n return status;\n } finally {\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(framebuffer);\n }\n}\n\n// Defines luma.gl \"feature\" names and semantics\n// Format: 'feature-name: [WebGL1 support, WebGL2 support] / [WebGL1 and WebGL2 support]', when support is 'string' it is the name of the extension\nconst WEBGL_FEATURES: Record<string, [boolean | string, boolean | string]> = {\n [FEATURES.WEBGL2]: [false, true],\n\n // API SUPPORT\n [FEATURES.VERTEX_ARRAY_OBJECT]: ['OES_vertex_array_object', true],\n [FEATURES.TIMER_QUERY]: ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],\n [FEATURES.INSTANCED_RENDERING]: ['ANGLE_instanced_arrays', true],\n [FEATURES.MULTIPLE_RENDER_TARGETS]: ['WEBGL_draw_buffers', true],\n\n // FEATURES\n [FEATURES.ELEMENT_INDEX_UINT32]: ['OES_element_index_uint', true],\n\n // BLENDING\n [FEATURES.BLEND_EQUATION_MINMAX]: ['EXT_blend_minmax', true],\n [FEATURES.FLOAT_BLEND]: ['EXT_float_blend', 'EXT_float_blend'],\n\n // TEXTURES, RENDERBUFFERS\n [FEATURES.COLOR_ENCODING_SRGB]: ['EXT_sRGB', true],\n\n // TEXTURES\n [FEATURES.TEXTURE_DEPTH]: ['WEBGL_depth_texture', true],\n [FEATURES.TEXTURE_FLOAT]: ['OES_texture_float', true],\n [FEATURES.TEXTURE_HALF_FLOAT]: ['OES_texture_half_float', true],\n\n [FEATURES.TEXTURE_FILTER_LINEAR_FLOAT]: ['OES_texture_float_linear', 'OES_texture_float_linear'],\n [FEATURES.TEXTURE_FILTER_LINEAR_HALF_FLOAT]: ['OES_texture_half_float_linear', 'OES_texture_half_float_linear'],\n [FEATURES.TEXTURE_FILTER_ANISOTROPIC]: ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic'],\n\n // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS\n [FEATURES.COLOR_ATTACHMENT_RGBA32F]: [false, 'EXT_color_buffer_float'], // Note override check\n [FEATURES.COLOR_ATTACHMENT_FLOAT]: [false, 'EXT_color_buffer_float'],\n [FEATURES.COLOR_ATTACHMENT_HALF_FLOAT]: ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float'],\n\n // GLSL extensions\n [FEATURES.GLSL_FRAG_DATA]: ['WEBGL_draw_buffers', true],\n [FEATURES.GLSL_FRAG_DEPTH]: ['EXT_frag_depth', true],\n [FEATURES.GLSL_DERIVATIVES]: ['OES_standard_derivatives', true],\n [FEATURES.GLSL_TEXTURE_LOD]: ['EXT_shader_texture_lod', true]\n};\n"],"file":"features.js"}
1
+ {"version":3,"sources":["../../src/_deprecated/features.ts"],"names":["GL","isWebGL2","assert","DEPRECATED_FEATURES","WEBGL2","VERTEX_ARRAY_OBJECT","TIMER_QUERY","INSTANCED_RENDERING","MULTIPLE_RENDER_TARGETS","ELEMENT_INDEX_UINT32","BLEND_EQUATION_MINMAX","FLOAT_BLEND","COLOR_ENCODING_SRGB","TEXTURE_DEPTH","TEXTURE_FLOAT","TEXTURE_HALF_FLOAT","TEXTURE_FILTER_LINEAR_FLOAT","TEXTURE_FILTER_LINEAR_HALF_FLOAT","TEXTURE_FILTER_ANISOTROPIC","COLOR_ATTACHMENT_RGBA32F","COLOR_ATTACHMENT_FLOAT","COLOR_ATTACHMENT_HALF_FLOAT","GLSL_FRAG_DATA","GLSL_FRAG_DEPTH","GLSL_DERIVATIVES","GLSL_TEXTURE_LOD","getWebGLFeatures","gl","getExtension","features","Set","feature","WEBGL_FEATURES","isFeatureSupported","add","cap","webgl1Feature","webgl2Feature","featureDefinition","checkFloat32ColorAttachment","Boolean","texture","framebuffer","createTexture","bindTexture","TEXTURE_2D","level","internalFormat","RGBA","width","height","border","srcFormat","srcType","UNSIGNED_BYTE","pixel","Uint8Array","texImage2D","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","deleteTexture","deleteFramebuffer"],"mappings":"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","sourcesContent":["// Feature detection for WebGL\n// Provides a function that enables simple checking of which WebGL features are\n// available in an WebGL1 or WebGL2 environment.\n\nimport GL from '@luma.gl/constants';\nimport {isWebGL2} from '@luma.gl/webgl';\nimport {assert} from '@luma.gl/api';\n\n// TODO - this should be the default export, test cases need updating\nexport const DEPRECATED_FEATURES = {\n WEBGL2: 'WEBGL2',\n\n // API SUPPORT\n VERTEX_ARRAY_OBJECT: 'VERTEX_ARRAY_OBJECT',\n TIMER_QUERY: 'TIMER_QUERY',\n INSTANCED_RENDERING: 'INSTANCED_RENDERING',\n MULTIPLE_RENDER_TARGETS: 'MULTIPLE_RENDER_TARGETS',\n\n // FEATURES\n ELEMENT_INDEX_UINT32: 'ELEMENT_INDEX_UINT32',\n\n // BLENDING\n BLEND_EQUATION_MINMAX: 'BLEND_EQUATION_MINMAX',\n FLOAT_BLEND: 'FLOAT_BLEND',\n\n // TEXTURES: '// TEXTURES', RENDERBUFFERS\n COLOR_ENCODING_SRGB: 'COLOR_ENCODING_SRGB',\n\n // TEXTURES\n TEXTURE_DEPTH: 'TEXTURE_DEPTH',\n TEXTURE_FLOAT: 'TEXTURE_FLOAT',\n TEXTURE_HALF_FLOAT: 'TEXTURE_HALF_FLOAT',\n\n TEXTURE_FILTER_LINEAR_FLOAT: 'TEXTURE_FILTER_LINEAR_FLOAT',\n TEXTURE_FILTER_LINEAR_HALF_FLOAT: 'TEXTURE_FILTER_LINEAR_HALF_FLOAT',\n TEXTURE_FILTER_ANISOTROPIC: 'TEXTURE_FILTER_ANISOTROPIC',\n\n // FRAMEBUFFERS: '// FRAMEBUFFERS', TEXTURES AND RENDERBUFFERS\n COLOR_ATTACHMENT_RGBA32F: 'COLOR_ATTACHMENT_RGBA32F',\n COLOR_ATTACHMENT_FLOAT: 'COLOR_ATTACHMENT_FLOAT',\n COLOR_ATTACHMENT_HALF_FLOAT: 'COLOR_ATTACHMENT_HALF_FLOAT',\n\n // GLSL extensions\n GLSL_FRAG_DATA: 'GLSL_FRAG_DATA',\n GLSL_FRAG_DEPTH: 'GLSL_FRAG_DEPTH',\n GLSL_DERIVATIVES: 'GLSL_DERIVATIVES',\n GLSL_TEXTURE_LOD: 'GLSL_TEXTURE_LOD'\n};\n\n/** Extract all WebGL features */\nexport function getWebGLFeatures(gl: WebGLRenderingContext): Set<string> {\n // Enable EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend\n gl.getExtension('EXT_color_buffer_float');\n gl.getExtension('WEBGL_color_buffer_float');\n gl.getExtension('EXT_float_blend');\n\n const features = new Set<string>();\n for (const feature in WEBGL_FEATURES) {\n if (isFeatureSupported(gl, feature)) {\n features.add(feature);\n }\n }\n return features;\n}\n\nfunction isFeatureSupported(gl: WebGLRenderingContext, cap: string): boolean {\n const feature = WEBGL_FEATURES[cap];\n assert(feature, cap);\n\n const [webgl1Feature, webgl2Feature] = feature;\n\n // Get extension name from table\n const featureDefinition = isWebGL2(gl) ? webgl2Feature : webgl1Feature;\n\n if (cap === DEPRECATED_FEATURES.COLOR_ATTACHMENT_RGBA32F && !isWebGL2(gl)) {\n return checkFloat32ColorAttachment(gl);\n }\n\n // Check if the value is dependent on checking one or more extensions\n if (typeof featureDefinition === 'string') {\n return Boolean(gl.getExtension(featureDefinition));\n }\n\n return featureDefinition;\n}\n\n\n// function to test if Float 32 bit format texture can be bound as color attachment\nfunction checkFloat32ColorAttachment(gl: WebGLRenderingContext) {\n let texture: WebGLTexture;\n let framebuffer: WebGLFramebuffer;\n try {\n const texture = gl.createTexture();\n gl.bindTexture(GL.TEXTURE_2D, texture);\n\n const level = 0;\n const internalFormat = gl.RGBA;\n const width = 1;\n const height = 1;\n const border = 0;\n const srcFormat = gl.RGBA;\n const srcType = gl.UNSIGNED_BYTE;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(gl.TEXTURE_2D, level, internalFormat,\n width, height, border, srcFormat, srcType,\n pixel);\n\n const framebuffer = gl.createFramebuffer();\n gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);\n const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) === GL.FRAMEBUFFER_COMPLETE;\n return status;\n } finally {\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(framebuffer);\n }\n}\n\n// Defines luma.gl \"feature\" names and semantics\n// Format: 'feature-name: [WebGL1 support, WebGL2 support] / [WebGL1 and WebGL2 support]', when support is 'string' it is the name of the extension\nconst WEBGL_FEATURES: Record<string, [boolean | string, boolean | string]> = {\n [DEPRECATED_FEATURES.WEBGL2]: [false, true],\n\n // API SUPPORT\n [DEPRECATED_FEATURES.VERTEX_ARRAY_OBJECT]: ['OES_vertex_array_object', true],\n [DEPRECATED_FEATURES.TIMER_QUERY]: ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2'],\n [DEPRECATED_FEATURES.INSTANCED_RENDERING]: ['ANGLE_instanced_arrays', true],\n [DEPRECATED_FEATURES.MULTIPLE_RENDER_TARGETS]: ['WEBGL_draw_buffers', true],\n\n // FEATURES\n [DEPRECATED_FEATURES.ELEMENT_INDEX_UINT32]: ['OES_element_index_uint', true],\n\n // BLENDING\n [DEPRECATED_FEATURES.BLEND_EQUATION_MINMAX]: ['EXT_blend_minmax', true],\n [DEPRECATED_FEATURES.FLOAT_BLEND]: ['EXT_float_blend', 'EXT_float_blend'],\n\n // TEXTURES, RENDERBUFFERS\n [DEPRECATED_FEATURES.COLOR_ENCODING_SRGB]: ['EXT_sRGB', true],\n\n // TEXTURES\n [DEPRECATED_FEATURES.TEXTURE_DEPTH]: ['WEBGL_depth_texture', true],\n [DEPRECATED_FEATURES.TEXTURE_FLOAT]: ['OES_texture_float', true],\n [DEPRECATED_FEATURES.TEXTURE_HALF_FLOAT]: ['OES_texture_half_float', true],\n\n [DEPRECATED_FEATURES.TEXTURE_FILTER_LINEAR_FLOAT]: ['OES_texture_float_linear', 'OES_texture_float_linear'],\n [DEPRECATED_FEATURES.TEXTURE_FILTER_LINEAR_HALF_FLOAT]: ['OES_texture_half_float_linear', 'OES_texture_half_float_linear'],\n [DEPRECATED_FEATURES.TEXTURE_FILTER_ANISOTROPIC]: ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic'],\n\n // FRAMEBUFFERS, TEXTURES AND RENDERBUFFERS\n [DEPRECATED_FEATURES.COLOR_ATTACHMENT_RGBA32F]: [false, 'EXT_color_buffer_float'], // Note override check\n [DEPRECATED_FEATURES.COLOR_ATTACHMENT_FLOAT]: [false, 'EXT_color_buffer_float'],\n [DEPRECATED_FEATURES.COLOR_ATTACHMENT_HALF_FLOAT]: ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float'],\n\n // GLSL extensions\n [DEPRECATED_FEATURES.GLSL_FRAG_DATA]: ['WEBGL_draw_buffers', true],\n [DEPRECATED_FEATURES.GLSL_FRAG_DEPTH]: ['EXT_frag_depth', true],\n [DEPRECATED_FEATURES.GLSL_DERIVATIVES]: ['OES_standard_derivatives', true],\n [DEPRECATED_FEATURES.GLSL_TEXTURE_LOD]: ['EXT_shader_texture_lod', true]\n};\n"],"file":"features.js"}
@@ -48,7 +48,6 @@ export default class WebGLDevice extends Device implements ContextState {
48
48
  readonly gl2: WebGL2RenderingContext;
49
49
  /** Is this device attached to an offscreen context */
50
50
  readonly offScreen: boolean;
51
- readonly webglFeatures: Set<string>;
52
51
  readonly webglLimits: WebGLLimits;
53
52
  defaultFramebuffer?: Framebuffer;
54
53
  defaultVertexArray?: VertexArrayObject;
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-device.d.ts","sourceRoot":"","sources":["../../src/adapter/webgl-device.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgl-device.d.ts","sourceRoot":"","sources":["../../src/adapter/webgl-device.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,7 @@ const DEFAULT_DEVICE_PROPS = {
32
32
  preserveDrawingBuffer: undefined,
33
33
  failIfMajorPerformanceCaveat: undefined
34
34
  };
35
+ const LOG_LEVEL = 1;
35
36
  const glToContextMap = new WeakMap();
36
37
  export function getWebGLDevice(gl) {
37
38
  return glToContextMap.get(gl);
@@ -81,8 +82,6 @@ export default class WebGLDevice extends Device {
81
82
 
82
83
  _defineProperty(this, "offScreen", false);
83
84
 
84
- _defineProperty(this, "webglFeatures", void 0);
85
-
86
85
  _defineProperty(this, "webglLimits", void 0);
87
86
 
88
87
  _defineProperty(this, "defaultFramebuffer", void 0);
@@ -132,21 +131,21 @@ export default class WebGLDevice extends Device {
132
131
  this.info = getDeviceInfo(this.gl);
133
132
  const debug = this.gl.debug ? ' debug' : '';
134
133
  const webGL = isWebGL2(this.gl) ? 'WebGL2' : 'WebGL1';
135
- log.group(0, "".concat(webGL).concat(debug, " context: ").concat(this.info.vendor, ", ").concat(this.info.renderer))();
134
+ log.groupCollapsed(LOG_LEVEL, "".concat(webGL).concat(debug, " context: ").concat(this.info.vendor, ", ").concat(this.info.renderer))();
136
135
  polyfillContext(this.gl);
137
- log.probe(0, 'polyfilled context')();
136
+ log.probe(LOG_LEVEL, 'polyfilled context')();
138
137
  trackContextState(this.gl, {
139
138
  copyState: false,
140
139
  log: (...args) => log.log(1, ...args)()
141
140
  });
142
- log.probe(0, 'instrumented context')();
141
+ log.probe(LOG_LEVEL, 'instrumented context')();
143
142
  this.features = getDeviceFeatures(this.gl);
144
- log.probe(0, "queried device features ".concat(counter))();
143
+ log.probe(LOG_LEVEL, "queried device features ".concat(counter))();
145
144
  this.limits = getDeviceLimits(this.gl);
146
- log.probe(0, 'queried device limits')();
145
+ log.probe(LOG_LEVEL, 'queried device limits')();
147
146
  this.webglLimits = getWebGLLimits(this.gl);
148
- log.probe(0, 'queried webgl limits')();
149
- log.groupEnd(0)();
147
+ log.probe(LOG_LEVEL, 'queried webgl limits')();
148
+ log.groupEnd(LOG_LEVEL)();
150
149
  this._state = 'initialized';
151
150
  }
152
151
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapter/webgl-device.ts"],"names":["Device","log","polyfillContext","trackContextState","getDevicePixelRatio","setDevicePixelRatio","createBrowserContext","getCanvas","isWebGL","isWebGL2","getDeviceInfo","getDeviceFeatures","getDeviceLimits","getWebGLLimits","WEBGLBuffer","WEBGLShader","Texture2D","DEFAULT_DEVICE_PROPS","canvas","undefined","gl","webgl2","webgl1","manageState","width","height","debug","break","onContextLost","console","error","onContextRestored","info","alpha","depth","stencil","antialias","premultipliedAlpha","preserveDrawingBuffer","failIfMajorPerformanceCaveat","glToContextMap","WeakMap","getWebGLDevice","get","counter","WebGLDevice","fromContext","device","attach","props","Error","constructor","clientWidth","clientHeight","devicePixelRatio","_state","offScreen","OffscreenCanvas","_createContext","gl2","_version","WebGL2RenderingContext","set","webGL","group","vendor","renderer","probe","copyState","args","features","limits","webglLimits","groupEnd","destroy","ext","getExtension","resize","options","useDevicePixels","_createBuffer","createTexture","createShader","commit","targetCanvas"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport {Device, DeviceInfo, DeviceLimits, log} from '@luma.gl/api';\nimport {polyfillContext} from '../context/polyfill/polyfill-context';\nimport {trackContextState} from '../context/state-tracker/track-context-state';\nimport { ContextState } from '../context/context/context-state';\nimport {getDevicePixelRatio, setDevicePixelRatio} from '../context/context/device-pixels';\nimport {createBrowserContext} from '../context/context/create-context';\nimport {getCanvas} from '../context/context/get-canvas';\nimport {isWebGL, isWebGL2} from '../context/context/webgl-checks';\nimport {getDeviceInfo} from './device-helpers/get-device-info';\nimport {getDeviceFeatures, Feature} from './device-helpers/device-features';\nimport {getDeviceLimits, getWebGLLimits, WebGLLimits} from './device-helpers/device-limits';\n\n// WebGL classes\nimport type {BufferProps, ShaderProps} from '@luma.gl/api';\nimport WEBGLBuffer from '../classes/webgl-buffer';\nimport {WEBGLShader} from '../adapter/webgl-shader';\nimport Texture2D, {Texture2DProps} from '../classes/texture-2d';\nimport type {default as Framebuffer} from '../classes/framebuffer';\nimport type {default as VertexArrayObject} from '../classes/vertex-array-object';\n\n/** WebGLDevice options */\nexport type WebGLDeviceProps = {\n canvas?: HTMLCanvasElement | OffscreenCanvas | string; // A canvas element or a canvas string id\n width?: number /** width is only used when creating a new canvas */;\n height?: number /** height is only used when creating a new canvas */;\n // Attach to existing context\n gl?: WebGLRenderingContext | WebGL2RenderingContext;\n // COMMON CONTEXT PARAMETERS\n webgl2?: boolean; // Set to false to not create a WebGL2 context (force webgl1)\n webgl1?: boolean; // set to false to not create a WebGL1 context (fails if webgl2 not available)\n manageState?: boolean; // Set to false to disable WebGL state management instrumentation\n debug?: boolean; // Instrument context (at the expense of performance)\n break?: Array<any>; // TODO: types\n onContextLost?: (event: Event) => void;\n onContextRestored?: (event: Event) => void;\n // BROWSER CONTEXT PARAMETERS\n alpha?: boolean; // Default render target has an alpha buffer.\n depth?: boolean; // Default render target has a depth buffer of at least 16 bits.\n stencil?: boolean; // Default render target has a stencil buffer of at least 8 bits.\n antialias?: boolean; // Boolean that indicates whether or not to perform anti-aliasing.\n premultipliedAlpha?: boolean; // Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.\n preserveDrawingBuffer?: boolean; // Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten\n failIfMajorPerformanceCaveat?: boolean; // Do not create if the system performance is low.\n};\n\nconst DEFAULT_DEVICE_PROPS: Required<WebGLDeviceProps> = {\n canvas: undefined, // A canvas element or a canvas string id\n gl: undefined,\n webgl2: true, // Attempt to create a WebGL2 context\n webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)\n manageState: true,\n width: 800, // width are height are only used by headless gl\n height: 600,\n debug: false, // Instrument context (at the expense of performance)\n break: undefined,\n onContextLost: () => console.error('WebGL context lost'),\n onContextRestored: () => console.info('WebGL context restored'),\n\n alpha: undefined,\n depth: undefined,\n stencil: undefined,\n antialias: undefined,\n premultipliedAlpha: undefined,\n preserveDrawingBuffer: undefined,\n failIfMajorPerformanceCaveat: undefined\n};\n\n// TODO use weakmap instead of modifying context\nconst glToContextMap = new WeakMap<WebGLRenderingContext | WebGL2RenderingContext, WebGLDevice>();\n\nexport function getWebGLDevice(gl: WebGLRenderingContext | WebGL2RenderingContext): WebGLDevice | undefined {\n return glToContextMap.get(gl);\n}\n\nlet counter = 0;\n\n/** WebGPU style Device API for a WebGL context */\nexport default class WebGLDevice extends Device implements ContextState {\n // WebGPU style API\n\n /** A set like interface to test features */\n readonly features: Set<Feature>;\n readonly limits: DeviceLimits;\n readonly info: DeviceInfo;\n\n /** Promise that rejects when context is lost */\n readonly lost: Promise<string>;\n\n // Common API\n props: Required<WebGLDeviceProps>;\n userData: {[key: string]: any};\n\n // WebGL specific API\n readonly isWebGL2: boolean;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext;\n /** Is this device attached to an offscreen context */\n readonly offScreen: boolean = false;\n\n readonly webglFeatures: Set<string>;\n readonly webglLimits: WebGLLimits;\n\n defaultFramebuffer?: Framebuffer;\n defaultVertexArray?: VertexArrayObject;\n\n // State used by luma.gl classes\n _state: 'uninitialized' | 'initializing' | 'initialized' = 'uninitialized';\n readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};\n readonly _extensions: Record<string, any> = {};\n _polyfilled: boolean = false;\n\n /**\n *\n */\n static fromContext(gl: WebGLRenderingContext): WebGLDevice {\n // @ts-expect-error\n return gl.device as WebGLDevice;\n }\n\n /**\n * Get a device instance from a GL context\n * Creates and instruments the device if not already created\n * @param gl\n * @returns\n */\n static attach(\n gl: Device | WebGLRenderingContext | WebGL2RenderingContext,\n props?: WebGLDeviceProps\n ): WebGLDevice {\n if (gl instanceof WebGLDevice) {\n return gl;\n }\n if (!isWebGL(gl)) {\n throw new Error('Invalid WebGLRenderingContext');\n }\n return new WebGLDevice({...props, gl: gl as WebGLRenderingContext});\n }\n\n\n constructor(props: WebGLDeviceProps) {\n super();\n\n this.props = {...DEFAULT_DEVICE_PROPS, ...props};\n\n // If attaching to an already attached context, return the attached device\n // @ts-expect-error device is attached to context\n const device: WebGLDevice | undefined = this.props.gl?.device;\n if (device) {\n if (device._state !== 'initialized') {\n log.error('recursive context');\n throw new Error('recursive context');\n }\n return device;\n }\n\n this.offScreen =\n typeof OffscreenCanvas !== 'undefined' &&\n props.canvas instanceof OffscreenCanvas;\n\n // Create an instrument context\n this.gl = (this.props.gl || this._createContext(props)) as WebGLRenderingContext;\n this.gl2 = this.gl as WebGL2RenderingContext;\n this.isWebGL2 = isWebGL2(this.gl);\n this._state = 'initializing';\n // Avoid multiple instrumentations\n // @ts-expect-error\n if (this.gl.device) {\n log.error('device already created');\n throw new Error('device already created'); // ASSERT this device;\n }\n // @ts-expect-error\n this.gl.device = this;\n // @ts-ignore\n this.gl._version = typeof WebGL2RenderingContext !== 'undefined' && this.gl instanceof WebGL2RenderingContext ? 2 : 1;\n // TODO - move to weak map indexing\n glToContextMap.set(this.gl, this);\n\n // Luma Device fields\n this.info = getDeviceInfo(this.gl);\n // Log some debug info about the newly created context\n // @ts-expect-error device is attached to context\n const debug = this.gl.debug ? ' debug' : '';\n const webGL = isWebGL2(this.gl) ? 'WebGL2' : 'WebGL1';\n log.group(0, `${webGL}${debug} context: ${this.info.vendor}, ${this.info.renderer}`)();\n\n polyfillContext(this.gl);\n log.probe(0, 'polyfilled context')();\n\n // Install context state tracking\n trackContextState(this.gl, {\n copyState: false,\n log: (...args) => log.log(1, ...args)()\n });\n log.probe(0, 'instrumented context')();\n\n // WebGPU Device fields\n this.features = getDeviceFeatures(this.gl);\n log.probe(0, `queried device features ${counter}`)();\n this.limits = getDeviceLimits(this.gl);\n log.probe(0, 'queried device limits')();\n\n // Add seer integration - TODO - currently removed\n\n // WEBGL specific fields\n this.webglLimits = getWebGLLimits(this.gl);\n log.probe(0, 'queried webgl limits')();\n\n // Add debug instrumentation to the context\n // if (isBrowser() && props.debug) {\n // // @ts-ignore\n // const {makeDebugContext} = global;\n // if (!makeDebugContext) {\n // log.warn('WebGL debug mode not activated. import \"@luma.gl/debug\" to enable.')();\n // } else {\n // // @ts-ignore\n // this.gl = global.makeDebugContext(this.gl, props);\n // this.gl2 = this.gl as WebGL2RenderingContext;\n // // Debug forces log level to at least 1\n // log.level = Math.max(log.level, 1);\n // }\n // }\n\n log.groupEnd(0)();\n this._state = 'initialized';\n }\n\n /**\n * Destroys the context\n * @note Has no effect for browser contexts, there is no browser API for destroying contexts\n */\n destroy() {\n let ext = this.gl.getExtension('STACKGL_destroy_context');\n if (ext) {\n ext.destroy();\n }\n // ext = this.gl.getExtension('WEBGL_lose_context');\n // if (ext) {\n // // TODO - disconnect context lost callbacks?\n // ext.loseContext();\n // }\n }\n\n // WEBGL SPECIFIC METHODS\n\n /**\n * Resize the canvas' drawing buffer.\n *\n * Can match the canvas CSS size, and optionally also consider devicePixelRatio\n * Can be called every frame\n *\n * Regardless of size, the drawing buffer will always be scaled to the viewport, but\n * for best visual results, usually set to either:\n * canvas CSS width x canvas CSS height\n * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio\n * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n */\n resize(options?: {width?: number; height?: number; useDevicePixels?: boolean | number}): void {\n // Resize browser context .\n if (this.gl.canvas) {\n const devicePixelRatio = getDevicePixelRatio(options?.useDevicePixels);\n setDevicePixelRatio(this.gl, devicePixelRatio, options);\n return;\n }\n\n // Resize headless gl context\n const ext = this.gl.getExtension('STACKGL_resize_drawingbuffer');\n if (ext && options && `width` in options && `height` in options) {\n ext.resize(options.width, options.height);\n }\n }\n\n _createBuffer(props: BufferProps): WEBGLBuffer {\n return new WEBGLBuffer(this.gl, props);\n }\n\n createTexture(props: Texture2DProps): Texture2D {\n return new Texture2D(this, props);\n }\n\n createShader(props: ShaderProps): WEBGLShader {\n return new WEBGLShader(this, props);\n }\n\n /**\n * Offscreen Canvas Support: Commit the frame\n * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit\n * Chrome's offscreen canvas does not require gl.commit\n */\n commit(): void {\n // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext\n if (this.offScreen && this.gl.commit) {\n // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext\n this.gl.commit();\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Creates a context giving access to the WebGL API\n */\n _createContext(options?: WebGLDeviceProps): WebGLRenderingContext {\n const {width, height, canvas} = this.props;\n // Get or create a canvas\n const targetCanvas = getCanvas({canvas, width, height});\n // Create a WebGL context in the canvas\n return createBrowserContext(targetCanvas, options);\n }\n}\n\n/*\nimport {\n isWebGL, isWebGL2,\n createGLContext,\n instrumentGLContext,\n getContextDebugInfo,\n resizeGLContext\n} from '@luma.gl/gltools';\n\n// prettier-ignore\nimport {\n Device, DeviceInfo, DeviceLimits,\n Buffer, BufferProps\n} from '@luma.gl/api';\n\nimport {getWebGLDeviceInfo} from '../converters/webgl-device-info';\nimport {getWebGLLimits} from '../converters/webgl-limits';\nimport {getWebGLFeatures} from '../converters/webgl-features';\n\nexport default class WEBGLDevice implements Device {\n readonly handle: WebGLRenderingContext;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext | null;\n readonly canvas: HTMLCanvasElement;\n\n static isSupported(options: {canvas?: HTMLCanvasElement}): boolean {\n const {canvas} = options;\n let gl;\n try {\n gl = canvas && canvas.getContext(\"webgl\");\n gl = gl && canvas && canvas.getContext(\"experimental-webgl\");\n } catch (x) {\n gl = null;\n }\n return Boolean(gl);\n }\n\n constructor(props = {}) {\n const {canvas, swapChainFormat = \"bgra8unorm\"} = props;\n\n const gl = createGLContext(props);\n this.handle =\n this.gl = gl;\n this.gl2 = gl instanceof WebGL2RenderingContext ? gl : null;\n this.canvas = canvas;\n }\n\n resize(width, height) {\n resizeGLContext(this.gl);\n }\n\n getInfo(): DeviceInfo {\n return getWebGLDeviceInfo(this.gl);\n }\n\n getLimits(): DeviceLimits {\n return getWebGLLimits(this.gl, this.gl2);\n }\n\n getFeatures(): string[] {\n return getWebGLFeatures(this.gl);\n }\n\n createBuffer(props: WebGPUBufferProps): WEBGLBuffer {\n return new WEBGLBuffer(this.gl2 || this.gl, props);\n }\n\n createTexture(props: WebGPUTextureProps): WEBGLTexture {\n return new WEBGLTexture(this, props);\n }\n\n createSampler(props: WebGPUSamplerProps): WEBGLSampler {\n return new WEBGLSampler(this, props);\n }\n\n createShader(props: WebGPUShaderProps): WEBGLShader {\n return new WEBGLShader(this, props);\n }\n\n createRenderPipeline(props: WebGPURenderPipelineProps): WEBGLPipeline {\n return new WEBGLRenderPipeline(this, props);\n }\n\n createComputePipeline(props: WebGPUComputePipelineProps): WebGPUPipeline {\n return new WebGPUComputePipeline(this, props);\n }\n\n\n // PRIVATE\n\n _startFrame() {}\n\n _endFrame() {}\n}\n*/\n"],"file":"webgl-device.js"}
1
+ {"version":3,"sources":["../../src/adapter/webgl-device.ts"],"names":["Device","log","polyfillContext","trackContextState","getDevicePixelRatio","setDevicePixelRatio","createBrowserContext","getCanvas","isWebGL","isWebGL2","getDeviceInfo","getDeviceFeatures","getDeviceLimits","getWebGLLimits","WEBGLBuffer","WEBGLShader","Texture2D","DEFAULT_DEVICE_PROPS","canvas","undefined","gl","webgl2","webgl1","manageState","width","height","debug","break","onContextLost","console","error","onContextRestored","info","alpha","depth","stencil","antialias","premultipliedAlpha","preserveDrawingBuffer","failIfMajorPerformanceCaveat","LOG_LEVEL","glToContextMap","WeakMap","getWebGLDevice","get","counter","WebGLDevice","fromContext","device","attach","props","Error","constructor","clientWidth","clientHeight","devicePixelRatio","_state","offScreen","OffscreenCanvas","_createContext","gl2","_version","WebGL2RenderingContext","set","webGL","groupCollapsed","vendor","renderer","probe","copyState","args","features","limits","webglLimits","groupEnd","destroy","ext","getExtension","resize","options","useDevicePixels","_createBuffer","createTexture","createShader","commit","targetCanvas"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\nimport {Device, DeviceInfo, DeviceLimits, log} from '@luma.gl/api';\nimport {polyfillContext} from '../context/polyfill/polyfill-context';\nimport {trackContextState} from '../context/state-tracker/track-context-state';\nimport { ContextState } from '../context/context/context-state';\nimport {getDevicePixelRatio, setDevicePixelRatio} from '../context/context/device-pixels';\nimport {createBrowserContext} from '../context/context/create-context';\nimport {getCanvas} from '../context/context/get-canvas';\nimport {isWebGL, isWebGL2} from '../context/context/webgl-checks';\nimport {getDeviceInfo} from './device-helpers/get-device-info';\nimport {getDeviceFeatures, Feature} from './device-helpers/device-features';\nimport {getDeviceLimits, getWebGLLimits, WebGLLimits} from './device-helpers/device-limits';\n\n// WebGL classes\nimport type {BufferProps, ShaderProps} from '@luma.gl/api';\nimport WEBGLBuffer from '../classes/webgl-buffer';\nimport {WEBGLShader} from '../adapter/webgl-shader';\nimport Texture2D, {Texture2DProps} from '../classes/texture-2d';\nimport type {default as Framebuffer} from '../classes/framebuffer';\nimport type {default as VertexArrayObject} from '../classes/vertex-array-object';\n\n/** WebGLDevice options */\nexport type WebGLDeviceProps = {\n canvas?: HTMLCanvasElement | OffscreenCanvas | string; // A canvas element or a canvas string id\n width?: number /** width is only used when creating a new canvas */;\n height?: number /** height is only used when creating a new canvas */;\n // Attach to existing context\n gl?: WebGLRenderingContext | WebGL2RenderingContext;\n // COMMON CONTEXT PARAMETERS\n webgl2?: boolean; // Set to false to not create a WebGL2 context (force webgl1)\n webgl1?: boolean; // set to false to not create a WebGL1 context (fails if webgl2 not available)\n manageState?: boolean; // Set to false to disable WebGL state management instrumentation\n debug?: boolean; // Instrument context (at the expense of performance)\n break?: Array<any>; // TODO: types\n onContextLost?: (event: Event) => void;\n onContextRestored?: (event: Event) => void;\n // BROWSER CONTEXT PARAMETERS\n alpha?: boolean; // Default render target has an alpha buffer.\n depth?: boolean; // Default render target has a depth buffer of at least 16 bits.\n stencil?: boolean; // Default render target has a stencil buffer of at least 8 bits.\n antialias?: boolean; // Boolean that indicates whether or not to perform anti-aliasing.\n premultipliedAlpha?: boolean; // Boolean that indicates that the page compositor will assume the drawing buffer contains colors with pre-multiplied alpha.\n preserveDrawingBuffer?: boolean; // Default render target buffers will not be automatically cleared and will preserve their values until cleared or overwritten\n failIfMajorPerformanceCaveat?: boolean; // Do not create if the system performance is low.\n};\n\nconst DEFAULT_DEVICE_PROPS: Required<WebGLDeviceProps> = {\n canvas: undefined, // A canvas element or a canvas string id\n gl: undefined,\n webgl2: true, // Attempt to create a WebGL2 context\n webgl1: true, // Attempt to create a WebGL1 context (false to fail if webgl2 not available)\n manageState: true,\n width: 800, // width are height are only used by headless gl\n height: 600,\n debug: false, // Instrument context (at the expense of performance)\n break: undefined,\n onContextLost: () => console.error('WebGL context lost'),\n onContextRestored: () => console.info('WebGL context restored'),\n\n alpha: undefined,\n depth: undefined,\n stencil: undefined,\n antialias: undefined,\n premultipliedAlpha: undefined,\n preserveDrawingBuffer: undefined,\n failIfMajorPerformanceCaveat: undefined\n};\n\nconst LOG_LEVEL = 1;\n\n// TODO use weakmap instead of modifying context\nconst glToContextMap = new WeakMap<WebGLRenderingContext | WebGL2RenderingContext, WebGLDevice>();\n\nexport function getWebGLDevice(gl: WebGLRenderingContext | WebGL2RenderingContext): WebGLDevice | undefined {\n return glToContextMap.get(gl);\n}\n\nlet counter = 0;\n\n/** WebGPU style Device API for a WebGL context */\nexport default class WebGLDevice extends Device implements ContextState {\n // WebGPU style API\n\n /** A set like interface to test features */\n readonly features: Set<Feature>;\n readonly limits: DeviceLimits;\n readonly info: DeviceInfo;\n\n /** Promise that rejects when context is lost */\n readonly lost: Promise<string>;\n\n // Common API\n props: Required<WebGLDeviceProps>;\n userData: {[key: string]: any};\n\n // WebGL specific API\n readonly isWebGL2: boolean;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext;\n /** Is this device attached to an offscreen context */\n readonly offScreen: boolean = false;\n\n readonly webglLimits: WebGLLimits;\n\n defaultFramebuffer?: Framebuffer;\n defaultVertexArray?: VertexArrayObject;\n\n // State used by luma.gl classes\n _state: 'uninitialized' | 'initializing' | 'initialized' = 'uninitialized';\n readonly _canvasSizeInfo = {clientWidth: 0, clientHeight: 0, devicePixelRatio: 1};\n readonly _extensions: Record<string, any> = {};\n _polyfilled: boolean = false;\n\n /**\n *\n */\n static fromContext(gl: WebGLRenderingContext): WebGLDevice {\n // @ts-expect-error\n return gl.device as WebGLDevice;\n }\n\n /**\n * Get a device instance from a GL context\n * Creates and instruments the device if not already created\n * @param gl\n * @returns\n */\n static attach(\n gl: Device | WebGLRenderingContext | WebGL2RenderingContext,\n props?: WebGLDeviceProps\n ): WebGLDevice {\n if (gl instanceof WebGLDevice) {\n return gl;\n }\n if (!isWebGL(gl)) {\n throw new Error('Invalid WebGLRenderingContext');\n }\n return new WebGLDevice({...props, gl: gl as WebGLRenderingContext});\n }\n\n\n constructor(props: WebGLDeviceProps) {\n super();\n\n this.props = {...DEFAULT_DEVICE_PROPS, ...props};\n\n // If attaching to an already attached context, return the attached device\n // @ts-expect-error device is attached to context\n const device: WebGLDevice | undefined = this.props.gl?.device;\n if (device) {\n if (device._state !== 'initialized') {\n log.error('recursive context');\n throw new Error('recursive context');\n }\n return device;\n }\n\n this.offScreen =\n typeof OffscreenCanvas !== 'undefined' &&\n props.canvas instanceof OffscreenCanvas;\n\n // Create an instrument context\n this.gl = (this.props.gl || this._createContext(props)) as WebGLRenderingContext;\n this.gl2 = this.gl as WebGL2RenderingContext;\n this.isWebGL2 = isWebGL2(this.gl);\n this._state = 'initializing';\n // Avoid multiple instrumentations\n // @ts-expect-error\n if (this.gl.device) {\n log.error('device already created');\n throw new Error('device already created'); // ASSERT this device;\n }\n // @ts-expect-error\n this.gl.device = this;\n // @ts-ignore\n this.gl._version = typeof WebGL2RenderingContext !== 'undefined' && this.gl instanceof WebGL2RenderingContext ? 2 : 1;\n // TODO - move to weak map indexing\n glToContextMap.set(this.gl, this);\n\n // Luma Device fields\n this.info = getDeviceInfo(this.gl);\n // Log some debug info about the newly created context\n // @ts-expect-error device is attached to context\n const debug = this.gl.debug ? ' debug' : '';\n const webGL = isWebGL2(this.gl) ? 'WebGL2' : 'WebGL1';\n log.groupCollapsed(LOG_LEVEL, `${webGL}${debug} context: ${this.info.vendor}, ${this.info.renderer}`)();\n\n polyfillContext(this.gl);\n log.probe(LOG_LEVEL, 'polyfilled context')();\n\n // Install context state tracking\n trackContextState(this.gl, {\n copyState: false,\n log: (...args) => log.log(1, ...args)()\n });\n log.probe(LOG_LEVEL, 'instrumented context')();\n\n // WebGPU Device fields\n this.features = getDeviceFeatures(this.gl);\n log.probe(LOG_LEVEL, `queried device features ${counter}`)();\n this.limits = getDeviceLimits(this.gl);\n log.probe(LOG_LEVEL, 'queried device limits')();\n\n // Add seer integration - TODO - currently removed\n\n // WEBGL specific fields\n this.webglLimits = getWebGLLimits(this.gl);\n log.probe(LOG_LEVEL, 'queried webgl limits')();\n\n // Add debug instrumentation to the context\n // if (isBrowser() && props.debug) {\n // // @ts-ignore\n // const {makeDebugContext} = global;\n // if (!makeDebugContext) {\n // log.warn('WebGL debug mode not activated. import \"@luma.gl/debug\" to enable.')();\n // } else {\n // // @ts-ignore\n // this.gl = global.makeDebugContext(this.gl, props);\n // this.gl2 = this.gl as WebGL2RenderingContext;\n // // Debug forces log level to at least 1\n // log.level = Math.max(log.level, 1);\n // }\n // }\n\n log.groupEnd(LOG_LEVEL)();\n this._state = 'initialized';\n }\n\n /**\n * Destroys the context\n * @note Has no effect for browser contexts, there is no browser API for destroying contexts\n */\n destroy() {\n let ext = this.gl.getExtension('STACKGL_destroy_context');\n if (ext) {\n ext.destroy();\n }\n // ext = this.gl.getExtension('WEBGL_lose_context');\n // if (ext) {\n // // TODO - disconnect context lost callbacks?\n // ext.loseContext();\n // }\n }\n\n // WEBGL SPECIFIC METHODS\n\n /**\n * Resize the canvas' drawing buffer.\n *\n * Can match the canvas CSS size, and optionally also consider devicePixelRatio\n * Can be called every frame\n *\n * Regardless of size, the drawing buffer will always be scaled to the viewport, but\n * for best visual results, usually set to either:\n * canvas CSS width x canvas CSS height\n * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio\n * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n */\n resize(options?: {width?: number; height?: number; useDevicePixels?: boolean | number}): void {\n // Resize browser context .\n if (this.gl.canvas) {\n const devicePixelRatio = getDevicePixelRatio(options?.useDevicePixels);\n setDevicePixelRatio(this.gl, devicePixelRatio, options);\n return;\n }\n\n // Resize headless gl context\n const ext = this.gl.getExtension('STACKGL_resize_drawingbuffer');\n if (ext && options && `width` in options && `height` in options) {\n ext.resize(options.width, options.height);\n }\n }\n\n _createBuffer(props: BufferProps): WEBGLBuffer {\n return new WEBGLBuffer(this.gl, props);\n }\n\n createTexture(props: Texture2DProps): Texture2D {\n return new Texture2D(this, props);\n }\n\n createShader(props: ShaderProps): WEBGLShader {\n return new WEBGLShader(this, props);\n }\n\n /**\n * Offscreen Canvas Support: Commit the frame\n * https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit\n * Chrome's offscreen canvas does not require gl.commit\n */\n commit(): void {\n // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext\n if (this.offScreen && this.gl.commit) {\n // @ts-expect-error gl.commit is not officially part of WebGLRenderingContext\n this.gl.commit();\n }\n }\n\n // PRIVATE METHODS\n\n /**\n * Creates a context giving access to the WebGL API\n */\n _createContext(options?: WebGLDeviceProps): WebGLRenderingContext {\n const {width, height, canvas} = this.props;\n // Get or create a canvas\n const targetCanvas = getCanvas({canvas, width, height});\n // Create a WebGL context in the canvas\n return createBrowserContext(targetCanvas, options);\n }\n}\n\n/*\n// prettier-ignore\nimport {\n Device, DeviceInfo, DeviceLimits,\n Buffer, BufferProps\n} from '@luma.gl/api';\n\nimport {getWebGLDeviceInfo} from '../converters/webgl-device-info';\nimport {getWebGLLimits} from '../converters/webgl-limits';\nimport {getWebGLFeatures} from '../converters/webgl-features';\n\nexport default class WEBGLDevice implements Device {\n readonly handle: WebGLRenderingContext;\n readonly gl: WebGLRenderingContext;\n readonly gl2: WebGL2RenderingContext | null;\n readonly canvas: HTMLCanvasElement;\n\n static isSupported(options: {canvas?: HTMLCanvasElement}): boolean {\n const {canvas} = options;\n let gl;\n try {\n gl = canvas && canvas.getContext(\"webgl\");\n gl = gl && canvas && canvas.getContext(\"experimental-webgl\");\n } catch (x) {\n gl = null;\n }\n return Boolean(gl);\n }\n\n constructor(props = {}) {\n const {canvas, swapChainFormat = \"bgra8unorm\"} = props;\n\n const gl = createGLContext(props);\n this.handle =\n this.gl = gl;\n this.gl2 = gl instanceof WebGL2RenderingContext ? gl : null;\n this.canvas = canvas;\n }\n\n resize(width, height) {\n resizeGLContext(this.gl);\n }\n\n getInfo(): DeviceInfo {\n return getWebGLDeviceInfo(this.gl);\n }\n\n getLimits(): DeviceLimits {\n return getWebGLLimits(this.gl, this.gl2);\n }\n\n getFeatures(): string[] {\n return getWebGLFeatures(this.gl);\n }\n\n createBuffer(props: WebGPUBufferProps): WEBGLBuffer {\n return new WEBGLBuffer(this.gl2 || this.gl, props);\n }\n\n createTexture(props: WebGPUTextureProps): WEBGLTexture {\n return new WEBGLTexture(this, props);\n }\n\n createSampler(props: WebGPUSamplerProps): WEBGLSampler {\n return new WEBGLSampler(this, props);\n }\n\n createShader(props: WebGPUShaderProps): WEBGLShader {\n return new WEBGLShader(this, props);\n }\n\n createRenderPipeline(props: WebGPURenderPipelineProps): WEBGLPipeline {\n return new WEBGLRenderPipeline(this, props);\n }\n\n createComputePipeline(props: WebGPUComputePipelineProps): WebGPUPipeline {\n return new WebGPUComputePipeline(this, props);\n }\n\n\n // PRIVATE\n\n _startFrame() {}\n\n _endFrame() {}\n}\n*/\n"],"file":"webgl-device.js"}
@@ -50,15 +50,21 @@ function hasFeatures(gl, features) {
50
50
 
51
51
  var normalizedFeatures = Array.isArray(features) ? features : [features];
52
52
  var deviceFeatures = normalizedFeatures.map(function (feature) {
53
- return getDeviceFeature(feature);
53
+ return classicToDeviceFeature(feature);
54
54
  });
55
55
  return deviceFeatures.every(function (feature) {
56
- return webglDevice.webglFeatures.has(feature);
56
+ return webglDevice.features.has(feature);
57
57
  });
58
58
  }
59
59
 
60
- function getDeviceFeature(feature) {
61
- return feature.toLowerCase().replace('webgl-', '').replace('-', '_');
60
+ function classicToDeviceFeature(feature) {
61
+ var deviceFeature = feature.toLowerCase().replace(/\_/g, '-');
62
+
63
+ if (deviceFeature.startsWith('webgl2') || deviceFeature.startsWith('glsl-')) {
64
+ return deviceFeature;
65
+ }
66
+
67
+ return "webgl-".concat(deviceFeature);
62
68
  }
63
69
 
64
70
  function hasFeature(gl, feature) {
@@ -70,8 +76,8 @@ function getFeatures(gl) {
70
76
 
71
77
  var featureMap = {};
72
78
 
73
- for (var feature in _features.FEATURES) {
74
- featureMap[feature] = webglDevice.webglFeatures.has(feature);
79
+ for (var feature in _features.DEPRECATED_FEATURES) {
80
+ featureMap[feature] = webglDevice.features.has(classicToDeviceFeature(feature));
75
81
  }
76
82
 
77
83
  return featureMap;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/_deprecated/context-api.ts"],"names":["createGLContext","options","webglDevice","WebGLDevice","gl","instrumentGLContext","attach","resizeGLContext","resize","hasFeatures","features","normalizedFeatures","Array","isArray","deviceFeatures","map","feature","getDeviceFeature","every","webglFeatures","has","toLowerCase","replace","hasFeature","getFeatures","featureMap","FEATURES","getContextDebugInfo","info","vendorMasked","vendor","rendererMasked","renderer","getGLContextInfo","GL","UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL","VENDOR","RENDERER","VERSION","version","getContextInfo","getContextLimits","limits","webglLimits"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n// LEGACY luma.gl v8 API for WebGLRendering context\n// DEPRECATED API - may be removed in luma.gl v9 or v10.\n\n/* eslint-disable quotes */\nimport GL from '@luma.gl/constants';\nimport {WebGLDevice, WebGLDeviceProps} from '@luma.gl/webgl';\nimport {FEATURES} from './features';\n\nexport type GLContextOptions = WebGLDeviceProps & {\n throwOnError?: boolean; // If set to false, return `null` if context creation fails.\n};\n\n/** @deprecated Use `new WebGLDevice()` or `luma.createDevice()` */\nexport function createGLContext(options?: GLContextOptions): WebGLRenderingContext | null {\n const webglDevice = new WebGLDevice(options);\n // Note: OK to return the context, it holds on to the device\n return webglDevice.gl;\n}\n\n/** @deprecated Use `WebGLDevice.attach()` */\nexport function instrumentGLContext(\n gl: WebGLRenderingContext | WebGL2RenderingContext,\n options?: GLContextOptions\n): WebGLRenderingContext {\n const webglDevice = WebGLDevice.attach(gl, options);\n return webglDevice.gl;\n}\n\n/**\n * Resize the canvas' drawing buffer.\n *\n * Can match the canvas CSS size, and optionally also consider devicePixelRatio\n * Can be called every frame\n *\n * Regardless of size, the drawing buffer will always be scaled to the viewport, but\n * for best visual results, usually set to either:\n * canvas CSS width x canvas CSS height\n * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio\n * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n *\n * resizeGLContext(gl, {width, height, useDevicePixels})\n * @deprecated Use WebGLDevice.resize()\n */\nexport function resizeGLContext(\n gl: WebGLRenderingContext,\n options?: {\n width?: number;\n height?: number;\n useDevicePixels?: boolean | number;\n }\n) {\n const webglDevice = WebGLDevice.attach(gl);\n webglDevice.resize(options);\n}\n\n/** \n * Check one or more features\n * @deprecated Use `WebGLDevice.features.has()`\n*/\nexport function hasFeatures(gl: WebGLRenderingContext, features: string | string[]): boolean {\n const webglDevice = WebGLDevice.attach(gl);\n const normalizedFeatures = Array.isArray(features) ? features : [features];\n const deviceFeatures = normalizedFeatures.map(feature => getDeviceFeature(feature));\n return deviceFeatures.every((feature) => webglDevice.webglFeatures.has(feature));\n}\n\nfunction getDeviceFeature(feature) {\n return feature.toLowerCase().replace('webgl-', '').replace('-', '_');\n}\n\n/**\n * Check one feature\n * @deprecated Use `WebGLDevice.features`\n */\nexport function hasFeature(gl: WebGLRenderingContext, feature: string): boolean {\n return hasFeatures(gl, feature);\n}\n\n/**\n * Return a map of supported features\n * @deprecated Use `WebGLDevice.features`\n */\nexport function getFeatures(gl: WebGLRenderingContext): Record<string, boolean> {\n const webglDevice = WebGLDevice.attach(gl);\n const featureMap: Record<string, boolean> = {};\n for (const feature in FEATURES) {\n featureMap[feature] = webglDevice.webglFeatures.has(feature);\n }\n return featureMap;\n}\n\n/**\n * Provides strings identifying the GPU vendor and driver.\n * https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n *\n * @deprecated Use `WebGLDevice.info`\n */\nexport function getContextDebugInfo(gl: WebGLRenderingContext): {\n vendor: string;\n renderer: string;\n vendorMasked: string;\n rendererMasked: string;\n version: string;\n} {\n const webglDevice = WebGLDevice.attach(gl);\n const info = webglDevice.info;\n return {\n ...webglDevice.info,\n vendorMasked: webglDevice.info.vendor,\n rendererMasked: webglDevice.info.renderer\n };\n}\n\n/** @deprecated Use `WebGLDevice.info` */\nexport function getGLContextInfo(gl) {\n const info = getContextDebugInfo(gl);\n return {\n [GL.UNMASKED_VENDOR_WEBGL]: info.vendor,\n [GL.UNMASKED_RENDERER_WEBGL]: info.renderer,\n [GL.VENDOR]: info.vendorMasked,\n [GL.RENDERER]: info.rendererMasked,\n [GL.VERSION]: info.version,\n };\n}\n\n/** @deprecated Use `WebGLDevice.info` and `WebGLDevice.limits` */\nexport function getContextInfo(gl) {\n return {\n ...getContextDebugInfo(gl),\n ...getContextLimits(gl),\n info: getGLContextInfo(gl),\n };\n}\n\n/** @deprecated Use `WebGLDevice.limits` */\nexport function getContextLimits(gl) {\n const webglDevice = WebGLDevice.attach(gl);\n return {limits: webglDevice.webglLimits};\n}\n"],"file":"context-api.js"}
1
+ {"version":3,"sources":["../../../src/_deprecated/context-api.ts"],"names":["createGLContext","options","webglDevice","WebGLDevice","gl","instrumentGLContext","attach","resizeGLContext","resize","hasFeatures","features","normalizedFeatures","Array","isArray","deviceFeatures","map","feature","classicToDeviceFeature","every","has","deviceFeature","toLowerCase","replace","startsWith","hasFeature","getFeatures","featureMap","DEPRECATED_FEATURES","getContextDebugInfo","info","vendorMasked","vendor","rendererMasked","renderer","getGLContextInfo","GL","UNMASKED_VENDOR_WEBGL","UNMASKED_RENDERER_WEBGL","VENDOR","RENDERER","VERSION","version","getContextInfo","getContextLimits","limits","webglLimits"],"mappings":"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","sourcesContent":["// luma.gl, MIT license\n// LEGACY luma.gl v8 API for WebGLRendering context\n// DEPRECATED API - may be removed in luma.gl v9 or v10.\n\n/* eslint-disable quotes */\nimport GL from '@luma.gl/constants';\nimport {WebGLDevice, WebGLDeviceProps} from '@luma.gl/webgl';\nimport {DEPRECATED_FEATURES} from './features';\n\nexport type GLContextOptions = WebGLDeviceProps & {\n throwOnError?: boolean; // If set to false, return `null` if context creation fails.\n};\n\n/** @deprecated Use `new WebGLDevice()` or `luma.createDevice()` */\nexport function createGLContext(options?: GLContextOptions): WebGLRenderingContext | null {\n const webglDevice = new WebGLDevice(options);\n // Note: OK to return the context, it holds on to the device\n return webglDevice.gl;\n}\n\n/** @deprecated Use `WebGLDevice.attach()` */\nexport function instrumentGLContext(\n gl: WebGLRenderingContext | WebGL2RenderingContext,\n options?: GLContextOptions\n): WebGLRenderingContext {\n const webglDevice = WebGLDevice.attach(gl, options);\n return webglDevice.gl;\n}\n\n/**\n * Resize the canvas' drawing buffer.\n *\n * Can match the canvas CSS size, and optionally also consider devicePixelRatio\n * Can be called every frame\n *\n * Regardless of size, the drawing buffer will always be scaled to the viewport, but\n * for best visual results, usually set to either:\n * canvas CSS width x canvas CSS height\n * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio\n * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n *\n * resizeGLContext(gl, {width, height, useDevicePixels})\n * @deprecated Use WebGLDevice.resize()\n */\nexport function resizeGLContext(\n gl: WebGLRenderingContext,\n options?: {\n width?: number;\n height?: number;\n useDevicePixels?: boolean | number;\n }\n) {\n const webglDevice = WebGLDevice.attach(gl);\n webglDevice.resize(options);\n}\n\n/** \n * Check one or more features\n * @deprecated Use `WebGLDevice.features.has()`\n*/\nexport function hasFeatures(gl: WebGLRenderingContext, features: string | string[]): boolean {\n const webglDevice = WebGLDevice.attach(gl);\n const normalizedFeatures = Array.isArray(features) ? features : [features];\n const deviceFeatures = normalizedFeatures.map(feature => classicToDeviceFeature(feature));\n // @ts-expect-error Feature is a string enum\n return deviceFeatures.every((feature) => webglDevice.features.has(feature));\n}\n\nfunction classicToDeviceFeature(feature: string): string {\n const deviceFeature = feature.toLowerCase().replace(/\\_/g, '-');\n if (deviceFeature.startsWith('webgl2') || deviceFeature.startsWith('glsl-')) {\n return deviceFeature;\n }\n return `webgl-${deviceFeature}`;\n}\n\n/**\n * Check one feature\n * @deprecated Use `WebGLDevice.features`\n */\nexport function hasFeature(gl: WebGLRenderingContext, feature: string): boolean {\n return hasFeatures(gl, feature);\n}\n\n/**\n * Return a map of supported features\n * @deprecated Use `WebGLDevice.features`\n */\nexport function getFeatures(gl: WebGLRenderingContext): Record<string, boolean> {\n const webglDevice = WebGLDevice.attach(gl);\n const featureMap: Record<string, boolean> = {};\n for (const feature in DEPRECATED_FEATURES) {\n // @ts-expect-error Feature is a string enum\n featureMap[feature] = webglDevice.features.has(classicToDeviceFeature(feature));\n }\n return featureMap;\n}\n\n/**\n * Provides strings identifying the GPU vendor and driver.\n * https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/\n *\n * @deprecated Use `WebGLDevice.info`\n */\nexport function getContextDebugInfo(gl: WebGLRenderingContext): {\n vendor: string;\n renderer: string;\n vendorMasked: string;\n rendererMasked: string;\n version: string;\n} {\n const webglDevice = WebGLDevice.attach(gl);\n const info = webglDevice.info;\n return {\n ...webglDevice.info,\n vendorMasked: webglDevice.info.vendor,\n rendererMasked: webglDevice.info.renderer\n };\n}\n\n/** @deprecated Use `WebGLDevice.info` */\nexport function getGLContextInfo(gl) {\n const info = getContextDebugInfo(gl);\n return {\n [GL.UNMASKED_VENDOR_WEBGL]: info.vendor,\n [GL.UNMASKED_RENDERER_WEBGL]: info.renderer,\n [GL.VENDOR]: info.vendorMasked,\n [GL.RENDERER]: info.rendererMasked,\n [GL.VERSION]: info.version,\n };\n}\n\n/** @deprecated Use `WebGLDevice.info` and `WebGLDevice.limits` */\nexport function getContextInfo(gl) {\n return {\n ...getContextDebugInfo(gl),\n ...getContextLimits(gl),\n info: getGLContextInfo(gl),\n };\n}\n\n/** @deprecated Use `WebGLDevice.limits` */\nexport function getContextLimits(gl) {\n const webglDevice = WebGLDevice.attach(gl);\n return {limits: webglDevice.webglLimits};\n}\n"],"file":"context-api.js"}
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.getWebGLFeatures = getWebGLFeatures;
9
- exports.FEATURES = void 0;
9
+ exports.DEPRECATED_FEATURES = void 0;
10
10
 
11
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
12
 
@@ -20,7 +20,7 @@ var _api = require("@luma.gl/api");
20
20
 
21
21
  var _WEBGL_FEATURES;
22
22
 
23
- var FEATURES = {
23
+ var DEPRECATED_FEATURES = {
24
24
  WEBGL2: 'WEBGL2',
25
25
  VERTEX_ARRAY_OBJECT: 'VERTEX_ARRAY_OBJECT',
26
26
  TIMER_QUERY: 'TIMER_QUERY',
@@ -44,7 +44,7 @@ var FEATURES = {
44
44
  GLSL_DERIVATIVES: 'GLSL_DERIVATIVES',
45
45
  GLSL_TEXTURE_LOD: 'GLSL_TEXTURE_LOD'
46
46
  };
47
- exports.FEATURES = FEATURES;
47
+ exports.DEPRECATED_FEATURES = DEPRECATED_FEATURES;
48
48
 
49
49
  function getWebGLFeatures(gl) {
50
50
  gl.getExtension('EXT_color_buffer_float');
@@ -71,7 +71,7 @@ function isFeatureSupported(gl, cap) {
71
71
 
72
72
  var featureDefinition = (0, _webgl.isWebGL2)(gl) ? webgl2Feature : webgl1Feature;
73
73
 
74
- if (cap === FEATURES.COLOR_ATTACHMENT_RGBA32F && !(0, _webgl.isWebGL2)(gl)) {
74
+ if (cap === DEPRECATED_FEATURES.COLOR_ATTACHMENT_RGBA32F && !(0, _webgl.isWebGL2)(gl)) {
75
75
  return checkFloat32ColorAttachment(gl);
76
76
  }
77
77
 
@@ -114,5 +114,5 @@ function checkFloat32ColorAttachment(gl) {
114
114
  }
115
115
  }
116
116
 
117
- var WEBGL_FEATURES = (_WEBGL_FEATURES = {}, (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.WEBGL2, [false, true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.VERTEX_ARRAY_OBJECT, ['OES_vertex_array_object', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.TIMER_QUERY, ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2']), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.INSTANCED_RENDERING, ['ANGLE_instanced_arrays', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.MULTIPLE_RENDER_TARGETS, ['WEBGL_draw_buffers', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.ELEMENT_INDEX_UINT32, ['OES_element_index_uint', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.BLEND_EQUATION_MINMAX, ['EXT_blend_minmax', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.FLOAT_BLEND, ['EXT_float_blend', 'EXT_float_blend']), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.COLOR_ENCODING_SRGB, ['EXT_sRGB', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.TEXTURE_DEPTH, ['WEBGL_depth_texture', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.TEXTURE_FLOAT, ['OES_texture_float', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.TEXTURE_HALF_FLOAT, ['OES_texture_half_float', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.TEXTURE_FILTER_LINEAR_FLOAT, ['OES_texture_float_linear', 'OES_texture_float_linear']), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.TEXTURE_FILTER_LINEAR_HALF_FLOAT, ['OES_texture_half_float_linear', 'OES_texture_half_float_linear']), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.TEXTURE_FILTER_ANISOTROPIC, ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic']), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.COLOR_ATTACHMENT_RGBA32F, [false, 'EXT_color_buffer_float']), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.COLOR_ATTACHMENT_FLOAT, [false, 'EXT_color_buffer_float']), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.COLOR_ATTACHMENT_HALF_FLOAT, ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float']), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.GLSL_FRAG_DATA, ['WEBGL_draw_buffers', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.GLSL_FRAG_DEPTH, ['EXT_frag_depth', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.GLSL_DERIVATIVES, ['OES_standard_derivatives', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, FEATURES.GLSL_TEXTURE_LOD, ['EXT_shader_texture_lod', true]), _WEBGL_FEATURES);
117
+ var WEBGL_FEATURES = (_WEBGL_FEATURES = {}, (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.WEBGL2, [false, true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.VERTEX_ARRAY_OBJECT, ['OES_vertex_array_object', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.TIMER_QUERY, ['EXT_disjoint_timer_query', 'EXT_disjoint_timer_query_webgl2']), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.INSTANCED_RENDERING, ['ANGLE_instanced_arrays', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.MULTIPLE_RENDER_TARGETS, ['WEBGL_draw_buffers', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.ELEMENT_INDEX_UINT32, ['OES_element_index_uint', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.BLEND_EQUATION_MINMAX, ['EXT_blend_minmax', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.FLOAT_BLEND, ['EXT_float_blend', 'EXT_float_blend']), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.COLOR_ENCODING_SRGB, ['EXT_sRGB', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.TEXTURE_DEPTH, ['WEBGL_depth_texture', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.TEXTURE_FLOAT, ['OES_texture_float', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.TEXTURE_HALF_FLOAT, ['OES_texture_half_float', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.TEXTURE_FILTER_LINEAR_FLOAT, ['OES_texture_float_linear', 'OES_texture_float_linear']), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.TEXTURE_FILTER_LINEAR_HALF_FLOAT, ['OES_texture_half_float_linear', 'OES_texture_half_float_linear']), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.TEXTURE_FILTER_ANISOTROPIC, ['EXT_texture_filter_anisotropic', 'EXT_texture_filter_anisotropic']), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.COLOR_ATTACHMENT_RGBA32F, [false, 'EXT_color_buffer_float']), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.COLOR_ATTACHMENT_FLOAT, [false, 'EXT_color_buffer_float']), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.COLOR_ATTACHMENT_HALF_FLOAT, ['EXT_color_buffer_half_float', 'EXT_color_buffer_half_float']), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.GLSL_FRAG_DATA, ['WEBGL_draw_buffers', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.GLSL_FRAG_DEPTH, ['EXT_frag_depth', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.GLSL_DERIVATIVES, ['OES_standard_derivatives', true]), (0, _defineProperty2.default)(_WEBGL_FEATURES, DEPRECATED_FEATURES.GLSL_TEXTURE_LOD, ['EXT_shader_texture_lod', true]), _WEBGL_FEATURES);
118
118
  //# sourceMappingURL=features.js.map