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

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.
@@ -0,0 +1,85 @@
1
+ import { WebGLDeviceProps } from '@luma.gl/webgl';
2
+ export declare type GLContextOptions = WebGLDeviceProps & {
3
+ throwOnError?: boolean;
4
+ };
5
+ /** @deprecated Use `new WebGLDevice()` or `luma.createDevice()` */
6
+ export declare function createGLContext(options?: GLContextOptions): WebGLRenderingContext | null;
7
+ /** @deprecated Use `WebGLDevice.attach()` */
8
+ export declare function instrumentGLContext(gl: WebGLRenderingContext | WebGL2RenderingContext, options?: GLContextOptions): WebGLRenderingContext;
9
+ /**
10
+ * Resize the canvas' drawing buffer.
11
+ *
12
+ * Can match the canvas CSS size, and optionally also consider devicePixelRatio
13
+ * Can be called every frame
14
+ *
15
+ * Regardless of size, the drawing buffer will always be scaled to the viewport, but
16
+ * for best visual results, usually set to either:
17
+ * canvas CSS width x canvas CSS height
18
+ * canvas CSS width * devicePixelRatio x canvas CSS height * devicePixelRatio
19
+ * See http://webgl2fundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
20
+ *
21
+ * resizeGLContext(gl, {width, height, useDevicePixels})
22
+ * @deprecated Use WebGLDevice.resize()
23
+ */
24
+ export declare function resizeGLContext(gl: WebGLRenderingContext, options?: {
25
+ width?: number;
26
+ height?: number;
27
+ useDevicePixels?: boolean | number;
28
+ }): void;
29
+ /**
30
+ * Check one or more features
31
+ * @deprecated Use `WebGLDevice.features.has()`
32
+ */
33
+ export declare function hasFeatures(gl: WebGLRenderingContext, features: string | string[]): boolean;
34
+ /**
35
+ * Check one feature
36
+ * @deprecated Use `WebGLDevice.features`
37
+ */
38
+ export declare function hasFeature(gl: WebGLRenderingContext, feature: string): boolean;
39
+ /**
40
+ * Return a map of supported features
41
+ * @deprecated Use `WebGLDevice.features`
42
+ */
43
+ export declare function getFeatures(gl: WebGLRenderingContext): Record<string, boolean>;
44
+ /**
45
+ * Provides strings identifying the GPU vendor and driver.
46
+ * https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/
47
+ *
48
+ * @deprecated Use `WebGLDevice.info`
49
+ */
50
+ export declare function getContextDebugInfo(gl: WebGLRenderingContext): {
51
+ vendor: string;
52
+ renderer: string;
53
+ vendorMasked: string;
54
+ rendererMasked: string;
55
+ version: string;
56
+ };
57
+ /** @deprecated Use `WebGLDevice.info` */
58
+ export declare function getGLContextInfo(gl: any): {
59
+ 37445: string;
60
+ 37446: string;
61
+ 7936: string;
62
+ 7937: string;
63
+ 7938: string;
64
+ };
65
+ /** @deprecated Use `WebGLDevice.info` and `WebGLDevice.limits` */
66
+ export declare function getContextInfo(gl: any): {
67
+ info: {
68
+ 37445: string;
69
+ 37446: string;
70
+ 7936: string;
71
+ 7937: string;
72
+ 7938: string;
73
+ };
74
+ limits: import("../adapter/device-helpers/device-limits").WebGLLimits;
75
+ vendor: string;
76
+ renderer: string;
77
+ vendorMasked: string;
78
+ rendererMasked: string;
79
+ version: string;
80
+ };
81
+ /** @deprecated Use `WebGLDevice.limits` */
82
+ export declare function getContextLimits(gl: any): {
83
+ limits: import("../adapter/device-helpers/device-limits").WebGLLimits;
84
+ };
85
+ //# sourceMappingURL=context-api.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,70 @@
1
+ import GL from '@luma.gl/constants';
2
+ import { WebGLDevice } from '@luma.gl/webgl';
3
+ import { FEATURES } from './features';
4
+ export function createGLContext(options) {
5
+ const webglDevice = new WebGLDevice(options);
6
+ return webglDevice.gl;
7
+ }
8
+ export function instrumentGLContext(gl, options) {
9
+ const webglDevice = WebGLDevice.attach(gl, options);
10
+ return webglDevice.gl;
11
+ }
12
+ export function resizeGLContext(gl, options) {
13
+ const webglDevice = WebGLDevice.attach(gl);
14
+ webglDevice.resize(options);
15
+ }
16
+ export function hasFeatures(gl, features) {
17
+ const webglDevice = WebGLDevice.attach(gl);
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));
21
+ }
22
+
23
+ function getDeviceFeature(feature) {
24
+ return feature.toLowerCase().replace('webgl-', '').replace('-', '_');
25
+ }
26
+
27
+ export function hasFeature(gl, feature) {
28
+ return hasFeatures(gl, feature);
29
+ }
30
+ export function getFeatures(gl) {
31
+ const webglDevice = WebGLDevice.attach(gl);
32
+ const featureMap = {};
33
+
34
+ for (const feature in FEATURES) {
35
+ featureMap[feature] = webglDevice.webglFeatures.has(feature);
36
+ }
37
+
38
+ return featureMap;
39
+ }
40
+ export function getContextDebugInfo(gl) {
41
+ const webglDevice = WebGLDevice.attach(gl);
42
+ const info = webglDevice.info;
43
+ return { ...webglDevice.info,
44
+ vendorMasked: webglDevice.info.vendor,
45
+ rendererMasked: webglDevice.info.renderer
46
+ };
47
+ }
48
+ export function getGLContextInfo(gl) {
49
+ const info = getContextDebugInfo(gl);
50
+ return {
51
+ [GL.UNMASKED_VENDOR_WEBGL]: info.vendor,
52
+ [GL.UNMASKED_RENDERER_WEBGL]: info.renderer,
53
+ [GL.VENDOR]: info.vendorMasked,
54
+ [GL.RENDERER]: info.rendererMasked,
55
+ [GL.VERSION]: info.version
56
+ };
57
+ }
58
+ export function getContextInfo(gl) {
59
+ return { ...getContextDebugInfo(gl),
60
+ ...getContextLimits(gl),
61
+ info: getGLContextInfo(gl)
62
+ };
63
+ }
64
+ export function getContextLimits(gl) {
65
+ const webglDevice = WebGLDevice.attach(gl);
66
+ return {
67
+ limits: webglDevice.webglLimits
68
+ };
69
+ }
70
+ //# sourceMappingURL=context-api.js.map
@@ -0,0 +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"}
@@ -0,0 +1,27 @@
1
+ export declare const FEATURES: {
2
+ WEBGL2: string;
3
+ VERTEX_ARRAY_OBJECT: string;
4
+ TIMER_QUERY: string;
5
+ INSTANCED_RENDERING: string;
6
+ MULTIPLE_RENDER_TARGETS: string;
7
+ ELEMENT_INDEX_UINT32: string;
8
+ BLEND_EQUATION_MINMAX: string;
9
+ FLOAT_BLEND: string;
10
+ COLOR_ENCODING_SRGB: string;
11
+ TEXTURE_DEPTH: string;
12
+ TEXTURE_FLOAT: string;
13
+ TEXTURE_HALF_FLOAT: string;
14
+ TEXTURE_FILTER_LINEAR_FLOAT: string;
15
+ TEXTURE_FILTER_LINEAR_HALF_FLOAT: string;
16
+ TEXTURE_FILTER_ANISOTROPIC: string;
17
+ COLOR_ATTACHMENT_RGBA32F: string;
18
+ COLOR_ATTACHMENT_FLOAT: string;
19
+ COLOR_ATTACHMENT_HALF_FLOAT: string;
20
+ GLSL_FRAG_DATA: string;
21
+ GLSL_FRAG_DEPTH: string;
22
+ GLSL_DERIVATIVES: string;
23
+ GLSL_TEXTURE_LOD: string;
24
+ };
25
+ /** Extract all WebGL features */
26
+ export declare function getWebGLFeatures(gl: WebGLRenderingContext): Set<string>;
27
+ //# sourceMappingURL=features.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,111 @@
1
+ import GL from '@luma.gl/constants';
2
+ import { isWebGL2 } from '@luma.gl/webgl';
3
+ import { assert } from '@luma.gl/api';
4
+ export const FEATURES = {
5
+ WEBGL2: 'WEBGL2',
6
+ VERTEX_ARRAY_OBJECT: 'VERTEX_ARRAY_OBJECT',
7
+ TIMER_QUERY: 'TIMER_QUERY',
8
+ INSTANCED_RENDERING: 'INSTANCED_RENDERING',
9
+ MULTIPLE_RENDER_TARGETS: 'MULTIPLE_RENDER_TARGETS',
10
+ ELEMENT_INDEX_UINT32: 'ELEMENT_INDEX_UINT32',
11
+ BLEND_EQUATION_MINMAX: 'BLEND_EQUATION_MINMAX',
12
+ FLOAT_BLEND: 'FLOAT_BLEND',
13
+ COLOR_ENCODING_SRGB: 'COLOR_ENCODING_SRGB',
14
+ TEXTURE_DEPTH: 'TEXTURE_DEPTH',
15
+ TEXTURE_FLOAT: 'TEXTURE_FLOAT',
16
+ TEXTURE_HALF_FLOAT: 'TEXTURE_HALF_FLOAT',
17
+ TEXTURE_FILTER_LINEAR_FLOAT: 'TEXTURE_FILTER_LINEAR_FLOAT',
18
+ TEXTURE_FILTER_LINEAR_HALF_FLOAT: 'TEXTURE_FILTER_LINEAR_HALF_FLOAT',
19
+ TEXTURE_FILTER_ANISOTROPIC: 'TEXTURE_FILTER_ANISOTROPIC',
20
+ COLOR_ATTACHMENT_RGBA32F: 'COLOR_ATTACHMENT_RGBA32F',
21
+ COLOR_ATTACHMENT_FLOAT: 'COLOR_ATTACHMENT_FLOAT',
22
+ COLOR_ATTACHMENT_HALF_FLOAT: 'COLOR_ATTACHMENT_HALF_FLOAT',
23
+ GLSL_FRAG_DATA: 'GLSL_FRAG_DATA',
24
+ GLSL_FRAG_DEPTH: 'GLSL_FRAG_DEPTH',
25
+ GLSL_DERIVATIVES: 'GLSL_DERIVATIVES',
26
+ GLSL_TEXTURE_LOD: 'GLSL_TEXTURE_LOD'
27
+ };
28
+ export function getWebGLFeatures(gl) {
29
+ gl.getExtension('EXT_color_buffer_float');
30
+ gl.getExtension('WEBGL_color_buffer_float');
31
+ gl.getExtension('EXT_float_blend');
32
+ const features = new Set();
33
+
34
+ for (const feature in WEBGL_FEATURES) {
35
+ if (isFeatureSupported(gl, feature)) {
36
+ features.add(feature);
37
+ }
38
+ }
39
+
40
+ return features;
41
+ }
42
+
43
+ function isFeatureSupported(gl, cap) {
44
+ const feature = WEBGL_FEATURES[cap];
45
+ assert(feature, cap);
46
+ const [webgl1Feature, webgl2Feature] = feature;
47
+ const featureDefinition = isWebGL2(gl) ? webgl2Feature : webgl1Feature;
48
+
49
+ if (cap === FEATURES.COLOR_ATTACHMENT_RGBA32F && !isWebGL2(gl)) {
50
+ return checkFloat32ColorAttachment(gl);
51
+ }
52
+
53
+ if (typeof featureDefinition === 'string') {
54
+ return Boolean(gl.getExtension(featureDefinition));
55
+ }
56
+
57
+ return featureDefinition;
58
+ }
59
+
60
+ function checkFloat32ColorAttachment(gl) {
61
+ let texture;
62
+ let framebuffer;
63
+
64
+ try {
65
+ const texture = gl.createTexture();
66
+ gl.bindTexture(GL.TEXTURE_2D, texture);
67
+ const level = 0;
68
+ const internalFormat = gl.RGBA;
69
+ const width = 1;
70
+ const height = 1;
71
+ const border = 0;
72
+ const srcFormat = gl.RGBA;
73
+ const srcType = gl.UNSIGNED_BYTE;
74
+ const pixel = new Uint8Array([0, 0, 255, 255]);
75
+ gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, width, height, border, srcFormat, srcType, pixel);
76
+ const framebuffer = gl.createFramebuffer();
77
+ gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer);
78
+ gl.framebufferTexture2D(GL.FRAMEBUFFER, GL.COLOR_ATTACHMENT0, GL.TEXTURE_2D, texture, 0);
79
+ const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER) === GL.FRAMEBUFFER_COMPLETE;
80
+ return status;
81
+ } finally {
82
+ gl.deleteTexture(texture);
83
+ gl.deleteFramebuffer(framebuffer);
84
+ }
85
+ }
86
+
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]
110
+ };
111
+ //# sourceMappingURL=features.js.map
@@ -0,0 +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"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createGLContext = createGLContext;
9
+ exports.instrumentGLContext = instrumentGLContext;
10
+ exports.resizeGLContext = resizeGLContext;
11
+ exports.hasFeatures = hasFeatures;
12
+ exports.hasFeature = hasFeature;
13
+ exports.getFeatures = getFeatures;
14
+ exports.getContextDebugInfo = getContextDebugInfo;
15
+ exports.getGLContextInfo = getGLContextInfo;
16
+ exports.getContextInfo = getContextInfo;
17
+ exports.getContextLimits = getContextLimits;
18
+
19
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
20
+
21
+ var _constants = _interopRequireDefault(require("@luma.gl/constants"));
22
+
23
+ var _webgl = require("@luma.gl/webgl");
24
+
25
+ var _features = require("./features");
26
+
27
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
28
+
29
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
30
+
31
+ function createGLContext(options) {
32
+ var webglDevice = new _webgl.WebGLDevice(options);
33
+ return webglDevice.gl;
34
+ }
35
+
36
+ function instrumentGLContext(gl, options) {
37
+ var webglDevice = _webgl.WebGLDevice.attach(gl, options);
38
+
39
+ return webglDevice.gl;
40
+ }
41
+
42
+ function resizeGLContext(gl, options) {
43
+ var webglDevice = _webgl.WebGLDevice.attach(gl);
44
+
45
+ webglDevice.resize(options);
46
+ }
47
+
48
+ function hasFeatures(gl, features) {
49
+ var webglDevice = _webgl.WebGLDevice.attach(gl);
50
+
51
+ var normalizedFeatures = Array.isArray(features) ? features : [features];
52
+ var deviceFeatures = normalizedFeatures.map(function (feature) {
53
+ return getDeviceFeature(feature);
54
+ });
55
+ return deviceFeatures.every(function (feature) {
56
+ return webglDevice.webglFeatures.has(feature);
57
+ });
58
+ }
59
+
60
+ function getDeviceFeature(feature) {
61
+ return feature.toLowerCase().replace('webgl-', '').replace('-', '_');
62
+ }
63
+
64
+ function hasFeature(gl, feature) {
65
+ return hasFeatures(gl, feature);
66
+ }
67
+
68
+ function getFeatures(gl) {
69
+ var webglDevice = _webgl.WebGLDevice.attach(gl);
70
+
71
+ var featureMap = {};
72
+
73
+ for (var feature in _features.FEATURES) {
74
+ featureMap[feature] = webglDevice.webglFeatures.has(feature);
75
+ }
76
+
77
+ return featureMap;
78
+ }
79
+
80
+ function getContextDebugInfo(gl) {
81
+ var webglDevice = _webgl.WebGLDevice.attach(gl);
82
+
83
+ var info = webglDevice.info;
84
+ return _objectSpread(_objectSpread({}, webglDevice.info), {}, {
85
+ vendorMasked: webglDevice.info.vendor,
86
+ rendererMasked: webglDevice.info.renderer
87
+ });
88
+ }
89
+
90
+ function getGLContextInfo(gl) {
91
+ var _ref;
92
+
93
+ var info = getContextDebugInfo(gl);
94
+ return _ref = {}, (0, _defineProperty2.default)(_ref, _constants.default.UNMASKED_VENDOR_WEBGL, info.vendor), (0, _defineProperty2.default)(_ref, _constants.default.UNMASKED_RENDERER_WEBGL, info.renderer), (0, _defineProperty2.default)(_ref, _constants.default.VENDOR, info.vendorMasked), (0, _defineProperty2.default)(_ref, _constants.default.RENDERER, info.rendererMasked), (0, _defineProperty2.default)(_ref, _constants.default.VERSION, info.version), _ref;
95
+ }
96
+
97
+ function getContextInfo(gl) {
98
+ return _objectSpread(_objectSpread(_objectSpread({}, getContextDebugInfo(gl)), getContextLimits(gl)), {}, {
99
+ info: getGLContextInfo(gl)
100
+ });
101
+ }
102
+
103
+ function getContextLimits(gl) {
104
+ var webglDevice = _webgl.WebGLDevice.attach(gl);
105
+
106
+ return {
107
+ limits: webglDevice.webglLimits
108
+ };
109
+ }
110
+ //# sourceMappingURL=context-api.js.map
@@ -0,0 +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"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getWebGLFeatures = getWebGLFeatures;
9
+ exports.FEATURES = void 0;
10
+
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+
13
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
14
+
15
+ var _constants = _interopRequireDefault(require("@luma.gl/constants"));
16
+
17
+ var _webgl = require("@luma.gl/webgl");
18
+
19
+ var _api = require("@luma.gl/api");
20
+
21
+ var _WEBGL_FEATURES;
22
+
23
+ var FEATURES = {
24
+ WEBGL2: 'WEBGL2',
25
+ VERTEX_ARRAY_OBJECT: 'VERTEX_ARRAY_OBJECT',
26
+ TIMER_QUERY: 'TIMER_QUERY',
27
+ INSTANCED_RENDERING: 'INSTANCED_RENDERING',
28
+ MULTIPLE_RENDER_TARGETS: 'MULTIPLE_RENDER_TARGETS',
29
+ ELEMENT_INDEX_UINT32: 'ELEMENT_INDEX_UINT32',
30
+ BLEND_EQUATION_MINMAX: 'BLEND_EQUATION_MINMAX',
31
+ FLOAT_BLEND: 'FLOAT_BLEND',
32
+ COLOR_ENCODING_SRGB: 'COLOR_ENCODING_SRGB',
33
+ TEXTURE_DEPTH: 'TEXTURE_DEPTH',
34
+ TEXTURE_FLOAT: 'TEXTURE_FLOAT',
35
+ TEXTURE_HALF_FLOAT: 'TEXTURE_HALF_FLOAT',
36
+ TEXTURE_FILTER_LINEAR_FLOAT: 'TEXTURE_FILTER_LINEAR_FLOAT',
37
+ TEXTURE_FILTER_LINEAR_HALF_FLOAT: 'TEXTURE_FILTER_LINEAR_HALF_FLOAT',
38
+ TEXTURE_FILTER_ANISOTROPIC: 'TEXTURE_FILTER_ANISOTROPIC',
39
+ COLOR_ATTACHMENT_RGBA32F: 'COLOR_ATTACHMENT_RGBA32F',
40
+ COLOR_ATTACHMENT_FLOAT: 'COLOR_ATTACHMENT_FLOAT',
41
+ COLOR_ATTACHMENT_HALF_FLOAT: 'COLOR_ATTACHMENT_HALF_FLOAT',
42
+ GLSL_FRAG_DATA: 'GLSL_FRAG_DATA',
43
+ GLSL_FRAG_DEPTH: 'GLSL_FRAG_DEPTH',
44
+ GLSL_DERIVATIVES: 'GLSL_DERIVATIVES',
45
+ GLSL_TEXTURE_LOD: 'GLSL_TEXTURE_LOD'
46
+ };
47
+ exports.FEATURES = FEATURES;
48
+
49
+ function getWebGLFeatures(gl) {
50
+ gl.getExtension('EXT_color_buffer_float');
51
+ gl.getExtension('WEBGL_color_buffer_float');
52
+ gl.getExtension('EXT_float_blend');
53
+ var features = new Set();
54
+
55
+ for (var feature in WEBGL_FEATURES) {
56
+ if (isFeatureSupported(gl, feature)) {
57
+ features.add(feature);
58
+ }
59
+ }
60
+
61
+ return features;
62
+ }
63
+
64
+ function isFeatureSupported(gl, cap) {
65
+ var feature = WEBGL_FEATURES[cap];
66
+ (0, _api.assert)(feature, cap);
67
+
68
+ var _feature = (0, _slicedToArray2.default)(feature, 2),
69
+ webgl1Feature = _feature[0],
70
+ webgl2Feature = _feature[1];
71
+
72
+ var featureDefinition = (0, _webgl.isWebGL2)(gl) ? webgl2Feature : webgl1Feature;
73
+
74
+ if (cap === FEATURES.COLOR_ATTACHMENT_RGBA32F && !(0, _webgl.isWebGL2)(gl)) {
75
+ return checkFloat32ColorAttachment(gl);
76
+ }
77
+
78
+ if (typeof featureDefinition === 'string') {
79
+ return Boolean(gl.getExtension(featureDefinition));
80
+ }
81
+
82
+ return featureDefinition;
83
+ }
84
+
85
+ function checkFloat32ColorAttachment(gl) {
86
+ var texture;
87
+ var framebuffer;
88
+
89
+ try {
90
+ var _texture = gl.createTexture();
91
+
92
+ gl.bindTexture(_constants.default.TEXTURE_2D, _texture);
93
+ var level = 0;
94
+ var internalFormat = gl.RGBA;
95
+ var width = 1;
96
+ var height = 1;
97
+ var border = 0;
98
+ var srcFormat = gl.RGBA;
99
+ var srcType = gl.UNSIGNED_BYTE;
100
+ var pixel = new Uint8Array([0, 0, 255, 255]);
101
+ gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, width, height, border, srcFormat, srcType, pixel);
102
+
103
+ var _framebuffer = gl.createFramebuffer();
104
+
105
+ gl.bindFramebuffer(_constants.default.FRAMEBUFFER, _framebuffer);
106
+ gl.framebufferTexture2D(_constants.default.FRAMEBUFFER, _constants.default.COLOR_ATTACHMENT0, _constants.default.TEXTURE_2D, _texture, 0);
107
+
108
+ var status = gl.checkFramebufferStatus(_constants.default.FRAMEBUFFER) === _constants.default.FRAMEBUFFER_COMPLETE;
109
+
110
+ return status;
111
+ } finally {
112
+ gl.deleteTexture(texture);
113
+ gl.deleteFramebuffer(framebuffer);
114
+ }
115
+ }
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);
118
+ //# sourceMappingURL=features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/_deprecated/features.ts"],"names":["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","GL","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":";;;;;;;;;;;;;;AAIA;;AACA;;AACA;;;;AAGO,IAAMA,QAAQ,GAAG;AACtBC,EAAAA,MAAM,EAAE,QADc;AAItBC,EAAAA,mBAAmB,EAAE,qBAJC;AAKtBC,EAAAA,WAAW,EAAE,aALS;AAMtBC,EAAAA,mBAAmB,EAAE,qBANC;AAOtBC,EAAAA,uBAAuB,EAAE,yBAPH;AAUtBC,EAAAA,oBAAoB,EAAE,sBAVA;AAatBC,EAAAA,qBAAqB,EAAE,uBAbD;AActBC,EAAAA,WAAW,EAAE,aAdS;AAiBtBC,EAAAA,mBAAmB,EAAE,qBAjBC;AAoBtBC,EAAAA,aAAa,EAAE,eApBO;AAqBtBC,EAAAA,aAAa,EAAE,eArBO;AAsBtBC,EAAAA,kBAAkB,EAAE,oBAtBE;AAwBtBC,EAAAA,2BAA2B,EAAE,6BAxBP;AAyBtBC,EAAAA,gCAAgC,EAAE,kCAzBZ;AA0BtBC,EAAAA,0BAA0B,EAAE,4BA1BN;AA6BtBC,EAAAA,wBAAwB,EAAE,0BA7BJ;AA8BtBC,EAAAA,sBAAsB,EAAE,wBA9BF;AA+BtBC,EAAAA,2BAA2B,EAAE,6BA/BP;AAkCtBC,EAAAA,cAAc,EAAE,gBAlCM;AAmCtBC,EAAAA,eAAe,EAAE,iBAnCK;AAoCtBC,EAAAA,gBAAgB,EAAE,kBApCI;AAqCtBC,EAAAA,gBAAgB,EAAE;AArCI,CAAjB;;;AAyCA,SAASC,gBAAT,CAA0BC,EAA1B,EAAkE;AAEvEA,EAAAA,EAAE,CAACC,YAAH,CAAgB,wBAAhB;AACAD,EAAAA,EAAE,CAACC,YAAH,CAAgB,0BAAhB;AACAD,EAAAA,EAAE,CAACC,YAAH,CAAgB,iBAAhB;AAEA,MAAMC,QAAQ,GAAG,IAAIC,GAAJ,EAAjB;;AACA,OAAK,IAAMC,OAAX,IAAsBC,cAAtB,EAAsC;AACpC,QAAIC,kBAAkB,CAACN,EAAD,EAAKI,OAAL,CAAtB,EAAqC;AACnCF,MAAAA,QAAQ,CAACK,GAAT,CAAaH,OAAb;AACD;AACF;;AACD,SAAOF,QAAP;AACD;;AAED,SAASI,kBAAT,CAA4BN,EAA5B,EAAuDQ,GAAvD,EAA6E;AAC3E,MAAMJ,OAAO,GAAGC,cAAc,CAACG,GAAD,CAA9B;AACA,mBAAOJ,OAAP,EAAgBI,GAAhB;;AAEA,8CAAuCJ,OAAvC;AAAA,MAAOK,aAAP;AAAA,MAAsBC,aAAtB;;AAGA,MAAMC,iBAAiB,GAAG,qBAASX,EAAT,IAAeU,aAAf,GAA+BD,aAAzD;;AAEA,MAAID,GAAG,KAAKhC,QAAQ,CAACgB,wBAAjB,IAA6C,CAAC,qBAASQ,EAAT,CAAlD,EAAgE;AAC9D,WAAOY,2BAA2B,CAACZ,EAAD,CAAlC;AACD;;AAGD,MAAI,OAAOW,iBAAP,KAA6B,QAAjC,EAA2C;AACzC,WAAOE,OAAO,CAACb,EAAE,CAACC,YAAH,CAAgBU,iBAAhB,CAAD,CAAd;AACD;;AAED,SAAOA,iBAAP;AACD;;AAID,SAASC,2BAAT,CAAqCZ,EAArC,EAAgE;AAC9D,MAAIc,OAAJ;AACA,MAAIC,WAAJ;;AACA,MAAI;AACF,QAAMD,QAAO,GAAGd,EAAE,CAACgB,aAAH,EAAhB;;AACAhB,IAAAA,EAAE,CAACiB,WAAH,CAAeC,mBAAGC,UAAlB,EAA8BL,QAA9B;AAEA,QAAMM,KAAK,GAAG,CAAd;AACA,QAAMC,cAAc,GAAGrB,EAAE,CAACsB,IAA1B;AACA,QAAMC,KAAK,GAAG,CAAd;AACA,QAAMC,MAAM,GAAG,CAAf;AACA,QAAMC,MAAM,GAAG,CAAf;AACA,QAAMC,SAAS,GAAG1B,EAAE,CAACsB,IAArB;AACA,QAAMK,OAAO,GAAG3B,EAAE,CAAC4B,aAAnB;AACA,QAAMC,KAAK,GAAG,IAAIC,UAAJ,CAAe,CAAC,CAAD,EAAI,CAAJ,EAAO,GAAP,EAAY,GAAZ,CAAf,CAAd;AACA9B,IAAAA,EAAE,CAAC+B,UAAH,CAAc/B,EAAE,CAACmB,UAAjB,EAA6BC,KAA7B,EAAoCC,cAApC,EACcE,KADd,EACqBC,MADrB,EAC6BC,MAD7B,EACqCC,SADrC,EACgDC,OADhD,EAEcE,KAFd;;AAIA,QAAMd,YAAW,GAAGf,EAAE,CAACgC,iBAAH,EAApB;;AACAhC,IAAAA,EAAE,CAACiC,eAAH,CAAmBf,mBAAGgB,WAAtB,EAAmCnB,YAAnC;AACAf,IAAAA,EAAE,CAACmC,oBAAH,CAAwBjB,mBAAGgB,WAA3B,EAAwChB,mBAAGkB,iBAA3C,EAA8DlB,mBAAGC,UAAjE,EAA6EL,QAA7E,EAAsF,CAAtF;;AACA,QAAMuB,MAAM,GAAGrC,EAAE,CAACsC,sBAAH,CAA0BpB,mBAAGgB,WAA7B,MAA8ChB,mBAAGqB,oBAAhE;;AACA,WAAOF,MAAP;AACD,GArBD,SAqBU;AACRrC,IAAAA,EAAE,CAACwC,aAAH,CAAiB1B,OAAjB;AACAd,IAAAA,EAAE,CAACyC,iBAAH,CAAqB1B,WAArB;AACD;AACF;;AAID,IAAMV,cAAoE,yEACvE7B,QAAQ,CAACC,MAD8D,EACrD,CAAC,KAAD,EAAQ,IAAR,CADqD,kDAIvED,QAAQ,CAACE,mBAJ8D,EAIxC,CAAC,yBAAD,EAA4B,IAA5B,CAJwC,kDAKvEF,QAAQ,CAACG,WAL8D,EAKhD,CAAC,0BAAD,EAA6B,iCAA7B,CALgD,kDAMvEH,QAAQ,CAACI,mBAN8D,EAMxC,CAAC,wBAAD,EAA2B,IAA3B,CANwC,kDAOvEJ,QAAQ,CAACK,uBAP8D,EAOpC,CAAC,oBAAD,EAAuB,IAAvB,CAPoC,kDAUvEL,QAAQ,CAACM,oBAV8D,EAUvC,CAAC,wBAAD,EAA2B,IAA3B,CAVuC,kDAavEN,QAAQ,CAACO,qBAb8D,EAatC,CAAC,kBAAD,EAAqB,IAArB,CAbsC,kDAcvEP,QAAQ,CAACQ,WAd8D,EAchD,CAAC,iBAAD,EAAoB,iBAApB,CAdgD,kDAiBvER,QAAQ,CAACS,mBAjB8D,EAiBxC,CAAC,UAAD,EAAa,IAAb,CAjBwC,kDAoBvET,QAAQ,CAACU,aApB8D,EAoB9C,CAAC,qBAAD,EAAwB,IAAxB,CApB8C,kDAqBvEV,QAAQ,CAACW,aArB8D,EAqB9C,CAAC,mBAAD,EAAsB,IAAtB,CArB8C,kDAsBvEX,QAAQ,CAACY,kBAtB8D,EAsBzC,CAAC,wBAAD,EAA2B,IAA3B,CAtByC,kDAwBvEZ,QAAQ,CAACa,2BAxB8D,EAwBhC,CAAC,0BAAD,EAA6B,0BAA7B,CAxBgC,kDAyBvEb,QAAQ,CAACc,gCAzB8D,EAyB3B,CAAC,+BAAD,EAAkC,+BAAlC,CAzB2B,kDA0BvEd,QAAQ,CAACe,0BA1B8D,EA0BjC,CAAC,gCAAD,EAAmC,gCAAnC,CA1BiC,kDA6BvEf,QAAQ,CAACgB,wBA7B8D,EA6BnC,CAAC,KAAD,EAAQ,wBAAR,CA7BmC,kDA8BvEhB,QAAQ,CAACiB,sBA9B8D,EA8BrC,CAAC,KAAD,EAAQ,wBAAR,CA9BqC,kDA+BvEjB,QAAQ,CAACkB,2BA/B8D,EA+BhC,CAAC,6BAAD,EAAgC,6BAAhC,CA/BgC,kDAkCvElB,QAAQ,CAACmB,cAlC8D,EAkC7C,CAAC,oBAAD,EAAuB,IAAvB,CAlC6C,kDAmCvEnB,QAAQ,CAACoB,eAnC8D,EAmC5C,CAAC,gBAAD,EAAmB,IAAnB,CAnC4C,kDAoCvEpB,QAAQ,CAACqB,gBApC8D,EAoC3C,CAAC,0BAAD,EAA6B,IAA7B,CApC2C,kDAqCvErB,QAAQ,CAACsB,gBArC8D,EAqC3C,CAAC,wBAAD,EAA2B,IAA3B,CArC2C,mBAA1E","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"}