@luma.gl/webgl 9.0.0-alpha.30 → 9.0.0-alpha.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/converters/shader-formats.d.ts +9 -0
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
- package/dist/adapter/converters/shader-formats.js +53 -0
- package/dist/adapter/converters/shader-formats.js.map +1 -0
- package/dist/adapter/converters/texture-formats.d.ts +1 -2
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +2 -23
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.d.ts +8 -2
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +47 -9
- package/dist/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/adapter/helpers/{uniforms.d.ts → decode-webgl-types.d.ts} +9 -8
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
- package/dist/adapter/helpers/{uniforms.js → decode-webgl-types.js} +14 -13
- package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
- package/dist/adapter/helpers/get-shader-layout.d.ts +1 -51
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +14 -86
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts +3 -2
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +25 -25
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/{attribute-utils.d.ts → webgl-topology-utils.d.ts} +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
- package/dist/adapter/helpers/{attribute-utils.js → webgl-topology-utils.js} +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +2 -1
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +16 -10
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +58 -59
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/classic/buffer-with-accessor.d.ts +0 -1
- package/dist/classic/buffer-with-accessor.d.ts.map +1 -1
- package/dist/classic/buffer-with-accessor.js +0 -1
- package/dist/classic/buffer-with-accessor.js.map +1 -1
- package/dist/dist.dev.js +513 -418
- package/dist/index.cjs +670 -722
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist.min.js +22 -22
- package/package.json +5 -5
- package/src/adapter/converters/shader-formats.ts +41 -0
- package/src/adapter/converters/texture-formats.ts +3 -16
- package/src/adapter/converters/vertex-formats.ts +67 -10
- package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +22 -17
- package/src/adapter/helpers/get-shader-layout.ts +51 -159
- package/src/adapter/helpers/set-uniform.ts +33 -33
- package/src/adapter/objects/webgl-vertex-array-object.ts +2 -1
- package/src/adapter/resources/webgl-command-encoder.ts +1 -1
- package/src/adapter/resources/webgl-render-pipeline.ts +125 -82
- package/src/classic/buffer-with-accessor.ts +0 -1
- package/src/index.ts +1 -1
- package/src/types.ts +2 -0
- package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
- package/dist/adapter/helpers/attribute-utils.js.map +0 -1
- package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
- package/dist/adapter/helpers/uniforms.js.map +0 -1
- /package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +0 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { GL } from '@luma.gl/constants';
|
|
2
|
+
import { ShaderAttributeType, ShaderDataType } from '@luma.gl/core';
|
|
3
|
+
/** Get shader attribute type from GL constants */
|
|
4
|
+
export declare function getShaderAttributeTypeFromGL(type: GL, components: 1 | 2 | 3 | 4): ShaderAttributeType;
|
|
5
|
+
/** Get shader data type from GL constants */
|
|
6
|
+
export declare function getShaderDataTypeFromGL(type: GL): ShaderDataType;
|
|
7
|
+
/** GetGL constant from shader data type */
|
|
8
|
+
export declare function getGLFromShaderDataType(type: ShaderDataType): GL.INT | GL.UNSIGNED_INT | GL.FLOAT | GL.HALF_FLOAT;
|
|
9
|
+
//# sourceMappingURL=shader-formats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-formats.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/shader-formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,EAAC,mBAAmB,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAElE,kDAAkD;AAClD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,mBAAmB,CASrG;AAED,6CAA6C;AAC7C,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,EAAE,GAAG,cAAc,CAYhE;AAED,2CAA2C;AAC3C,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,UAAU,CASjH"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { GL } from '@luma.gl/constants';
|
|
2
|
+
export function getShaderAttributeTypeFromGL(type, components) {
|
|
3
|
+
const dataType = getShaderDataTypeFromGL(type);
|
|
4
|
+
switch (components) {
|
|
5
|
+
case 1:
|
|
6
|
+
return dataType;
|
|
7
|
+
case 2:
|
|
8
|
+
return "vec2<".concat(dataType, ">");
|
|
9
|
+
case 3:
|
|
10
|
+
return "vec2<".concat(dataType, ">");
|
|
11
|
+
case 4:
|
|
12
|
+
return "vec2<".concat(dataType, ">");
|
|
13
|
+
default:
|
|
14
|
+
throw new Error(String(components));
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function getShaderDataTypeFromGL(type) {
|
|
18
|
+
switch (type) {
|
|
19
|
+
case GL.INT:
|
|
20
|
+
return 'i32';
|
|
21
|
+
case GL.UNSIGNED_INT:
|
|
22
|
+
return 'u32';
|
|
23
|
+
case GL.SHORT:
|
|
24
|
+
return 'i32';
|
|
25
|
+
case GL.UNSIGNED_SHORT:
|
|
26
|
+
return 'u32';
|
|
27
|
+
case GL.BYTE:
|
|
28
|
+
return 'i32';
|
|
29
|
+
case GL.UNSIGNED_BYTE:
|
|
30
|
+
return 'u32';
|
|
31
|
+
case GL.FLOAT:
|
|
32
|
+
return 'f32';
|
|
33
|
+
case GL.HALF_FLOAT:
|
|
34
|
+
return 'f16';
|
|
35
|
+
default:
|
|
36
|
+
throw new Error(String(type));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function getGLFromShaderDataType(type) {
|
|
40
|
+
switch (type) {
|
|
41
|
+
case 'i32':
|
|
42
|
+
return GL.INT;
|
|
43
|
+
case 'u32':
|
|
44
|
+
return GL.UNSIGNED_INT;
|
|
45
|
+
case 'f32':
|
|
46
|
+
return GL.FLOAT;
|
|
47
|
+
case 'f16':
|
|
48
|
+
return GL.HALF_FLOAT;
|
|
49
|
+
default:
|
|
50
|
+
throw new Error(String(type));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=shader-formats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader-formats.js","names":["GL","getShaderAttributeTypeFromGL","type","components","dataType","getShaderDataTypeFromGL","concat","Error","String","INT","UNSIGNED_INT","SHORT","UNSIGNED_SHORT","BYTE","UNSIGNED_BYTE","FLOAT","HALF_FLOAT","getGLFromShaderDataType"],"sources":["../../../src/adapter/converters/shader-formats.ts"],"sourcesContent":["import {GL} from '@luma.gl/constants';\nimport {ShaderAttributeType, ShaderDataType} from '@luma.gl/core';\n\n/** Get shader attribute type from GL constants */\nexport function getShaderAttributeTypeFromGL(type: GL, components: 1 | 2 | 3 | 4): ShaderAttributeType {\n const dataType = getShaderDataTypeFromGL(type);\n switch (components) {\n case 1: return dataType;\n case 2: return `vec2<${dataType}>`;\n case 3: return `vec2<${dataType}>`;\n case 4: return `vec2<${dataType}>`;\n default: throw new Error(String(components));\n }\n}\n\n/** Get shader data type from GL constants */\nexport function getShaderDataTypeFromGL(type: GL): ShaderDataType {\n switch (type) {\n case GL.INT: return 'i32';\n case GL.UNSIGNED_INT: return 'u32';\n case GL.SHORT: return 'i32';\n case GL.UNSIGNED_SHORT: return 'u32';\n case GL.BYTE: return 'i32';\n case GL.UNSIGNED_BYTE: return 'u32';\n case GL.FLOAT: return 'f32';\n case GL.HALF_FLOAT: return 'f16';\n default: throw new Error(String(type));\n }\n}\n\n/** GetGL constant from shader data type */\nexport function getGLFromShaderDataType(type: ShaderDataType): GL.INT | GL.UNSIGNED_INT | GL.FLOAT | GL.HALF_FLOAT {\n switch (type) {\n // TODO\n case 'i32': return GL.INT;\n case 'u32': return GL.UNSIGNED_INT;\n case 'f32': return GL.FLOAT;\n case 'f16': return GL.HALF_FLOAT;\n default: throw new Error(String(type));\n }\n}\n"],"mappings":"AAAA,SAAQA,EAAE,QAAO,oBAAoB;AAIrC,OAAO,SAASC,4BAA4BA,CAACC,IAAQ,EAAEC,UAAyB,EAAuB;EACrG,MAAMC,QAAQ,GAAGC,uBAAuB,CAACH,IAAI,CAAC;EAC9C,QAAQC,UAAU;IAChB,KAAK,CAAC;MAAE,OAAOC,QAAQ;IACvB,KAAK,CAAC;MAAE,eAAAE,MAAA,CAAeF,QAAQ;IAC/B,KAAK,CAAC;MAAE,eAAAE,MAAA,CAAeF,QAAQ;IAC/B,KAAK,CAAC;MAAE,eAAAE,MAAA,CAAeF,QAAQ;IAC/B;MAAS,MAAM,IAAIG,KAAK,CAACC,MAAM,CAACL,UAAU,CAAC,CAAC;EAC9C;AACF;AAGA,OAAO,SAASE,uBAAuBA,CAACH,IAAQ,EAAkB;EAChE,QAAQA,IAAI;IACV,KAAKF,EAAE,CAACS,GAAG;MAAE,OAAO,KAAK;IACzB,KAAKT,EAAE,CAACU,YAAY;MAAE,OAAO,KAAK;IAClC,KAAKV,EAAE,CAACW,KAAK;MAAE,OAAO,KAAK;IAC3B,KAAKX,EAAE,CAACY,cAAc;MAAE,OAAO,KAAK;IACpC,KAAKZ,EAAE,CAACa,IAAI;MAAE,OAAO,KAAK;IAC1B,KAAKb,EAAE,CAACc,aAAa;MAAE,OAAO,KAAK;IACnC,KAAKd,EAAE,CAACe,KAAK;MAAE,OAAO,KAAK;IAC3B,KAAKf,EAAE,CAACgB,UAAU;MAAE,OAAO,KAAK;IAChC;MAAS,MAAM,IAAIT,KAAK,CAACC,MAAM,CAACN,IAAI,CAAC,CAAC;EACxC;AACF;AAGA,OAAO,SAASe,uBAAuBA,CAACf,IAAoB,EAAuD;EACjH,QAAQA,IAAI;IAEV,KAAK,KAAK;MAAE,OAAOF,EAAE,CAACS,GAAG;IACzB,KAAK,KAAK;MAAE,OAAOT,EAAE,CAACU,YAAY;IAClC,KAAK,KAAK;MAAE,OAAOV,EAAE,CAACe,KAAK;IAC3B,KAAK,KAAK;MAAE,OAAOf,EAAE,CAACgB,UAAU;IAChC;MAAS,MAAM,IAAIT,KAAK,CAACC,MAAM,CAACN,IAAI,CAAC,CAAC;EACxC;AACF"}
|
|
@@ -66,7 +66,7 @@ export declare function isTextureFormatRenderable(gl: WebGLRenderingContext, for
|
|
|
66
66
|
export declare function getWebGLTextureParameters(formatOrGL: TextureFormat | GL, isWebGL2: boolean): {
|
|
67
67
|
format: GL;
|
|
68
68
|
dataFormat: GL;
|
|
69
|
-
type: GL;
|
|
69
|
+
type: GL.BYTE | GL.UNSIGNED_BYTE | GL.SHORT | GL.UNSIGNED_SHORT | GL.INT | GL.UNSIGNED_INT | GL.FLOAT | GL.HALF_FLOAT;
|
|
70
70
|
compressed: any;
|
|
71
71
|
};
|
|
72
72
|
export declare function getDepthStencilAttachmentWebGL(format: TextureFormat): GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;
|
|
@@ -77,6 +77,5 @@ export declare function getDepthStencilAttachmentWebGL(format: TextureFormat): G
|
|
|
77
77
|
export declare function _checkFloat32ColorAttachment(gl: WebGLRenderingContext, internalFormat?: 6408, srcFormat?: GL, srcType?: GL): boolean;
|
|
78
78
|
/** TODO - VERY roundabout legacy way of calculating bytes per pixel */
|
|
79
79
|
export declare function getTextureFormatBytesPerPixel(formatOrGL: TextureFormat | GL, isWebGL2: boolean): number;
|
|
80
|
-
export declare function getWebGLDataType(dataType: string): GL;
|
|
81
80
|
export {};
|
|
82
81
|
//# sourceMappingURL=texture-formats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texture-formats.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/texture-formats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"texture-formats.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/texture-formats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { decodeTextureFormat } from '@luma.gl/core';
|
|
2
2
|
import { GL } from '@luma.gl/constants';
|
|
3
3
|
import { isWebGL2 } from "../../context/context/webgl-checks.js";
|
|
4
|
+
import { getGLFromVertexType } from "./vertex-formats.js";
|
|
4
5
|
const texture_compression_bc = 'texture-compression-bc';
|
|
5
6
|
const texture_compression_astc = 'texture-compression-astc';
|
|
6
7
|
const texture_compression_etc2 = 'texture-compression-etc2';
|
|
@@ -853,7 +854,7 @@ export function getWebGLTextureParameters(formatOrGL, isWebGL2) {
|
|
|
853
854
|
return {
|
|
854
855
|
format: webglFormat,
|
|
855
856
|
dataFormat: getWebGLPixelDataFormat(decoded.format, decoded.integer, decoded.normalized, webglFormat),
|
|
856
|
-
type:
|
|
857
|
+
type: decoded.dataType ? getGLFromVertexType(decoded.dataType) : GL.UNSIGNED_BYTE,
|
|
857
858
|
compressed: decoded.compressed
|
|
858
859
|
};
|
|
859
860
|
}
|
|
@@ -914,26 +915,4 @@ function getWebGLPixelDataFormat(dataFormat, integer, normalized, format) {
|
|
|
914
915
|
return GL.RGBA;
|
|
915
916
|
}
|
|
916
917
|
}
|
|
917
|
-
export function getWebGLDataType(dataType) {
|
|
918
|
-
switch (dataType) {
|
|
919
|
-
case 'uint8':
|
|
920
|
-
return GL.UNSIGNED_BYTE;
|
|
921
|
-
case 'sint8':
|
|
922
|
-
return GL.BYTE;
|
|
923
|
-
case 'uint16':
|
|
924
|
-
return GL.UNSIGNED_SHORT;
|
|
925
|
-
case 'sint16':
|
|
926
|
-
return GL.SHORT;
|
|
927
|
-
case 'uint32':
|
|
928
|
-
return GL.UNSIGNED_INT;
|
|
929
|
-
case 'sint32':
|
|
930
|
-
return GL.INT;
|
|
931
|
-
case 'float16':
|
|
932
|
-
return GL.HALF_FLOAT;
|
|
933
|
-
case 'float32':
|
|
934
|
-
return GL.FLOAT;
|
|
935
|
-
default:
|
|
936
|
-
return GL.UNSIGNED_BYTE;
|
|
937
|
-
}
|
|
938
|
-
}
|
|
939
918
|
//# sourceMappingURL=texture-formats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texture-formats.js","names":["decodeTextureFormat","GL","isWebGL2","texture_compression_bc","texture_compression_astc","texture_compression_etc2","texture_compression_etc1_webgl","texture_compression_pvrtc_webgl","texture_compression_atc_webgl","X_S3TC","X_S3TC_SRGB","X_RGTC","X_BPTC","X_ETC2","X_ASTC","X_ETC1","X_PVRTC","X_ATC","EXT_SRGB","EXT_TEXTURE_NORM16","EXT_FLOAT_WEBGL1","EXT_FLOAT_RENDER_WEBGL2","checkExtension","gl","extension","getExtension","checkExtensions","extensions","every","TEXTURE_FEATURE_CHECKS","checkTextureFeature","feature","_TEXTURE_FEATURE_CHEC","call","checkTextureFeatures","features","getTextureFeatures","textureFeatures","Object","keys","filter","TEXTURE_FORMATS","RGB","gl1","b","c","bpp","dataFormat","types","UNSIGNED_BYTE","UNSIGNED_SHORT_5_6_5","RGBA","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","R8","renderbuffer","R8_SNORM","R8UI","R8I","RG8","RG8_SNORM","RG8UI","RG8I","R16UI","R16I","R16F","render","R16_EXT","f","x","R16_SNORM_EXT","RGBA4","wgpu","RGB565","RGB5_A1","RGB8","RGB8_SNORM","RGBA8","SRGB8_ALPHA8","SRGB_ALPHA_EXT","gl1ext","RGBA8_SNORM","RGBA8UI","RGBA8I","RG16UI","RG16I","RG16F","RG16_EXT","RG16_SNORM_EXT","R32UI","R32I","R32F","RGB9_E5","p","R11F_G11F_B10F","RGB10_A2","RGB10_A2UI","RGB16_EXT","RGB16_SNORM_EXT","RG32UI","RG32I","RG32F","RGBA16UI","RGBA16I","RGBA16F","RGBA16_EXT","RGBA16_SNORM_EXT","RGB32F","gl2ext","FLOAT","RGBA32UI","RGBA32I","RGBA32F","STENCIL_INDEX8","attachment","STENCIL_ATTACHMENT","DEPTH_COMPONENT16","DEPTH_ATTACHMENT","DEPTH_COMPONENT24","DEPTH_COMPONENT32F","DEPTH_STENCIL","DEPTH_STENCIL_ATTACHMENT","depthTexture","DEPTH24_STENCIL8","DEPTH32F_STENCIL8","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","COMPRESSED_RED_RGTC1_EXT","COMPRESSED_SIGNED_RED_RGTC1_EXT","COMPRESSED_RED_GREEN_RGTC2_EXT","COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT","COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT","COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT","COMPRESSED_RGBA_BPTC_UNORM_EXT","COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT","COMPRESSED_RGB8_ETC2","COMPRESSED_SRGB8_ETC2","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","COMPRESSED_R11_EAC","COMPRESSED_SIGNED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_SIGNED_RG11_EAC","COMPRESSED_RGBA_ASTC_4x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR","COMPRESSED_RGBA_ASTC_5x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR","COMPRESSED_RGBA_ASTC_5x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR","COMPRESSED_RGBA_ASTC_6x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR","COMPRESSED_RGBA_ASTC_6x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR","COMPRESSED_RGBA_ASTC_8x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR","COMPRESSED_RGBA_ASTC_8x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR","COMPRESSED_RGBA_ASTC_8x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR","COMPRESSED_RGBA_ASTC_10x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR","COMPRESSED_RGBA_ASTC_10x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR","COMPRESSED_RGBA_ASTC_10x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR","COMPRESSED_RGBA_ASTC_12x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR","COMPRESSED_RGBA_ASTC_12x12_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB_ATC_WEBGL","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","DATA_FORMAT_CHANNELS","RED","RED_INTEGER","RG","RG_INTEGER","RGB_INTEGER","RGBA_INTEGER","DEPTH_COMPONENT","ALPHA","LUMINANCE","LUMINANCE_ALPHA","TYPE_SIZES","UNSIGNED_INT","INT","UNSIGNED_SHORT","SHORT","HALF_FLOAT","BYTE","isTextureFormatSupported","formatOrGL","format","convertGLToTextureFormat","info","undefined","Boolean","isRenderbufferFormatSupported","_TEXTURE_FORMATS$form","entry","entries","find","_ref","Error","concat","convertTextureFormatToGL","formatInfo","webglFormat","getTextureFormatSupport","supported","renderable","filterable","blendable","storable","isTextureFormatFilterable","decoded","signed","endsWith","isTextureFormatRenderable","getWebGLTextureParameters","getWebGLPixelDataFormat","integer","normalized","type","getWebGLDataType","dataType","compressed","getDepthStencilAttachmentWebGL","_checkFloat32ColorAttachment","internalFormat","arguments","length","srcFormat","srcType","texture","framebuffer","createTexture","bindTexture","TEXTURE_2D","level","width","height","border","pixel","Uint8Array","texImage2D","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","deleteTexture","deleteFramebuffer","getTextureFormatBytesPerPixel","params","channels","channelSize"],"sources":["../../../src/adapter/converters/texture-formats.ts"],"sourcesContent":["import type {TextureFormat, DeviceFeature} from '@luma.gl/core';\nimport {decodeTextureFormat} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\n\n/* eslint-disable camelcase */\n\n// TEXTURE FEATURES\n\n// Define local device feature strings to optimize minification\nconst texture_compression_bc: DeviceFeature = 'texture-compression-bc';\nconst texture_compression_astc: DeviceFeature = 'texture-compression-astc';\nconst texture_compression_etc2: DeviceFeature = 'texture-compression-etc2';\nconst texture_compression_etc1_webgl: DeviceFeature = 'texture-compression-etc1-webgl';\nconst texture_compression_pvrtc_webgl: DeviceFeature = 'texture-compression-pvrtc-webgl';\nconst texture_compression_atc_webgl: DeviceFeature = 'texture-compression-atc-webgl';\n\n// Define local webgl extension strings to optimize minification\nconst X_S3TC = 'WEBGL_compressed_texture_s3tc'; // BC1, BC2, BC3\nconst X_S3TC_SRGB = 'WEBGL_compressed_texture_s3tc_srgb'; // BC1, BC2, BC3\nconst X_RGTC = 'EXT_texture_compression_rgtc'; // BC4, BC5\nconst X_BPTC = 'EXT_texture_compression_bptc'; // BC6, BC7\nconst X_ETC2 = 'WEBGL_compressed_texture_etc'; // Renamed from 'WEBGL_compressed_texture_es3'\nconst X_ASTC = 'WEBGL_compressed_texture_astc';\nconst X_ETC1 = 'WEBGL_compressed_texture_etc1';\nconst X_PVRTC = 'WEBGL_compressed_texture_pvrtc';\nconst X_ATC = 'WEBGL_compressed_texture_atc';\n\n// Define local webgl extension strings to optimize minification\nconst EXT_SRGB = 'EXT_sRGB'; // https://developer.mozilla.org/en-US/docs/Web/API/EXT_sRGB\nconst EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';\nconst EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';\nconst EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';\n// const EXT_HALF_FLOAT_WEBGL1 = 'EXT_color_buffer_half_float';\n// const DEPTH = 'WEBGL_depth_texture';\n\nconst checkExtension = (gl: WebGLRenderingContext, extension: string): boolean =>\n gl.getExtension(extension);\nconst checkExtensions = (gl: WebGLRenderingContext, extensions: string[]): boolean =>\n extensions.every(extension => gl.getExtension(extension));\n\n// prettier-ignore\nconst TEXTURE_FEATURE_CHECKS: Partial<Record<DeviceFeature, (gl: WebGLRenderingContext) => boolean> > = {\n 'texture-blend-float-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'EXT_float_blend'),\n 'texture-formats-srgb-webgl1': (gl) => (isWebGL2(gl) ? true : checkExtension(gl, EXT_SRGB)),\n 'texture-formats-depth-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'WEBGL_depth_texture'),\n 'texture-formats-float32-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_float'),\n 'texture-formats-float16-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_half_float'),\n 'texture-formats-norm16-webgl': (gl) => isWebGL2(gl) ? checkExtension(gl, EXT_TEXTURE_NORM16) : false,\n 'texture-filter-linear-float32-webgl': (gl) => checkExtension(gl, 'OES_texture_float_linear'),\n 'texture-filter-linear-float16-webgl': (gl) => checkExtension(gl, 'OES_texture_half_float_linear'),\n 'texture-filter-anisotropic-webgl': (gl) => checkExtension(gl, 'EXT_texture_filter_anisotropic'),\n 'texture-renderable-float32-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_float'), // [false, 'EXT_color_buffer_float'],\n 'texture-renderable-float16-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_half_float'),\n\n 'texture-compression-bc': (gl) => checkExtensions(gl, [X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC]),\n 'texture-compression-bc5-webgl': (gl) => checkExtensions(gl, [X_RGTC]),\n // 'texture-compression-bc7-webgl': gl => checkExtensions(gl, [X_BPTC]),\n // 'texture-compression-bc3-srgb-webgl': gl => checkExtensions(gl, [X_S3TC_SRGB]),\n // 'texture-compression-bc3-webgl': gl => checkExtensions(gl, [X_S3TC]),\n 'texture-compression-etc2': (gl) => checkExtensions(gl, [X_ETC2]),\n 'texture-compression-astc': (gl) => checkExtensions(gl, [X_ASTC]),\n 'texture-compression-etc1-webgl': (gl) => checkExtensions(gl, [X_ETC1]),\n 'texture-compression-pvrtc-webgl': (gl) => checkExtensions(gl, [X_PVRTC]),\n 'texture-compression-atc-webgl': (gl) => checkExtensions(gl, [X_ATC])\n};\n\nexport function checkTextureFeature(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {\n return TEXTURE_FEATURE_CHECKS[feature]?.(gl) || false;\n}\n\nconst checkTextureFeatures = (gl: WebGLRenderingContext, features: DeviceFeature[]): boolean =>\n features.every(feature => checkTextureFeature(gl, feature));\n\n/** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */\nexport function getTextureFeatures(gl: WebGLRenderingContext): DeviceFeature[] {\n const textureFeatures = Object.keys(TEXTURE_FEATURE_CHECKS) as DeviceFeature[];\n return textureFeatures.filter(feature => checkTextureFeature(gl, feature));\n}\n\n// TEXTURE FORMATS\n\n/** Map a format to webgl and constants */\ntype Format = {\n gl?: GL;\n /** If a different unsized format is needed in WebGL1 */\n gl1?: GL;\n gl1ext?: string;\n /** format requires WebGL2, when using a WebGL 1 context, color renderbuffer formats are limited */\n gl2ext?: string;\n\n /** (bytes per pixel), for memory usage calculations. */\n b?: number;\n /** channels */\n c?: number;\n bpp?: number;\n /** packed */\n p?: number;\n /** compressed */\n x?: string;\n /** for compressed texture formats */\n f?: DeviceFeature;\n /** renderable if feature is present */\n render?: DeviceFeature;\n /** filterable if feature is present */\n filter?: DeviceFeature;\n\n /** If not supported on WebGPU */\n wgpu?: false;\n\n types?: number[];\n\n dataFormat?: GL;\n /** Depth and stencil format attachment points. If set, needs to be a Renderbuffer unless depthTexture is set */\n attachment?: GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;\n /** if depthTexture is set this is a depth/stencil format that can be set to a texture */\n depthTexture?: boolean;\n\n renderbuffer?: boolean\n};\n\n// TABLES\n\n/** \n * Texture format data -\n * Exported but can change without notice\n */\n// prettier-ignore\nexport const TEXTURE_FORMATS: Record<TextureFormat, Format> = {\n // Unsized formats that leave the precision up to the driver.\n // TODO - Fix bpp constants\n // 'r8unorm-unsized': {gl: GL.LUMINANCE, b: 4, c: 2, bpp: 4},\n 'rgb8unorm-unsized': {gl: GL.RGB, gl1: GL.RGB, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5]},\n 'rgba8unorm-unsized': {gl: GL.RGBA, gl1: GL.RGBA, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4, GL.UNSIGNED_SHORT_5_5_5_1]},\n // 'rgb8unorm-srgb-unsized': {gl: GL.SRGB_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n // 'rgba8unorm-srgb-unsized': {gl: GL.SRGB_ALPHA_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n\n // 8-bit formats\n 'r8unorm': {gl: GL.R8, b: 1, c: 1, renderbuffer: true},\n 'r8snorm': {gl: GL.R8_SNORM, b: 1, c: 1},\n 'r8uint': {gl: GL.R8UI, b: 1, c: 1, renderbuffer: true},\n 'r8sint': {gl: GL.R8I, b: 1, c: 1, renderbuffer: true},\n\n // 16-bit formats\n 'rg8unorm': {gl: GL.RG8, b: 2, c: 2, renderbuffer: true},\n 'rg8snorm': {gl: GL.RG8_SNORM, b: 2, c: 2},\n 'rg8uint': {gl: GL.RG8UI, b: 2, c: 2, renderbuffer: true},\n 'rg8sint': {gl: GL.RG8I, b: 2, c: 2, renderbuffer: true},\n\n 'r16uint': {gl: GL.R16UI, b: 2, c: 1, renderbuffer: true},\n 'r16sint': {gl: GL.R16I, b: 2, c: 1, renderbuffer: true},\n 'r16float': {gl: GL.R16F, b: 2, c: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl', renderbuffer: true},\n 'r16unorm-webgl': {gl: GL.R16_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl', renderbuffer: true, x: EXT_TEXTURE_NORM16},\n 'r16snorm-webgl': {gl: GL.R16_SNORM_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // Packed 16-bit formats\n 'rgba4unorm-webgl': {gl: GL.RGBA4, b: 2, c: 4, wgpu: false, renderbuffer: true},\n 'rgb565unorm-webgl': {gl: GL.RGB565, b: 2, c: 4, wgpu: false, renderbuffer: true},\n 'rgb5a1unorm-webgl': {gl: GL.RGB5_A1, b: 2, c: 4, wgpu: false, renderbuffer: true},\n\n // 24-bit formats\n 'rgb8unorm-webgl': {gl: GL.RGB8, b: 3, c: 3, wgpu: false},\n 'rgb8snorm-webgl': {gl: GL.RGB8_SNORM, b: 3, c: 3, wgpu: false},\n\n // 32-bit formats \n 'rgba8unorm': {gl: GL.RGBA8, gl1: GL.RGBA, b: 4, c: 2, bpp: 4},\n 'rgba8unorm-srgb': {gl: GL.SRGB8_ALPHA8, gl1: GL.SRGB_ALPHA_EXT, b: 4, c: 4, gl1ext: EXT_SRGB, bpp: 4},\n 'rgba8snorm': {gl: GL.RGBA8_SNORM, b: 4, c: 4},\n 'rgba8uint': {gl: GL.RGBA8UI, b: 4, c: 4, bpp: 4},\n 'rgba8sint': {gl: GL.RGBA8I, b: 4, c: 4, bpp: 4},\n // reverse colors, webgpu only\n 'bgra8unorm': {b: 4, c: 4},\n 'bgra8unorm-srgb': {b: 4, c: 4},\n\n 'rg16uint': {gl: GL.RG16UI, b: 4, c: 1, bpp: 4},\n 'rg16sint': {gl: GL.RG16I, b: 4, c: 2, bpp: 4},\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n 'rg16float': {gl: GL.RG16F, bpp: 4, b: 4, c: 2, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl', renderbuffer: true},\n 'rg16unorm-webgl': {gl: GL.RG16_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n 'rg16snorm-webgl': {gl: GL.RG16_SNORM_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n 'r32uint': {gl: GL.R32UI, b: 4, c: 1, bpp: 4, renderbuffer: true},\n 'r32sint': {gl: GL.R32I, b: 4, c: 1, bpp: 4, renderbuffer: true},\n 'r32float': {gl: GL.R32F, bpp: 4, b: 4, c: 1, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n\n // Packed 32-bit formats\n 'rgb9e5ufloat': {gl: GL.RGB9_E5, b: 4, c: 3, p: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rg11b10ufloat': {gl: GL.R11F_G11F_B10F, b: 4, c: 3, p: 1,render: 'texture-renderable-float32-webgl', renderbuffer: true},\n 'rgb10a2unorm': {gl: GL.RGB10_A2, b: 4, c: 4, p: 1, renderbuffer: true},\n // webgl2 only\n 'rgb10a2unorm-webgl': {b: 4, c: 4, gl: GL.RGB10_A2UI, p: 1, wgpu: false, bpp: 4, renderbuffer: true},\n\n // 48-bit formats\n 'rgb16unorm-webgl': {gl: GL.RGB16_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n 'rgb16snorm-webgl': {gl: GL.RGB16_SNORM_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // 64-bit formats\n 'rg32uint': {gl: GL.RG32UI, b: 8, c: 2, renderbuffer: true},\n 'rg32sint': {gl: GL.RG32I, b: 8, c: 2, renderbuffer: true},\n 'rg32float': {gl: GL.RG32F, b: 8, c: 2, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl', renderbuffer: true},\n 'rgba16uint': {gl: GL.RGBA16UI, b: 8, c: 4, renderbuffer: true},\n 'rgba16sint': {gl: GL.RGBA16I, b: 8, c: 4, renderbuffer: true},\n 'rgba16float': {gl: GL.RGBA16F, gl1: GL.RGBA, b: 8, c: 4, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rgba16unorm-webgl': {gl: GL.RGBA16_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl', renderbuffer: true, x: EXT_TEXTURE_NORM16},\n 'rgba16snorm-webgl': {gl: GL.RGBA16_SNORM_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // 96-bit formats (deprecated!)\n 'rgb32float-webgl': {gl: GL.RGB32F, gl1: GL.RGB, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl',\n gl2ext: EXT_FLOAT_RENDER_WEBGL2, gl1ext: EXT_FLOAT_WEBGL1, // WebGL1 render buffers are supported with GL.RGB32F\n dataFormat: GL.RGB, types: [GL.FLOAT]},\n \n // 128-bit formats\n 'rgba32uint': {gl: GL.RGBA32UI, b: 16, c: 4, renderbuffer: true},\n 'rgba32sint': {gl: GL.RGBA32I, b: 16, c: 4, renderbuffer: true},\n 'rgba32float': {gl: GL.RGBA32F, b: 16, c: 4, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl', renderbuffer: true},\n\n // Depth and stencil formats\n 'stencil8': {gl: GL.STENCIL_INDEX8, gl1: GL.STENCIL_INDEX8, b: 1, c: 1, attachment: GL.STENCIL_ATTACHMENT, renderbuffer: true}, // 8 stencil bits\n\n 'depth16unorm': {gl: GL.DEPTH_COMPONENT16, gl1: GL.DEPTH_COMPONENT16, b: 2, c: 1, attachment: GL.DEPTH_ATTACHMENT, renderbuffer: true}, // 16 depth bits\n 'depth24plus': {gl: GL.DEPTH_COMPONENT24, b: 3, c: 1, attachment: GL.DEPTH_ATTACHMENT},\n 'depth32float': {gl: GL.DEPTH_COMPONENT32F, b: 4, c: 1, attachment: GL.DEPTH_ATTACHMENT, renderbuffer: true},\n\n // The depth component of the \"depth24plus\" and \"depth24plus-stencil8\" formats may be implemented as either a 24-bit depth value or a \"depth32float\" value.\n 'depth24plus-stencil8': {gl: GL.DEPTH_STENCIL, gl1: GL.DEPTH_STENCIL, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true, depthTexture: true},\n // \"depth24unorm-stencil8\" feature\n 'depth24unorm-stencil8': {gl: GL.DEPTH24_STENCIL8, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true},\n // \"depth32float-stencil8\" feature\n 'depth32float-stencil8': {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true},\n\n // BC compressed formats: check device.features.has(\"texture-compression-bc\");\n\n 'bc1-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgb-unorm-srgb-webgl': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n\n 'bc1-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc2-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc2-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc3-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc3-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc4-r-unorm': {gl: GL.COMPRESSED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc4-r-snorm': {gl: GL.COMPRESSED_SIGNED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-unorm': {gl: GL.COMPRESSED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-snorm': {gl: GL.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc6h-rgb-ufloat': {gl: GL.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc6h-rgb-float': {gl: GL.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm': {gl: GL.COMPRESSED_RGBA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n\n // WEBGL_compressed_texture_etc: device.features.has(\"texture-compression-etc2\")\n // Note: Supposedly guaranteed availability compressed formats in WebGL2, but through CPU decompression\n\n 'etc2-rgb8unorm': {gl: GL.COMPRESSED_RGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm': {gl: GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm-srgb': {gl: GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgba8unorm': {gl: GL.COMPRESSED_RGBA8_ETC2_EAC, f: texture_compression_etc2},\n 'etc2-rgba8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, f: texture_compression_etc2},\n\n 'eac-r11unorm': {gl: GL.COMPRESSED_R11_EAC, f: texture_compression_etc2},\n 'eac-r11snorm': {gl: GL.COMPRESSED_SIGNED_R11_EAC, f: texture_compression_etc2},\n 'eac-rg11unorm': {gl: GL.COMPRESSED_RG11_EAC, f: texture_compression_etc2},\n 'eac-rg11snorm': {gl: GL.COMPRESSED_SIGNED_RG11_EAC, f: texture_compression_etc2},\n\n // X_ASTC compressed formats: device.features.has(\"texture-compression-astc\")\n\n 'astc-4x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-4x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x12_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, f: texture_compression_astc},\n\n // WEBGL_compressed_texture_pvrtc\n\n 'pvrtc-rgb4unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba4unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rbg2unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba2unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n\n // WEBGL_compressed_texture_etc1\n\n 'etc1-rbg-unorm-webgl': {gl: GL.COMPRESSED_RGB_ETC1_WEBGL, f: texture_compression_etc1_webgl},\n\n // WEBGL_compressed_texture_atc\n\n 'atc-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_ATC_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgba-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgbai-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL, f: texture_compression_atc_webgl}\n};\n\n/** Legal combinations for internalFormat, format and type *\n// [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1ext: DEPTH},\n// [GL.DEPTH_STENCIL]: {gl1ext: DEPTH},\n// Sized texture format\n// R\n[GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RG\n[GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGB\n[GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGBA\n\n[GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},\n[GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},\n[GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},\n[GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}\n*/\n\n/* This table is now baked into the above table\ntype RenderbufferFormat = {\n bpp: number;\n gl2?: boolean;\n ext?: string;\n};\n\nexport const RENDERBUFFER_FORMATS: Record<string, RenderbufferFormat> = {\n [GL.DEPTH_COMPONENT16]: {bpp: 2}, // 16 depth bits.\n // TODO - Not clear which webgpu value to map this to.\n // [GL.DEPTH_COMPONENT24]: {gl2: true, bpp: 3},\n [GL.DEPTH_COMPONENT32F]: {gl2: true, bpp: 4},\n\n [GL.STENCIL_INDEX8]: {bpp: 1}, // 8 stencil bits.\n\n [GL.DEPTH_STENCIL]: {bpp: 4},\n [GL.DEPTH24_STENCIL8]: {gl2: true, bpp: 4},\n [GL.DEPTH32F_STENCIL8]: {gl2: true, bpp: 5},\n\n // When using a WebGL 1 context, color renderbuffer formats are limited\n [GL.RGBA4]: {gl2: true, bpp: 2},\n [GL.RGB565]: {gl2: true, bpp: 2},\n [GL.RGB5_A1]: {gl2: true, bpp: 2},\n\n // When using a WebGL 2 context, the following values are available additionally:\n [GL.R8]: {gl2: true, bpp: 1},\n [GL.R8UI]: {gl2: true, bpp: 1},\n [GL.R8I]: {gl2: true, bpp: 1},\n [GL.R16UI]: {gl2: true, bpp: 2},\n [GL.R16I]: {gl2: true, bpp: 2},\n [GL.R32UI]: {gl2: true, bpp: 4},\n [GL.R32I]: {gl2: true, bpp: 4},\n [GL.RG8]: {gl2: true, bpp: 2},\n [GL.RG8UI]: {gl2: true, bpp: 2},\n [GL.RG8I]: {gl2: true, bpp: 2},\n [GL.RG16UI]: {gl2: true, bpp: 4},\n [GL.RG16I]: {gl2: true, bpp: 4},\n [GL.RG32UI]: {gl2: true, bpp: 8},\n [GL.RG32I]: {gl2: true, bpp: 8},\n [GL.RGB8]: {gl2: true, bpp: 3},\n [GL.RGBA8]: {gl2: true, bpp: 4},\n // [GL.SRGB8_ALPHA8]: {gl2: true, gl1: SRGB}, // When using the EXT_sRGB WebGL1 extension\n [GL.RGB10_A2]: {gl2: true, bpp: 4},\n [GL.RGBA8UI]: {gl2: true, bpp: 4},\n [GL.RGBA8I]: {gl2: true, bpp: 4},\n [GL.RGB10_A2UI]: {gl2: true, bpp: 4},\n [GL.RGBA16UI]: {gl2: true, bpp: 8},\n [GL.RGBA16I]: {gl2: true, bpp: 8},\n [GL.RGBA32I]: {gl2: true, bpp: 16},\n [GL.RGBA32UI]: {gl2: true, bpp: 16},\n\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n [GL.R16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 2},\n [GL.RG16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RGBA16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},\n [GL.R32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RG32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},\n // TODO - can't get WEBGL_color_buffer_float to work on renderbuffers\n [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 16},\n // [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, gl1: EXT_FLOAT_WEBGL1},\n [GL.R11F_G11F_B10F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4}\n};\n*/\n\n/** @deprecated should be removed */\nconst DATA_FORMAT_CHANNELS = {\n [GL.RED]: 1,\n [GL.RED_INTEGER]: 1,\n [GL.RG]: 2,\n [GL.RG_INTEGER]: 2,\n [GL.RGB]: 3,\n [GL.RGB_INTEGER]: 3,\n [GL.RGBA]: 4,\n [GL.RGBA_INTEGER]: 4,\n [GL.DEPTH_COMPONENT]: 1,\n [GL.DEPTH_STENCIL]: 1,\n [GL.ALPHA]: 1,\n [GL.LUMINANCE]: 1,\n [GL.LUMINANCE_ALPHA]: 2\n};\n\n/** @deprecated should be removed */\nconst TYPE_SIZES = {\n [GL.FLOAT]: 4,\n [GL.UNSIGNED_INT]: 4,\n [GL.INT]: 4,\n [GL.UNSIGNED_SHORT]: 2,\n [GL.SHORT]: 2,\n [GL.HALF_FLOAT]: 2,\n [GL.BYTE]: 1,\n [GL.UNSIGNED_BYTE]: 1\n};\n\n// FUNCTIONS\n\n/** Checks if a texture format is supported */\nexport function isTextureFormatSupported(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return false;\n }\n // Check that we have a GL constant\n if (isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined) {\n return false;\n }\n // Check extensions\n const extension = info.x || (isWebGL2(gl) ? info.gl2ext || info.gl1ext : info.gl1ext);\n if (extension) {\n return Boolean(gl.getExtension(extension));\n }\n // if (info.gl1 === undefined && info.gl2 === undefined) {\n // // No info - always supported\n // }\n return true;\n}\n\nexport function isRenderbufferFormatSupported(gl: WebGLRenderingContext, format: TextureFormat): boolean {\n // Note: Order is important since the function call initializes extensions.\n return isTextureFormatSupported(gl, format) && TEXTURE_FORMATS[format]?.renderbuffer;\n}\n\n/**\n * Map WebGL texture formats (GL constants) to WebGPU-style TextureFormat strings\n */\nexport function convertGLToTextureFormat(format: GL | TextureFormat): TextureFormat {\n if (typeof format === 'string') {\n return format;\n }\n const entry = Object.entries(TEXTURE_FORMATS).find(\n ([, entry]) => entry.gl === format || entry.gl1 === format\n );\n if (!entry) {\n throw new Error(`Unknown texture format ${format}`);\n }\n return entry[0] as TextureFormat;\n}\n\n/**\n * Map WebGPU style texture format strings to GL constants\n */\nexport function convertTextureFormatToGL(format: TextureFormat, isWebGL2: boolean): GL | undefined {\n const formatInfo = TEXTURE_FORMATS[format];\n const webglFormat = isWebGL2 ? formatInfo?.gl : formatInfo?.gl1;\n if (webglFormat === undefined) {\n throw new Error(`Unsupported texture format ${format}`);\n }\n return webglFormat;\n}\n\n/** Checks if a texture format is supported */\nexport function getTextureFormatSupport(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): {\n supported: boolean;\n filterable?: boolean;\n renderable?: boolean;\n blendable?: boolean;\n storable?: boolean;\n} {\n const format = convertGLToTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return {supported: false};\n }\n // let decoded;\n // try {\n // decoded = decodeTextureFormat(format);\n // } catch {}\n\n // Support Check that we have a GL constant\n let supported = isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined;\n supported = supported && checkTextureFeatures(gl, [info.f]);\n\n // Filtering\n // const filterable = info.filter\n // ? checkTextureFeatures(gl, [info.filter])\n // : decoded && !decoded.signed;\n // const renderable = info.filter\n // ? checkTextureFeatures(gl, [info.render])\n // : decoded && !decoded.signed;\n\n return {\n supported,\n renderable: supported && checkTextureFeatures(gl, [info.render]),\n filterable: supported && checkTextureFeatures(gl, [info.filter]),\n blendable: false, // tod,\n storable: false\n };\n}\n\n/** Checks whether linear filtering (interpolated sampling) is available for floating point textures */\nexport function isTextureFormatFilterable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n try {\n const decoded = decodeTextureFormat(format);\n if (decoded.signed) {\n return false;\n }\n } catch {\n return false;\n }\n if (format.endsWith('32float')) {\n return Boolean(gl.getExtension('OES_texture_float_linear'));\n }\n if (format.endsWith('16float')) {\n return Boolean(gl.getExtension('OES_texture_half_float_linear'));\n }\n // if (typeof format === 'string') {\n // if (format === 'rgba32float') {\n // return gl.device.features.has('texture-renderable-rgba32float-webgl');\n // }\n // if (format.endsWith('32float')) {\n // return gl.device.features.has('texture-renderable-float32-webgl');\n // }\n // if (format.endsWith('16float')) {\n // return gl.device.features.has('texture-renderable-float16-webgl');\n // }\n // }\n return true;\n}\n\nexport function isTextureFormatRenderable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n if (typeof format === 'number') {\n return false; // isTextureFormatFilterableWebGL(gl, format);\n }\n // TODO depends on device...\n return true;\n}\n\nexport function getWebGLTextureParameters(formatOrGL: TextureFormat | GL, isWebGL2: boolean) {\n const format = convertGLToTextureFormat(formatOrGL);\n const webglFormat = convertTextureFormatToGL(format, isWebGL2);\n const decoded = decodeTextureFormat(format);\n return {\n format: webglFormat,\n dataFormat: getWebGLPixelDataFormat(\n decoded.format,\n decoded.integer,\n decoded.normalized,\n webglFormat\n ),\n type: getWebGLDataType(decoded.dataType),\n // @ts-expect-error\n compressed: decoded.compressed\n };\n}\n\nexport function getDepthStencilAttachmentWebGL(\n format: TextureFormat\n): GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT {\n const info = TEXTURE_FORMATS[format];\n if (!info?.attachment) {\n throw new Error(`${format} is not a depth stencil format`);\n }\n return info.attachment;\n}\n\n/**\n * function to test if Float 32 bit format texture can be bound as color attachment\n * @todo Generalize to check arbitrary formats?\n */\nexport function _checkFloat32ColorAttachment(\n gl: WebGLRenderingContext,\n internalFormat = gl.RGBA,\n srcFormat = GL.RGBA,\n srcType = GL.UNSIGNED_BYTE\n) {\n let texture: WebGLTexture | null = null;\n let framebuffer: WebGLFramebuffer | null = null;\n try {\n texture = gl.createTexture();\n gl.bindTexture(GL.TEXTURE_2D, texture);\n\n const level = 0;\n const width = 1;\n const height = 1;\n const border = 0;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n width,\n height,\n border,\n srcFormat,\n srcType,\n pixel\n );\n\n 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\n gl.bindTexture(GL.TEXTURE_2D, null);\n return status;\n } finally {\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(framebuffer);\n }\n}\n\n/** TODO - VERY roundabout legacy way of calculating bytes per pixel */\nexport function getTextureFormatBytesPerPixel(\n formatOrGL: TextureFormat | GL,\n isWebGL2: boolean\n): number {\n const format = convertGLToTextureFormat(formatOrGL);\n const params = getWebGLTextureParameters(format, isWebGL2);\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;\n const channelSize = TYPE_SIZES[params.type] || 1;\n return channels * channelSize;\n}\n\n// DATA TYPE HELPERS\n\nfunction getWebGLPixelDataFormat(\n dataFormat: string,\n integer: boolean,\n normalized: boolean,\n format: GL\n): GL {\n // WebGL1 formats use same internalFormat\n if (format === GL.RGBA || format === GL.RGB) {\n return format;\n }\n // prettier-ignore\n switch (dataFormat) {\n case 'r': return integer && !normalized ? GL.RED_INTEGER : GL.RED;\n case 'rg': return integer && !normalized ? GL.RG_INTEGER : GL.RG;\n case 'rgb': return integer && !normalized ? GL.RGB_INTEGER : GL.RGB;\n case 'rgba': return integer && !normalized ? GL.RGBA_INTEGER : GL.RGBA;\n default: return GL.RGBA;\n }\n}\n\nexport function getWebGLDataType(dataType: string): GL {\n // prettier-ignore\n switch (dataType) {\n case 'uint8': return GL.UNSIGNED_BYTE;\n case 'sint8': return GL.BYTE;\n case 'uint16': return GL.UNSIGNED_SHORT;\n case 'sint16': return GL.SHORT;\n case 'uint32': return GL.UNSIGNED_INT;\n case 'sint32': return GL.INT;\n case 'float16': return GL.HALF_FLOAT;\n case 'float32': return GL.FLOAT;\n default: return GL.UNSIGNED_BYTE;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"texture-formats.js","names":["decodeTextureFormat","GL","isWebGL2","getGLFromVertexType","texture_compression_bc","texture_compression_astc","texture_compression_etc2","texture_compression_etc1_webgl","texture_compression_pvrtc_webgl","texture_compression_atc_webgl","X_S3TC","X_S3TC_SRGB","X_RGTC","X_BPTC","X_ETC2","X_ASTC","X_ETC1","X_PVRTC","X_ATC","EXT_SRGB","EXT_TEXTURE_NORM16","EXT_FLOAT_WEBGL1","EXT_FLOAT_RENDER_WEBGL2","checkExtension","gl","extension","getExtension","checkExtensions","extensions","every","TEXTURE_FEATURE_CHECKS","checkTextureFeature","feature","_TEXTURE_FEATURE_CHEC","call","checkTextureFeatures","features","getTextureFeatures","textureFeatures","Object","keys","filter","TEXTURE_FORMATS","RGB","gl1","b","c","bpp","dataFormat","types","UNSIGNED_BYTE","UNSIGNED_SHORT_5_6_5","RGBA","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","R8","renderbuffer","R8_SNORM","R8UI","R8I","RG8","RG8_SNORM","RG8UI","RG8I","R16UI","R16I","R16F","render","R16_EXT","f","x","R16_SNORM_EXT","RGBA4","wgpu","RGB565","RGB5_A1","RGB8","RGB8_SNORM","RGBA8","SRGB8_ALPHA8","SRGB_ALPHA_EXT","gl1ext","RGBA8_SNORM","RGBA8UI","RGBA8I","RG16UI","RG16I","RG16F","RG16_EXT","RG16_SNORM_EXT","R32UI","R32I","R32F","RGB9_E5","p","R11F_G11F_B10F","RGB10_A2","RGB10_A2UI","RGB16_EXT","RGB16_SNORM_EXT","RG32UI","RG32I","RG32F","RGBA16UI","RGBA16I","RGBA16F","RGBA16_EXT","RGBA16_SNORM_EXT","RGB32F","gl2ext","FLOAT","RGBA32UI","RGBA32I","RGBA32F","STENCIL_INDEX8","attachment","STENCIL_ATTACHMENT","DEPTH_COMPONENT16","DEPTH_ATTACHMENT","DEPTH_COMPONENT24","DEPTH_COMPONENT32F","DEPTH_STENCIL","DEPTH_STENCIL_ATTACHMENT","depthTexture","DEPTH24_STENCIL8","DEPTH32F_STENCIL8","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_SRGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT","COMPRESSED_RED_RGTC1_EXT","COMPRESSED_SIGNED_RED_RGTC1_EXT","COMPRESSED_RED_GREEN_RGTC2_EXT","COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT","COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT","COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT","COMPRESSED_RGBA_BPTC_UNORM_EXT","COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT","COMPRESSED_RGB8_ETC2","COMPRESSED_SRGB8_ETC2","COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2","COMPRESSED_RGBA8_ETC2_EAC","COMPRESSED_SRGB8_ALPHA8_ETC2_EAC","COMPRESSED_R11_EAC","COMPRESSED_SIGNED_R11_EAC","COMPRESSED_RG11_EAC","COMPRESSED_SIGNED_RG11_EAC","COMPRESSED_RGBA_ASTC_4x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR","COMPRESSED_RGBA_ASTC_5x4_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR","COMPRESSED_RGBA_ASTC_5x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR","COMPRESSED_RGBA_ASTC_6x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR","COMPRESSED_RGBA_ASTC_6x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR","COMPRESSED_RGBA_ASTC_8x5_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR","COMPRESSED_RGBA_ASTC_8x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR","COMPRESSED_RGBA_ASTC_8x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR","COMPRESSED_RGBA_ASTC_10x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR","COMPRESSED_RGBA_ASTC_10x6_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR","COMPRESSED_RGBA_ASTC_10x8_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR","COMPRESSED_RGBA_ASTC_12x10_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR","COMPRESSED_RGBA_ASTC_12x12_KHR","COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","COMPRESSED_RGB_ATC_WEBGL","COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","DATA_FORMAT_CHANNELS","RED","RED_INTEGER","RG","RG_INTEGER","RGB_INTEGER","RGBA_INTEGER","DEPTH_COMPONENT","ALPHA","LUMINANCE","LUMINANCE_ALPHA","TYPE_SIZES","UNSIGNED_INT","INT","UNSIGNED_SHORT","SHORT","HALF_FLOAT","BYTE","isTextureFormatSupported","formatOrGL","format","convertGLToTextureFormat","info","undefined","Boolean","isRenderbufferFormatSupported","_TEXTURE_FORMATS$form","entry","entries","find","_ref","Error","concat","convertTextureFormatToGL","formatInfo","webglFormat","getTextureFormatSupport","supported","renderable","filterable","blendable","storable","isTextureFormatFilterable","decoded","signed","endsWith","isTextureFormatRenderable","getWebGLTextureParameters","getWebGLPixelDataFormat","integer","normalized","type","dataType","compressed","getDepthStencilAttachmentWebGL","_checkFloat32ColorAttachment","internalFormat","arguments","length","srcFormat","srcType","texture","framebuffer","createTexture","bindTexture","TEXTURE_2D","level","width","height","border","pixel","Uint8Array","texImage2D","createFramebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","status","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","deleteTexture","deleteFramebuffer","getTextureFormatBytesPerPixel","params","channels","channelSize"],"sources":["../../../src/adapter/converters/texture-formats.ts"],"sourcesContent":["import type {TextureFormat, DeviceFeature} from '@luma.gl/core';\nimport {decodeTextureFormat} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport { getGLFromVertexType } from './vertex-formats';\n\n/* eslint-disable camelcase */\n\n// TEXTURE FEATURES\n\n// Define local device feature strings to optimize minification\nconst texture_compression_bc: DeviceFeature = 'texture-compression-bc';\nconst texture_compression_astc: DeviceFeature = 'texture-compression-astc';\nconst texture_compression_etc2: DeviceFeature = 'texture-compression-etc2';\nconst texture_compression_etc1_webgl: DeviceFeature = 'texture-compression-etc1-webgl';\nconst texture_compression_pvrtc_webgl: DeviceFeature = 'texture-compression-pvrtc-webgl';\nconst texture_compression_atc_webgl: DeviceFeature = 'texture-compression-atc-webgl';\n\n// Define local webgl extension strings to optimize minification\nconst X_S3TC = 'WEBGL_compressed_texture_s3tc'; // BC1, BC2, BC3\nconst X_S3TC_SRGB = 'WEBGL_compressed_texture_s3tc_srgb'; // BC1, BC2, BC3\nconst X_RGTC = 'EXT_texture_compression_rgtc'; // BC4, BC5\nconst X_BPTC = 'EXT_texture_compression_bptc'; // BC6, BC7\nconst X_ETC2 = 'WEBGL_compressed_texture_etc'; // Renamed from 'WEBGL_compressed_texture_es3'\nconst X_ASTC = 'WEBGL_compressed_texture_astc';\nconst X_ETC1 = 'WEBGL_compressed_texture_etc1';\nconst X_PVRTC = 'WEBGL_compressed_texture_pvrtc';\nconst X_ATC = 'WEBGL_compressed_texture_atc';\n\n// Define local webgl extension strings to optimize minification\nconst EXT_SRGB = 'EXT_sRGB'; // https://developer.mozilla.org/en-US/docs/Web/API/EXT_sRGB\nconst EXT_TEXTURE_NORM16 = 'EXT_texture_norm16';\nconst EXT_FLOAT_WEBGL1 = 'WEBGL_color_buffer_float';\nconst EXT_FLOAT_RENDER_WEBGL2 = 'EXT_color_buffer_float';\n// const EXT_HALF_FLOAT_WEBGL1 = 'EXT_color_buffer_half_float';\n// const DEPTH = 'WEBGL_depth_texture';\n\nconst checkExtension = (gl: WebGLRenderingContext, extension: string): boolean =>\n gl.getExtension(extension);\nconst checkExtensions = (gl: WebGLRenderingContext, extensions: string[]): boolean =>\n extensions.every(extension => gl.getExtension(extension));\n\n// prettier-ignore\nconst TEXTURE_FEATURE_CHECKS: Partial<Record<DeviceFeature, (gl: WebGLRenderingContext) => boolean> > = {\n 'texture-blend-float-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'EXT_float_blend'),\n 'texture-formats-srgb-webgl1': (gl) => (isWebGL2(gl) ? true : checkExtension(gl, EXT_SRGB)),\n 'texture-formats-depth-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'WEBGL_depth_texture'),\n 'texture-formats-float32-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_float'),\n 'texture-formats-float16-webgl1': (gl) => isWebGL2(gl) ? true : checkExtension(gl, 'OES_texture_half_float'),\n 'texture-formats-norm16-webgl': (gl) => isWebGL2(gl) ? checkExtension(gl, EXT_TEXTURE_NORM16) : false,\n 'texture-filter-linear-float32-webgl': (gl) => checkExtension(gl, 'OES_texture_float_linear'),\n 'texture-filter-linear-float16-webgl': (gl) => checkExtension(gl, 'OES_texture_half_float_linear'),\n 'texture-filter-anisotropic-webgl': (gl) => checkExtension(gl, 'EXT_texture_filter_anisotropic'),\n 'texture-renderable-float32-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_float'), // [false, 'EXT_color_buffer_float'],\n 'texture-renderable-float16-webgl': (gl) => checkExtension(gl, 'EXT_color_buffer_half_float'),\n\n 'texture-compression-bc': (gl) => checkExtensions(gl, [X_S3TC, X_S3TC_SRGB, X_RGTC, X_BPTC]),\n 'texture-compression-bc5-webgl': (gl) => checkExtensions(gl, [X_RGTC]),\n // 'texture-compression-bc7-webgl': gl => checkExtensions(gl, [X_BPTC]),\n // 'texture-compression-bc3-srgb-webgl': gl => checkExtensions(gl, [X_S3TC_SRGB]),\n // 'texture-compression-bc3-webgl': gl => checkExtensions(gl, [X_S3TC]),\n 'texture-compression-etc2': (gl) => checkExtensions(gl, [X_ETC2]),\n 'texture-compression-astc': (gl) => checkExtensions(gl, [X_ASTC]),\n 'texture-compression-etc1-webgl': (gl) => checkExtensions(gl, [X_ETC1]),\n 'texture-compression-pvrtc-webgl': (gl) => checkExtensions(gl, [X_PVRTC]),\n 'texture-compression-atc-webgl': (gl) => checkExtensions(gl, [X_ATC])\n};\n\nexport function checkTextureFeature(gl: WebGLRenderingContext, feature: DeviceFeature): boolean {\n return TEXTURE_FEATURE_CHECKS[feature]?.(gl) || false;\n}\n\nconst checkTextureFeatures = (gl: WebGLRenderingContext, features: DeviceFeature[]): boolean =>\n features.every(feature => checkTextureFeature(gl, feature));\n\n/** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */\nexport function getTextureFeatures(gl: WebGLRenderingContext): DeviceFeature[] {\n const textureFeatures = Object.keys(TEXTURE_FEATURE_CHECKS) as DeviceFeature[];\n return textureFeatures.filter(feature => checkTextureFeature(gl, feature));\n}\n\n// TEXTURE FORMATS\n\n/** Map a format to webgl and constants */\ntype Format = {\n gl?: GL;\n /** If a different unsized format is needed in WebGL1 */\n gl1?: GL;\n gl1ext?: string;\n /** format requires WebGL2, when using a WebGL 1 context, color renderbuffer formats are limited */\n gl2ext?: string;\n\n /** (bytes per pixel), for memory usage calculations. */\n b?: number;\n /** channels */\n c?: number;\n bpp?: number;\n /** packed */\n p?: number;\n /** compressed */\n x?: string;\n /** for compressed texture formats */\n f?: DeviceFeature;\n /** renderable if feature is present */\n render?: DeviceFeature;\n /** filterable if feature is present */\n filter?: DeviceFeature;\n\n /** If not supported on WebGPU */\n wgpu?: false;\n\n types?: number[];\n\n dataFormat?: GL;\n /** Depth and stencil format attachment points. If set, needs to be a Renderbuffer unless depthTexture is set */\n attachment?: GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;\n /** if depthTexture is set this is a depth/stencil format that can be set to a texture */\n depthTexture?: boolean;\n\n renderbuffer?: boolean\n};\n\n// TABLES\n\n/** \n * Texture format data -\n * Exported but can change without notice\n */\n// prettier-ignore\nexport const TEXTURE_FORMATS: Record<TextureFormat, Format> = {\n // Unsized formats that leave the precision up to the driver.\n // TODO - Fix bpp constants\n // 'r8unorm-unsized': {gl: GL.LUMINANCE, b: 4, c: 2, bpp: 4},\n 'rgb8unorm-unsized': {gl: GL.RGB, gl1: GL.RGB, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5]},\n 'rgba8unorm-unsized': {gl: GL.RGBA, gl1: GL.RGBA, b: 4, c: 2, bpp: 4,\n dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4, GL.UNSIGNED_SHORT_5_5_5_1]},\n // 'rgb8unorm-srgb-unsized': {gl: GL.SRGB_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n // 'rgba8unorm-srgb-unsized': {gl: GL.SRGB_ALPHA_EXT, b: 4, c: 2, bpp: 4, gl1Ext: SRGB},\n\n // 8-bit formats\n 'r8unorm': {gl: GL.R8, b: 1, c: 1, renderbuffer: true},\n 'r8snorm': {gl: GL.R8_SNORM, b: 1, c: 1},\n 'r8uint': {gl: GL.R8UI, b: 1, c: 1, renderbuffer: true},\n 'r8sint': {gl: GL.R8I, b: 1, c: 1, renderbuffer: true},\n\n // 16-bit formats\n 'rg8unorm': {gl: GL.RG8, b: 2, c: 2, renderbuffer: true},\n 'rg8snorm': {gl: GL.RG8_SNORM, b: 2, c: 2},\n 'rg8uint': {gl: GL.RG8UI, b: 2, c: 2, renderbuffer: true},\n 'rg8sint': {gl: GL.RG8I, b: 2, c: 2, renderbuffer: true},\n\n 'r16uint': {gl: GL.R16UI, b: 2, c: 1, renderbuffer: true},\n 'r16sint': {gl: GL.R16I, b: 2, c: 1, renderbuffer: true},\n 'r16float': {gl: GL.R16F, b: 2, c: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl', renderbuffer: true},\n 'r16unorm-webgl': {gl: GL.R16_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl', renderbuffer: true, x: EXT_TEXTURE_NORM16},\n 'r16snorm-webgl': {gl: GL.R16_SNORM_EXT, b:2, c:1, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // Packed 16-bit formats\n 'rgba4unorm-webgl': {gl: GL.RGBA4, b: 2, c: 4, wgpu: false, renderbuffer: true},\n 'rgb565unorm-webgl': {gl: GL.RGB565, b: 2, c: 4, wgpu: false, renderbuffer: true},\n 'rgb5a1unorm-webgl': {gl: GL.RGB5_A1, b: 2, c: 4, wgpu: false, renderbuffer: true},\n\n // 24-bit formats\n 'rgb8unorm-webgl': {gl: GL.RGB8, b: 3, c: 3, wgpu: false},\n 'rgb8snorm-webgl': {gl: GL.RGB8_SNORM, b: 3, c: 3, wgpu: false},\n\n // 32-bit formats \n 'rgba8unorm': {gl: GL.RGBA8, gl1: GL.RGBA, b: 4, c: 2, bpp: 4},\n 'rgba8unorm-srgb': {gl: GL.SRGB8_ALPHA8, gl1: GL.SRGB_ALPHA_EXT, b: 4, c: 4, gl1ext: EXT_SRGB, bpp: 4},\n 'rgba8snorm': {gl: GL.RGBA8_SNORM, b: 4, c: 4},\n 'rgba8uint': {gl: GL.RGBA8UI, b: 4, c: 4, bpp: 4},\n 'rgba8sint': {gl: GL.RGBA8I, b: 4, c: 4, bpp: 4},\n // reverse colors, webgpu only\n 'bgra8unorm': {b: 4, c: 4},\n 'bgra8unorm-srgb': {b: 4, c: 4},\n\n 'rg16uint': {gl: GL.RG16UI, b: 4, c: 1, bpp: 4},\n 'rg16sint': {gl: GL.RG16I, b: 4, c: 2, bpp: 4},\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n 'rg16float': {gl: GL.RG16F, bpp: 4, b: 4, c: 2, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl', renderbuffer: true},\n 'rg16unorm-webgl': {gl: GL.RG16_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n 'rg16snorm-webgl': {gl: GL.RG16_SNORM_EXT, b:2, c:2, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n 'r32uint': {gl: GL.R32UI, b: 4, c: 1, bpp: 4, renderbuffer: true},\n 'r32sint': {gl: GL.R32I, b: 4, c: 1, bpp: 4, renderbuffer: true},\n 'r32float': {gl: GL.R32F, bpp: 4, b: 4, c: 1, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl'},\n\n // Packed 32-bit formats\n 'rgb9e5ufloat': {gl: GL.RGB9_E5, b: 4, c: 3, p: 1, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rg11b10ufloat': {gl: GL.R11F_G11F_B10F, b: 4, c: 3, p: 1,render: 'texture-renderable-float32-webgl', renderbuffer: true},\n 'rgb10a2unorm': {gl: GL.RGB10_A2, b: 4, c: 4, p: 1, renderbuffer: true},\n // webgl2 only\n 'rgb10a2unorm-webgl': {b: 4, c: 4, gl: GL.RGB10_A2UI, p: 1, wgpu: false, bpp: 4, renderbuffer: true},\n\n // 48-bit formats\n 'rgb16unorm-webgl': {gl: GL.RGB16_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n 'rgb16snorm-webgl': {gl: GL.RGB16_SNORM_EXT, b:2, c:3, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // 64-bit formats\n 'rg32uint': {gl: GL.RG32UI, b: 8, c: 2, renderbuffer: true},\n 'rg32sint': {gl: GL.RG32I, b: 8, c: 2, renderbuffer: true},\n 'rg32float': {gl: GL.RG32F, b: 8, c: 2, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl', renderbuffer: true},\n 'rgba16uint': {gl: GL.RGBA16UI, b: 8, c: 4, renderbuffer: true},\n 'rgba16sint': {gl: GL.RGBA16I, b: 8, c: 4, renderbuffer: true},\n 'rgba16float': {gl: GL.RGBA16F, gl1: GL.RGBA, b: 8, c: 4, render: 'texture-renderable-float16-webgl', filter: 'texture-filter-linear-float16-webgl'},\n 'rgba16unorm-webgl': {gl: GL.RGBA16_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl', renderbuffer: true, x: EXT_TEXTURE_NORM16},\n 'rgba16snorm-webgl': {gl: GL.RGBA16_SNORM_EXT, b:2, c:4, f: 'texture-formats-norm16-webgl', x: EXT_TEXTURE_NORM16},\n\n // 96-bit formats (deprecated!)\n 'rgb32float-webgl': {gl: GL.RGB32F, gl1: GL.RGB, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl',\n gl2ext: EXT_FLOAT_RENDER_WEBGL2, gl1ext: EXT_FLOAT_WEBGL1, // WebGL1 render buffers are supported with GL.RGB32F\n dataFormat: GL.RGB, types: [GL.FLOAT]},\n \n // 128-bit formats\n 'rgba32uint': {gl: GL.RGBA32UI, b: 16, c: 4, renderbuffer: true},\n 'rgba32sint': {gl: GL.RGBA32I, b: 16, c: 4, renderbuffer: true},\n 'rgba32float': {gl: GL.RGBA32F, b: 16, c: 4, render: 'texture-renderable-float32-webgl', filter: 'texture-filter-linear-float32-webgl', renderbuffer: true},\n\n // Depth and stencil formats\n 'stencil8': {gl: GL.STENCIL_INDEX8, gl1: GL.STENCIL_INDEX8, b: 1, c: 1, attachment: GL.STENCIL_ATTACHMENT, renderbuffer: true}, // 8 stencil bits\n\n 'depth16unorm': {gl: GL.DEPTH_COMPONENT16, gl1: GL.DEPTH_COMPONENT16, b: 2, c: 1, attachment: GL.DEPTH_ATTACHMENT, renderbuffer: true}, // 16 depth bits\n 'depth24plus': {gl: GL.DEPTH_COMPONENT24, b: 3, c: 1, attachment: GL.DEPTH_ATTACHMENT},\n 'depth32float': {gl: GL.DEPTH_COMPONENT32F, b: 4, c: 1, attachment: GL.DEPTH_ATTACHMENT, renderbuffer: true},\n\n // The depth component of the \"depth24plus\" and \"depth24plus-stencil8\" formats may be implemented as either a 24-bit depth value or a \"depth32float\" value.\n 'depth24plus-stencil8': {gl: GL.DEPTH_STENCIL, gl1: GL.DEPTH_STENCIL, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true, depthTexture: true},\n // \"depth24unorm-stencil8\" feature\n 'depth24unorm-stencil8': {gl: GL.DEPTH24_STENCIL8, b: 4, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true},\n // \"depth32float-stencil8\" feature\n 'depth32float-stencil8': {gl: GL.DEPTH32F_STENCIL8, b: 5, c: 2, p: 1, attachment: GL.DEPTH_STENCIL_ATTACHMENT, renderbuffer: true},\n\n // BC compressed formats: check device.features.has(\"texture-compression-bc\");\n\n 'bc1-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgb-unorm-srgb-webgl': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n\n 'bc1-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT1_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc1-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_S3TC_DXT1_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc2-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT3_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc2-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc3-rgba-unorm': {gl: GL.COMPRESSED_RGBA_S3TC_DXT5_EXT, x: X_S3TC, f: texture_compression_bc},\n 'bc3-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, x: X_S3TC_SRGB, f: texture_compression_bc},\n 'bc4-r-unorm': {gl: GL.COMPRESSED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc4-r-snorm': {gl: GL.COMPRESSED_SIGNED_RED_RGTC1_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-unorm': {gl: GL.COMPRESSED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc5-rg-snorm': {gl: GL.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT, x: X_RGTC, f: texture_compression_bc},\n 'bc6h-rgb-ufloat': {gl: GL.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc6h-rgb-float': {gl: GL.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm': {gl: GL.COMPRESSED_RGBA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n 'bc7-rgba-unorm-srgb': {gl: GL.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT, x: X_BPTC, f: texture_compression_bc},\n\n // WEBGL_compressed_texture_etc: device.features.has(\"texture-compression-etc2\")\n // Note: Supposedly guaranteed availability compressed formats in WebGL2, but through CPU decompression\n\n 'etc2-rgb8unorm': {gl: GL.COMPRESSED_RGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm': {gl: GL.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgb8a1unorm-srgb': {gl: GL.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, f: texture_compression_etc2},\n 'etc2-rgba8unorm': {gl: GL.COMPRESSED_RGBA8_ETC2_EAC, f: texture_compression_etc2},\n 'etc2-rgba8unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, f: texture_compression_etc2},\n\n 'eac-r11unorm': {gl: GL.COMPRESSED_R11_EAC, f: texture_compression_etc2},\n 'eac-r11snorm': {gl: GL.COMPRESSED_SIGNED_R11_EAC, f: texture_compression_etc2},\n 'eac-rg11unorm': {gl: GL.COMPRESSED_RG11_EAC, f: texture_compression_etc2},\n 'eac-rg11snorm': {gl: GL.COMPRESSED_SIGNED_RG11_EAC, f: texture_compression_etc2},\n\n // X_ASTC compressed formats: device.features.has(\"texture-compression-astc\")\n\n 'astc-4x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-4x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x4-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-5x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-6x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-8x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x5-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x6-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x8-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-10x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x10-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm': {gl: GL.COMPRESSED_RGBA_ASTC_12x12_KHR, f: texture_compression_astc},\n 'astc-12x12-unorm-srgb': {gl: GL.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, f: texture_compression_astc},\n\n // WEBGL_compressed_texture_pvrtc\n\n 'pvrtc-rgb4unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba4unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rbg2unorm-webgl': {gl: GL.COMPRESSED_RGB_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n 'pvrtc-rgba2unorm-webgl': {gl: GL.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, f: texture_compression_pvrtc_webgl},\n\n // WEBGL_compressed_texture_etc1\n\n 'etc1-rbg-unorm-webgl': {gl: GL.COMPRESSED_RGB_ETC1_WEBGL, f: texture_compression_etc1_webgl},\n\n // WEBGL_compressed_texture_atc\n\n 'atc-rgb-unorm-webgl': {gl: GL.COMPRESSED_RGB_ATC_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgba-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL, f: texture_compression_atc_webgl},\n 'atc-rgbai-unorm-webgl': {gl: GL.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL, f: texture_compression_atc_webgl}\n};\n\n/** Legal combinations for internalFormat, format and type *\n// [GL.DEPTH_COMPONENT]: {types: [GL.UNSIGNED_SHORT, GL.UNSIGNED_INT, GL.UNSIGNED_INT_24_8], gl1ext: DEPTH},\n// [GL.DEPTH_STENCIL]: {gl1ext: DEPTH},\n// Sized texture format\n// R\n[GL.R8]: {dataFormat: GL.RED, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.R16F]: {dataFormat: GL.RED, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.R8UI]: {dataFormat: GL.RED_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RG\n[GL.RG8]: {dataFormat: GL.RG, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.RG16F]: {dataFormat: GL.RG, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RG8UI]: {dataFormat: GL.RG_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGB\n[GL.RGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB16F]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGB8UI]: {dataFormat: GL.RGB_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true},\n// // RGBA\n\n[GL.RGB565]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_6_5], gl2: true},\n[GL.R11F_G11F_B10F]: {dataFormat: GL.RGB, types: [GL.UNSIGNED_INT_10F_11F_11F_REV, GL.HALF_FLOAT, GL.FLOAT], gl2: true},\n[GL.RGB9_E5]: {dataFormat: GL.RGB, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true},\n[GL.SRGB8_ALPHA8]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE], gl2: true, gl1ext: EXT_SRGB},\n[GL.RGB5_A1]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_5_5_5_1], gl2: true},\n[GL.RGBA4]: {dataFormat: GL.RGBA, types: [GL.UNSIGNED_BYTE, GL.UNSIGNED_SHORT_4_4_4_4], gl2: true},\n[GL.RGBA16F]: {dataFormat: GL.RGBA, types: [GL.HALF_FLOAT, GL.FLOAT], gl2: true, gl1ext: EXT_HALF_FLOAT_WEBGL1},\n[GL.RGBA8UI]: {dataFormat: GL.RGBA_INTEGER, types: [GL.UNSIGNED_BYTE], gl2: true}\n*/\n\n/* This table is now baked into the above table\ntype RenderbufferFormat = {\n bpp: number;\n gl2?: boolean;\n ext?: string;\n};\n\nexport const RENDERBUFFER_FORMATS: Record<string, RenderbufferFormat> = {\n [GL.DEPTH_COMPONENT16]: {bpp: 2}, // 16 depth bits.\n // TODO - Not clear which webgpu value to map this to.\n // [GL.DEPTH_COMPONENT24]: {gl2: true, bpp: 3},\n [GL.DEPTH_COMPONENT32F]: {gl2: true, bpp: 4},\n\n [GL.STENCIL_INDEX8]: {bpp: 1}, // 8 stencil bits.\n\n [GL.DEPTH_STENCIL]: {bpp: 4},\n [GL.DEPTH24_STENCIL8]: {gl2: true, bpp: 4},\n [GL.DEPTH32F_STENCIL8]: {gl2: true, bpp: 5},\n\n // When using a WebGL 1 context, color renderbuffer formats are limited\n [GL.RGBA4]: {gl2: true, bpp: 2},\n [GL.RGB565]: {gl2: true, bpp: 2},\n [GL.RGB5_A1]: {gl2: true, bpp: 2},\n\n // When using a WebGL 2 context, the following values are available additionally:\n [GL.R8]: {gl2: true, bpp: 1},\n [GL.R8UI]: {gl2: true, bpp: 1},\n [GL.R8I]: {gl2: true, bpp: 1},\n [GL.R16UI]: {gl2: true, bpp: 2},\n [GL.R16I]: {gl2: true, bpp: 2},\n [GL.R32UI]: {gl2: true, bpp: 4},\n [GL.R32I]: {gl2: true, bpp: 4},\n [GL.RG8]: {gl2: true, bpp: 2},\n [GL.RG8UI]: {gl2: true, bpp: 2},\n [GL.RG8I]: {gl2: true, bpp: 2},\n [GL.RG16UI]: {gl2: true, bpp: 4},\n [GL.RG16I]: {gl2: true, bpp: 4},\n [GL.RG32UI]: {gl2: true, bpp: 8},\n [GL.RG32I]: {gl2: true, bpp: 8},\n [GL.RGB8]: {gl2: true, bpp: 3},\n [GL.RGBA8]: {gl2: true, bpp: 4},\n // [GL.SRGB8_ALPHA8]: {gl2: true, gl1: SRGB}, // When using the EXT_sRGB WebGL1 extension\n [GL.RGB10_A2]: {gl2: true, bpp: 4},\n [GL.RGBA8UI]: {gl2: true, bpp: 4},\n [GL.RGBA8I]: {gl2: true, bpp: 4},\n [GL.RGB10_A2UI]: {gl2: true, bpp: 4},\n [GL.RGBA16UI]: {gl2: true, bpp: 8},\n [GL.RGBA16I]: {gl2: true, bpp: 8},\n [GL.RGBA32I]: {gl2: true, bpp: 16},\n [GL.RGBA32UI]: {gl2: true, bpp: 16},\n\n // When using a WebGL 2 context and the EXT_color_buffer_float WebGL2 extension\n [GL.R16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 2},\n [GL.RG16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RGBA16F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},\n [GL.R32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4},\n [GL.RG32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 8},\n // TODO - can't get WEBGL_color_buffer_float to work on renderbuffers\n [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, bpp: 16},\n // [GL.RGBA32F]: {ext: EXT_FLOAT_WEBGL2, gl1: EXT_FLOAT_WEBGL1},\n [GL.R11F_G11F_B10F]: {ext: EXT_FLOAT_WEBGL2, bpp: 4}\n};\n*/\n\n/** @deprecated should be removed */\nconst DATA_FORMAT_CHANNELS = {\n [GL.RED]: 1,\n [GL.RED_INTEGER]: 1,\n [GL.RG]: 2,\n [GL.RG_INTEGER]: 2,\n [GL.RGB]: 3,\n [GL.RGB_INTEGER]: 3,\n [GL.RGBA]: 4,\n [GL.RGBA_INTEGER]: 4,\n [GL.DEPTH_COMPONENT]: 1,\n [GL.DEPTH_STENCIL]: 1,\n [GL.ALPHA]: 1,\n [GL.LUMINANCE]: 1,\n [GL.LUMINANCE_ALPHA]: 2\n};\n\n/** @deprecated should be removed */\nconst TYPE_SIZES = {\n [GL.FLOAT]: 4,\n [GL.UNSIGNED_INT]: 4,\n [GL.INT]: 4,\n [GL.UNSIGNED_SHORT]: 2,\n [GL.SHORT]: 2,\n [GL.HALF_FLOAT]: 2,\n [GL.BYTE]: 1,\n [GL.UNSIGNED_BYTE]: 1\n};\n\n// FUNCTIONS\n\n/** Checks if a texture format is supported */\nexport function isTextureFormatSupported(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return false;\n }\n // Check that we have a GL constant\n if (isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined) {\n return false;\n }\n // Check extensions\n const extension = info.x || (isWebGL2(gl) ? info.gl2ext || info.gl1ext : info.gl1ext);\n if (extension) {\n return Boolean(gl.getExtension(extension));\n }\n // if (info.gl1 === undefined && info.gl2 === undefined) {\n // // No info - always supported\n // }\n return true;\n}\n\nexport function isRenderbufferFormatSupported(gl: WebGLRenderingContext, format: TextureFormat): boolean {\n // Note: Order is important since the function call initializes extensions.\n return isTextureFormatSupported(gl, format) && TEXTURE_FORMATS[format]?.renderbuffer;\n}\n\n/**\n * Map WebGL texture formats (GL constants) to WebGPU-style TextureFormat strings\n */\nexport function convertGLToTextureFormat(format: GL | TextureFormat): TextureFormat {\n if (typeof format === 'string') {\n return format;\n }\n const entry = Object.entries(TEXTURE_FORMATS).find(\n ([, entry]) => entry.gl === format || entry.gl1 === format\n );\n if (!entry) {\n throw new Error(`Unknown texture format ${format}`);\n }\n return entry[0] as TextureFormat;\n}\n\n/**\n * Map WebGPU style texture format strings to GL constants\n */\nexport function convertTextureFormatToGL(format: TextureFormat, isWebGL2: boolean): GL | undefined {\n const formatInfo = TEXTURE_FORMATS[format];\n const webglFormat = isWebGL2 ? formatInfo?.gl : formatInfo?.gl1;\n if (webglFormat === undefined) {\n throw new Error(`Unsupported texture format ${format}`);\n }\n return webglFormat;\n}\n\n/** Checks if a texture format is supported */\nexport function getTextureFormatSupport(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): {\n supported: boolean;\n filterable?: boolean;\n renderable?: boolean;\n blendable?: boolean;\n storable?: boolean;\n} {\n const format = convertGLToTextureFormat(formatOrGL);\n const info = TEXTURE_FORMATS[format];\n if (!info) {\n return {supported: false};\n }\n // let decoded;\n // try {\n // decoded = decodeTextureFormat(format);\n // } catch {}\n\n // Support Check that we have a GL constant\n let supported = isWebGL2(gl) ? info.gl === undefined : info.gl1 === undefined;\n supported = supported && checkTextureFeatures(gl, [info.f]);\n\n // Filtering\n // const filterable = info.filter\n // ? checkTextureFeatures(gl, [info.filter])\n // : decoded && !decoded.signed;\n // const renderable = info.filter\n // ? checkTextureFeatures(gl, [info.render])\n // : decoded && !decoded.signed;\n\n return {\n supported,\n renderable: supported && checkTextureFeatures(gl, [info.render]),\n filterable: supported && checkTextureFeatures(gl, [info.filter]),\n blendable: false, // tod,\n storable: false\n };\n}\n\n/** Checks whether linear filtering (interpolated sampling) is available for floating point textures */\nexport function isTextureFormatFilterable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n try {\n const decoded = decodeTextureFormat(format);\n if (decoded.signed) {\n return false;\n }\n } catch {\n return false;\n }\n if (format.endsWith('32float')) {\n return Boolean(gl.getExtension('OES_texture_float_linear'));\n }\n if (format.endsWith('16float')) {\n return Boolean(gl.getExtension('OES_texture_half_float_linear'));\n }\n // if (typeof format === 'string') {\n // if (format === 'rgba32float') {\n // return gl.device.features.has('texture-renderable-rgba32float-webgl');\n // }\n // if (format.endsWith('32float')) {\n // return gl.device.features.has('texture-renderable-float32-webgl');\n // }\n // if (format.endsWith('16float')) {\n // return gl.device.features.has('texture-renderable-float16-webgl');\n // }\n // }\n return true;\n}\n\nexport function isTextureFormatRenderable(\n gl: WebGLRenderingContext,\n formatOrGL: TextureFormat | GL\n): boolean {\n const format = convertGLToTextureFormat(formatOrGL);\n if (!isTextureFormatSupported(gl, format)) {\n return false;\n }\n if (typeof format === 'number') {\n return false; // isTextureFormatFilterableWebGL(gl, format);\n }\n // TODO depends on device...\n return true;\n}\n\nexport function getWebGLTextureParameters(formatOrGL: TextureFormat | GL, isWebGL2: boolean) {\n const format = convertGLToTextureFormat(formatOrGL);\n const webglFormat = convertTextureFormatToGL(format, isWebGL2);\n const decoded = decodeTextureFormat(format);\n return {\n format: webglFormat,\n dataFormat: getWebGLPixelDataFormat(\n decoded.format,\n decoded.integer,\n decoded.normalized,\n webglFormat\n ),\n // depth formats don't have a type\n type: decoded.dataType ? getGLFromVertexType(decoded.dataType) : GL.UNSIGNED_BYTE,\n // @ts-expect-error\n compressed: decoded.compressed\n };\n}\n\nexport function getDepthStencilAttachmentWebGL(\n format: TextureFormat\n): GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT {\n const info = TEXTURE_FORMATS[format];\n if (!info?.attachment) {\n throw new Error(`${format} is not a depth stencil format`);\n }\n return info.attachment;\n}\n\n/**\n * function to test if Float 32 bit format texture can be bound as color attachment\n * @todo Generalize to check arbitrary formats?\n */\nexport function _checkFloat32ColorAttachment(\n gl: WebGLRenderingContext,\n internalFormat = gl.RGBA,\n srcFormat = GL.RGBA,\n srcType = GL.UNSIGNED_BYTE\n) {\n let texture: WebGLTexture | null = null;\n let framebuffer: WebGLFramebuffer | null = null;\n try {\n texture = gl.createTexture();\n gl.bindTexture(GL.TEXTURE_2D, texture);\n\n const level = 0;\n const width = 1;\n const height = 1;\n const border = 0;\n const pixel = new Uint8Array([0, 0, 255, 255]); // opaque blue\n gl.texImage2D(\n gl.TEXTURE_2D,\n level,\n internalFormat,\n width,\n height,\n border,\n srcFormat,\n srcType,\n pixel\n );\n\n 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\n gl.bindTexture(GL.TEXTURE_2D, null);\n return status;\n } finally {\n gl.deleteTexture(texture);\n gl.deleteFramebuffer(framebuffer);\n }\n}\n\n/** TODO - VERY roundabout legacy way of calculating bytes per pixel */\nexport function getTextureFormatBytesPerPixel(\n formatOrGL: TextureFormat | GL,\n isWebGL2: boolean\n): number {\n const format = convertGLToTextureFormat(formatOrGL);\n const params = getWebGLTextureParameters(format, isWebGL2);\n // NOTE(Tarek): Default to RGBA bytes\n const channels = DATA_FORMAT_CHANNELS[params.dataFormat] || 4;\n const channelSize = TYPE_SIZES[params.type] || 1;\n return channels * channelSize;\n}\n\n// DATA TYPE HELPERS\n\nfunction getWebGLPixelDataFormat(\n dataFormat: string,\n integer: boolean,\n normalized: boolean,\n format: GL\n): GL {\n // WebGL1 formats use same internalFormat\n if (format === GL.RGBA || format === GL.RGB) {\n return format;\n }\n // prettier-ignore\n switch (dataFormat) {\n case 'r': return integer && !normalized ? GL.RED_INTEGER : GL.RED;\n case 'rg': return integer && !normalized ? GL.RG_INTEGER : GL.RG;\n case 'rgb': return integer && !normalized ? GL.RGB_INTEGER : GL.RGB;\n case 'rgba': return integer && !normalized ? GL.RGBA_INTEGER : GL.RGBA;\n default: return GL.RGBA;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { GL } from '@luma.gl/constants';
|
|
2
|
-
import { VertexFormat } from '@luma.gl/core';
|
|
3
|
-
|
|
2
|
+
import { VertexFormat, VertexType } from '@luma.gl/core';
|
|
3
|
+
type GLDataType = GL.UNSIGNED_BYTE | GL.BYTE | GL.UNSIGNED_SHORT | GL.SHORT | GL.UNSIGNED_INT | GL.INT | GL.HALF_FLOAT | GL.FLOAT;
|
|
4
|
+
/** Get vertex format from GL constants */
|
|
5
|
+
export declare function getVertexFormatFromGL(type: GLDataType, components: 1 | 2 | 3 | 4): VertexFormat;
|
|
6
|
+
/** Get data type from GL constants */
|
|
7
|
+
export declare function getVertexTypeFromGL(type: GLDataType, normalized?: boolean): VertexType;
|
|
8
|
+
export declare function getGLFromVertexType(dataType: VertexType): GL.UNSIGNED_BYTE | GL.BYTE | GL.UNSIGNED_SHORT | GL.SHORT | GL.UNSIGNED_INT | GL.INT | GL.HALF_FLOAT | GL.FLOAT;
|
|
9
|
+
export {};
|
|
4
10
|
//# sourceMappingURL=vertex-formats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-formats.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/vertex-formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"vertex-formats.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/vertex-formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAEvD,KAAK,UAAU,GACX,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,IAAI,GACP,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,KAAK,GACR,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,GAAG,GACN,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,KAAK,CAAC;AAGb,0CAA0C;AAC1C,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAa/F;AAED,sCAAsC;AACtC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,UAAQ,GAAG,UAAU,CAepF;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,UAAU,GAElB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,IAAI,GACP,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,KAAK,GACR,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,GAAG,GACN,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,KAAK,CAqBX"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { GL } from '@luma.gl/constants';
|
|
2
|
-
export function
|
|
3
|
-
const base =
|
|
2
|
+
export function getVertexFormatFromGL(type, components) {
|
|
3
|
+
const base = getVertexTypeFromGL(type);
|
|
4
4
|
switch (components) {
|
|
5
5
|
case 1:
|
|
6
6
|
return base;
|
|
@@ -10,20 +10,58 @@ export function getVertexFormat(type, components) {
|
|
|
10
10
|
return "".concat(base, "x3");
|
|
11
11
|
case 4:
|
|
12
12
|
return "".concat(base, "x4");
|
|
13
|
-
default:
|
|
14
|
-
throw new Error(String(components));
|
|
15
13
|
}
|
|
14
|
+
throw new Error(String(components));
|
|
16
15
|
}
|
|
17
|
-
function
|
|
16
|
+
export function getVertexTypeFromGL(type) {
|
|
17
|
+
let normalized = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
18
18
|
switch (type) {
|
|
19
19
|
case GL.INT:
|
|
20
|
-
return 'sint32';
|
|
20
|
+
return normalized ? 'sint32' : 'sint32';
|
|
21
21
|
case GL.UNSIGNED_INT:
|
|
22
|
-
return 'uint32';
|
|
22
|
+
return normalized ? 'uint32' : 'uint32';
|
|
23
|
+
case GL.SHORT:
|
|
24
|
+
return normalized ? 'sint16' : 'unorm16';
|
|
25
|
+
case GL.UNSIGNED_SHORT:
|
|
26
|
+
return normalized ? 'uint16' : 'unorm16';
|
|
27
|
+
case GL.BYTE:
|
|
28
|
+
return normalized ? 'sint8' : 'snorm16';
|
|
29
|
+
case GL.UNSIGNED_BYTE:
|
|
30
|
+
return normalized ? 'uint8' : 'unorm8';
|
|
23
31
|
case GL.FLOAT:
|
|
24
32
|
return 'float32';
|
|
25
|
-
|
|
26
|
-
|
|
33
|
+
case GL.HALF_FLOAT:
|
|
34
|
+
return 'float16';
|
|
27
35
|
}
|
|
36
|
+
throw new Error(String(type));
|
|
37
|
+
}
|
|
38
|
+
export function getGLFromVertexType(dataType) {
|
|
39
|
+
switch (dataType) {
|
|
40
|
+
case 'uint8':
|
|
41
|
+
return GL.UNSIGNED_BYTE;
|
|
42
|
+
case 'sint8':
|
|
43
|
+
return GL.BYTE;
|
|
44
|
+
case 'unorm8':
|
|
45
|
+
return GL.UNSIGNED_BYTE;
|
|
46
|
+
case 'snorm8':
|
|
47
|
+
return GL.BYTE;
|
|
48
|
+
case 'uint16':
|
|
49
|
+
return GL.UNSIGNED_SHORT;
|
|
50
|
+
case 'sint16':
|
|
51
|
+
return GL.SHORT;
|
|
52
|
+
case 'unorm16':
|
|
53
|
+
return GL.UNSIGNED_SHORT;
|
|
54
|
+
case 'snorm16':
|
|
55
|
+
return GL.SHORT;
|
|
56
|
+
case 'uint32':
|
|
57
|
+
return GL.UNSIGNED_INT;
|
|
58
|
+
case 'sint32':
|
|
59
|
+
return GL.INT;
|
|
60
|
+
case 'float16':
|
|
61
|
+
return GL.HALF_FLOAT;
|
|
62
|
+
case 'float32':
|
|
63
|
+
return GL.FLOAT;
|
|
64
|
+
}
|
|
65
|
+
throw new Error(String(dataType));
|
|
28
66
|
}
|
|
29
67
|
//# sourceMappingURL=vertex-formats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-formats.js","names":["GL","
|
|
1
|
+
{"version":3,"file":"vertex-formats.js","names":["GL","getVertexFormatFromGL","type","components","base","getVertexTypeFromGL","concat","Error","String","normalized","arguments","length","undefined","INT","UNSIGNED_INT","SHORT","UNSIGNED_SHORT","BYTE","UNSIGNED_BYTE","FLOAT","HALF_FLOAT","getGLFromVertexType","dataType"],"sources":["../../../src/adapter/converters/vertex-formats.ts"],"sourcesContent":["import {GL} from '@luma.gl/constants';\nimport {VertexFormat, VertexType} from '@luma.gl/core';\n\ntype GLDataType = \n | GL.UNSIGNED_BYTE\n | GL.BYTE\n | GL.UNSIGNED_SHORT\n | GL.SHORT\n | GL.UNSIGNED_INT\n | GL.INT\n | GL.HALF_FLOAT\n | GL.FLOAT;\n\n\n/** Get vertex format from GL constants */\nexport function getVertexFormatFromGL(type: GLDataType, components: 1 | 2 | 3 | 4): VertexFormat {\n const base = getVertexTypeFromGL(type);\n // prettier-ignore\n switch (components) {\n // @ts-expect-error TODO deal with lack of formats\n case 1: return base;\n case 2: return `${base}x2`;\n // @ts-expect-error TODO deal with lack of formats\n case 3: return `${base}x3`;\n case 4: return `${base}x4`;\n }\n // @ts-ignore unreachable\n throw new Error(String(components));\n}\n\n/** Get data type from GL constants */\nexport function getVertexTypeFromGL(type: GLDataType, normalized = false): VertexType {\n // prettier-ignore\n switch (type) {\n // WebGPU does not support normalized 32 bit integer attributes\n case GL.INT: return normalized ? 'sint32' : 'sint32';\n case GL.UNSIGNED_INT: return normalized ? 'uint32' : 'uint32';\n case GL.SHORT: return normalized ? 'sint16' : 'unorm16';\n case GL.UNSIGNED_SHORT: return normalized ? 'uint16' : 'unorm16';\n case GL.BYTE: return normalized ? 'sint8' : 'snorm16';\n case GL.UNSIGNED_BYTE: return normalized ? 'uint8' : 'unorm8';\n case GL.FLOAT: return 'float32';\n case GL.HALF_FLOAT: return 'float16';\n }\n // @ts-ignore unreachable\n throw new Error(String(type));\n}\n\nexport function getGLFromVertexType(\n dataType: VertexType\n):\n | GL.UNSIGNED_BYTE\n | GL.BYTE\n | GL.UNSIGNED_SHORT\n | GL.SHORT\n | GL.UNSIGNED_INT\n | GL.INT\n | GL.HALF_FLOAT\n | GL.FLOAT {\n // prettier-ignore\n switch (dataType) {\n case 'uint8': return GL.UNSIGNED_BYTE;\n case 'sint8': return GL.BYTE;\n case 'unorm8': return GL.UNSIGNED_BYTE;\n case 'snorm8': return GL.BYTE;\n case 'uint16': return GL.UNSIGNED_SHORT;\n case 'sint16': return GL.SHORT;\n case 'unorm16': return GL.UNSIGNED_SHORT;\n case 'snorm16': return GL.SHORT;\n case 'uint32': return GL.UNSIGNED_INT;\n case 'sint32': return GL.INT;\n // WebGPU does not support normalized 32 bit integer attributes\n // case 'unorm32': return GL.UNSIGNED_INT;\n // case 'snorm32': return GL.INT;\n case 'float16': return GL.HALF_FLOAT;\n case 'float32': return GL.FLOAT;\n }\n // @ts-ignore unreachable\n throw new Error(String(dataType));\n}\n"],"mappings":"AAAA,SAAQA,EAAE,QAAO,oBAAoB;AAerC,OAAO,SAASC,qBAAqBA,CAACC,IAAgB,EAAEC,UAAyB,EAAgB;EAC/F,MAAMC,IAAI,GAAGC,mBAAmB,CAACH,IAAI,CAAC;EAEtC,QAAQC,UAAU;IAEhB,KAAK,CAAC;MAAE,OAAOC,IAAI;IACnB,KAAK,CAAC;MAAE,UAAAE,MAAA,CAAUF,IAAI;IAEtB,KAAK,CAAC;MAAE,UAAAE,MAAA,CAAUF,IAAI;IACtB,KAAK,CAAC;MAAE,UAAAE,MAAA,CAAUF,IAAI;EACxB;EAEA,MAAM,IAAIG,KAAK,CAACC,MAAM,CAACL,UAAU,CAAC,CAAC;AACrC;AAGA,OAAO,SAASE,mBAAmBA,CAACH,IAAgB,EAAkC;EAAA,IAAhCO,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAEtE,QAAQR,IAAI;IAEV,KAAKF,EAAE,CAACa,GAAG;MAAE,OAAOJ,UAAU,GAAG,QAAQ,GAAG,QAAQ;IACpD,KAAKT,EAAE,CAACc,YAAY;MAAE,OAAOL,UAAU,GAAG,QAAQ,GAAG,QAAQ;IAC7D,KAAKT,EAAE,CAACe,KAAK;MAAE,OAAON,UAAU,GAAG,QAAQ,GAAG,SAAS;IACvD,KAAKT,EAAE,CAACgB,cAAc;MAAE,OAAOP,UAAU,GAAG,QAAQ,GAAG,SAAS;IAChE,KAAKT,EAAE,CAACiB,IAAI;MAAE,OAAOR,UAAU,GAAG,OAAO,GAAG,SAAS;IACrD,KAAKT,EAAE,CAACkB,aAAa;MAAE,OAAOT,UAAU,GAAG,OAAO,GAAG,QAAQ;IAC7D,KAAKT,EAAE,CAACmB,KAAK;MAAE,OAAO,SAAS;IAC/B,KAAKnB,EAAE,CAACoB,UAAU;MAAE,OAAO,SAAS;EACtC;EAEA,MAAM,IAAIb,KAAK,CAACC,MAAM,CAACN,IAAI,CAAC,CAAC;AAC/B;AAEA,OAAO,SAASmB,mBAAmBA,CACjCC,QAAoB,EAST;EAEX,QAAQA,QAAQ;IACd,KAAK,OAAO;MAAE,OAAOtB,EAAE,CAACkB,aAAa;IACrC,KAAK,OAAO;MAAE,OAAOlB,EAAE,CAACiB,IAAI;IAC5B,KAAK,QAAQ;MAAE,OAAOjB,EAAE,CAACkB,aAAa;IACtC,KAAK,QAAQ;MAAE,OAAOlB,EAAE,CAACiB,IAAI;IAC7B,KAAK,QAAQ;MAAE,OAAOjB,EAAE,CAACgB,cAAc;IACvC,KAAK,QAAQ;MAAE,OAAOhB,EAAE,CAACe,KAAK;IAC9B,KAAK,SAAS;MAAE,OAAOf,EAAE,CAACgB,cAAc;IACxC,KAAK,SAAS;MAAE,OAAOhB,EAAE,CAACe,KAAK;IAC/B,KAAK,QAAQ;MAAE,OAAOf,EAAE,CAACc,YAAY;IACrC,KAAK,QAAQ;MAAE,OAAOd,EAAE,CAACa,GAAG;IAI5B,KAAK,SAAS;MAAE,OAAOb,EAAE,CAACoB,UAAU;IACpC,KAAK,SAAS;MAAE,OAAOpB,EAAE,CAACmB,KAAK;EACjC;EAEA,MAAM,IAAIZ,KAAK,CAACC,MAAM,CAACc,QAAQ,CAAC,CAAC;AACnC"}
|