@luma.gl/webgl 9.0.0-alpha.46 → 9.0.0-alpha.48
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/LICENSE +34 -0
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +73 -40
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +60 -61
- package/dist/adapter/converters/sampler-parameters.js.map +1 -1
- package/dist/adapter/converters/shader-formats.js +12 -13
- package/dist/adapter/converters/shader-formats.js.map +1 -1
- package/dist/adapter/converters/texture-formats.js +179 -180
- package/dist/adapter/converters/texture-formats.js.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +20 -21
- package/dist/adapter/converters/vertex-formats.js.map +1 -1
- package/dist/adapter/device-helpers/device-features.js +2 -2
- package/dist/adapter/device-helpers/device-features.js.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +53 -54
- package/dist/adapter/device-helpers/device-limits.js.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +23 -12
- package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
- package/dist/adapter/helpers/decode-webgl-types.js +31 -32
- package/dist/adapter/helpers/decode-webgl-types.js.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +29 -30
- package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +16 -4
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +40 -41
- package/dist/adapter/helpers/set-uniform.js.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js +38 -39
- package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +5 -6
- package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +14 -15
- package/dist/adapter/resources/webgl-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +25 -26
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +22 -23
- package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +2 -3
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +7 -8
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +2 -3
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +3 -4
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +27 -28
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +5 -11
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js +16 -13
- package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.d.ts +2 -2
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +5 -6
- package/dist/adapter/resources/webgl-vertex-array.js.map +1 -1
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/classic/accessor.js +4 -5
- package/dist/classic/accessor.js.map +1 -1
- package/dist/classic/copy-and-blit.js +16 -17
- package/dist/classic/copy-and-blit.js.map +1 -1
- package/dist/classic/format-utils.js +14 -15
- package/dist/classic/format-utils.js.map +1 -1
- package/dist/classic/typed-array-utils.d.ts +2 -0
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +18 -19
- package/dist/classic/typed-array-utils.js.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +0 -1
- package/dist/context/debug/webgl-developer-tools.js.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +256 -257
- package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
- package/dist/context/polyfill/get-parameter-polyfill.js +34 -35
- package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
- package/dist/context/polyfill/polyfill-table.js +9 -10
- package/dist/context/polyfill/polyfill-table.js.map +1 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.js +17 -17
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
- package/dist/dist.dev.js +987 -2700
- package/dist/index.cjs +390 -267
- package/dist.min.js +39 -28
- package/package.json +5 -5
- package/src/adapter/converters/device-parameters.ts +40 -25
- package/src/adapter/device-helpers/get-device-info.ts +36 -8
- package/src/adapter/helpers/parse-shader-compiler-log.ts +21 -7
- package/src/adapter/resources/webgl-transform-feedback.ts +13 -16
- package/src/adapter/resources/webgl-vertex-array.ts +4 -3
- package/src/adapter/webgl-device.ts +3 -2
- package/src/classic/typed-array-utils.ts +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-shader-layout.js","names":["GL","isWebGL2","Accessor","decodeGLUniformType","decodeGLAttributeType","isSamplerUniform","getShaderLayout","gl","program","shaderLayout","attributes","bindings","readAttributeDeclarations","uniformBlocks","readUniformBlocks","uniformBlock","uniforms","map","uniform","name","format","byteOffset","byteStride","arrayLength","push","type","location","visibility","vertex","fragment","minBindingSize","byteLength","readUniformBindings","textureUnit","viewDimension","sampleType","getSamplerInfo","length","varyings","readVaryings","count","getProgramParameter","ACTIVE_ATTRIBUTES","index","activeInfo","getActiveAttrib","Error","compositeType","getAttribLocation","attributeType","stepMode","test","sort","a","b","gl2","TRANSFORM_FEEDBACK_VARYINGS","getTransformFeedbackVarying","size","glType","components","accessor","varying","uniformCount","ACTIVE_UNIFORMS","i","getActiveUniform","rawName","isArray","parseUniformName","webglLocation","getUniformLocation","uniformInfo","j","elementName","arrayElementUniformInfo","getBlockParameter","blockIndex","pname","getActiveUniformBlockParameter","blockCount","ACTIVE_UNIFORM_BLOCKS","blockInfo","getActiveUniformBlockName","UNIFORM_BLOCK_BINDING","UNIFORM_BLOCK_DATA_SIZE","UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER","UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER","UNIFORM_BLOCK_ACTIVE_UNIFORMS","uniformIndices","UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES","uniformType","getActiveUniforms","UNIFORM_TYPE","uniformArrayLength","UNIFORM_SIZE","uniformOffset","UNIFORM_OFFSET","uniformStride","UNIFORM_ARRAY_STRIDE","SAMPLER_UNIFORMS_GL_TO_GPU","SAMPLER_2D","SAMPLER_CUBE","SAMPLER_3D","SAMPLER_2D_SHADOW","SAMPLER_2D_ARRAY","SAMPLER_2D_ARRAY_SHADOW","SAMPLER_CUBE_SHADOW","INT_SAMPLER_2D","INT_SAMPLER_3D","INT_SAMPLER_CUBE","INT_SAMPLER_2D_ARRAY","UNSIGNED_INT_SAMPLER_2D","UNSIGNED_INT_SAMPLER_3D","UNSIGNED_INT_SAMPLER_CUBE","UNSIGNED_INT_SAMPLER_2D_ARRAY","sampler","UNIFORM_NAME_REGEXP","matches","exec","Boolean"],"sources":["../../../src/adapter/helpers/get-shader-layout.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {\n ShaderLayout,\n UniformBinding,\n UniformBlockBinding,\n AttributeDeclaration,\n VaryingBinding\n} from '@luma.gl/core';\n\nimport {GL} from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport {Accessor} from '../../classic/accessor'; // TODO - should NOT depend on classic API\nimport {decodeGLUniformType, decodeGLAttributeType, isSamplerUniform} from './decode-webgl-types';\n\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {\n const shaderLayout: ShaderLayout = {\n attributes: [],\n bindings: []\n };\n\n shaderLayout.attributes = readAttributeDeclarations(gl, program);\n\n // Uniform blocks\n const uniformBlocks: UniformBlockBinding[] = readUniformBlocks(gl, program);\n for (const uniformBlock of uniformBlocks) {\n const uniforms = uniformBlock.uniforms.map(uniform => ({\n name: uniform.name,\n format: uniform.format,\n byteOffset: uniform.byteOffset,\n byteStride: uniform.byteStride,\n arrayLength: uniform.arrayLength\n }));\n shaderLayout.bindings.push({\n type: 'uniform',\n name: uniformBlock.name,\n location: uniformBlock.location,\n visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),\n minBindingSize: uniformBlock.byteLength,\n uniforms\n });\n }\n\n const uniforms: UniformBinding[] = readUniformBindings(gl, program);\n let textureUnit = 0;\n for (const uniform of uniforms) {\n if (isSamplerUniform(uniform.type)) {\n const {viewDimension, sampleType} = getSamplerInfo(uniform.type);\n shaderLayout.bindings.push({\n type: 'texture',\n name: uniform.name,\n location: textureUnit,\n viewDimension,\n sampleType\n });\n\n // @ts-expect-error\n uniform.textureUnit = textureUnit;\n textureUnit += 1;\n }\n }\n\n if (uniforms.length) {\n shaderLayout.uniforms = uniforms;\n }\n\n // Varyings\n const varyings: VaryingBinding[] = readVaryings(gl, program);\n // Note - samplers are always in unform bindings, even if uniform blocks are used\n if (varyings?.length) {\n shaderLayout.varyings = varyings;\n }\n\n return shaderLayout;\n}\n\n// HELPERS\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readAttributeDeclarations(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): AttributeDeclaration[] {\n const attributes: AttributeDeclaration[] = [];\n\n const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n for (let index = 0; index < count; index++) {\n const activeInfo = gl.getActiveAttrib(program, index);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name, type: compositeType /* , size*/} = activeInfo;\n const location = gl.getAttribLocation(program, name);\n // Add only user provided attributes, for built-in attributes like `gl_InstanceID` location will be < 0\n if (location >= 0) {\n const {attributeType} = decodeGLAttributeType(compositeType);\n\n // Whether an attribute is instanced is essentially fixed by the structure of the shader code, \n // so it is arguably a static property of the shader.\n // There is no hint in the shader declarations\n // Heuristic: Any attribute name containing the word \"instance\" will be assumed to be instanced\n const stepMode = /instance/i.test(name) ? 'instance' : 'vertex';\n\n attributes.push({\n name,\n location,\n stepMode,\n type: attributeType,\n // size - for arrays, size is the number of elements in the array\n });\n }\n }\n\n // Sort by declaration order\n attributes.sort((a: AttributeDeclaration, b: AttributeDeclaration) => a.location - b.location);\n return attributes;\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): VaryingBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const varyings: VaryingBinding[] = [];\n\n const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);\n for (let location = 0; location < count; location++) {\n const activeInfo = gl2.getTransformFeedbackVarying(program, location);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name, type: compositeType, size} = activeInfo;\n const {glType, components} = decodeGLUniformType(compositeType);\n const accessor = new Accessor({type: glType, size: size * components});\n const varying = {location, name, accessor}; // Base values\n varyings.push(varying);\n }\n\n varyings.sort((a, b) => a.location - b.location);\n return varyings;\n}\n\n/**\n * Extract info about all uniforms\n *\n * Query uniform locations and build name to setter map.\n */\nfunction readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram): UniformBinding[] {\n const uniforms: UniformBinding[] = [];\n\n const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);\n for (let i = 0; i < uniformCount; i++) {\n const activeInfo = gl.getActiveUniform(program, i);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name: rawName, size, type} = activeInfo;\n const {name, isArray} = parseUniformName(rawName);\n let webglLocation = gl.getUniformLocation(program, name);\n const uniformInfo = {\n // WebGL locations are uniquely typed but just numbers\n location: webglLocation as number,\n name,\n size,\n type,\n isArray\n };\n uniforms.push(uniformInfo);\n\n // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks\n if (uniformInfo.size > 1) {\n for (let j = 0; j < uniformInfo.size; j++) {\n const elementName = `${name}[${j}]`;\n\n webglLocation = gl.getUniformLocation(program, elementName);\n\n const arrayElementUniformInfo = {\n ...uniformInfo,\n name: elementName,\n location: webglLocation as number\n };\n\n uniforms.push(arrayElementUniformInfo);\n }\n }\n }\n return uniforms;\n}\n\n/**\n * Extract info about all \"active\" uniform blocks\n * @note In WebGL, \"active\" just means that unused (inactive) blocks may have been optimized away during linking)\n */\nfunction readUniformBlocks(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): UniformBlockBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const getBlockParameter = (blockIndex: number, pname: GL): any =>\n gl2.getActiveUniformBlockParameter(program, blockIndex, pname);\n\n const uniformBlocks: UniformBlockBinding[] = [];\n\n const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {\n const blockInfo: UniformBlockBinding = {\n name: gl2.getActiveUniformBlockName(program, blockIndex) || '',\n location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),\n byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),\n vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n fragment: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n uniformCount: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n uniforms: [] as any[]\n };\n\n const uniformIndices =\n (getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) as number[]) || [];\n\n const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.\n const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE); // Array of GLuint indicating the sizes of the uniforms.\n // const uniformBlockIndex = gl2.getActiveUniforms(\n // program,\n // uniformIndices,\n // GL.UNIFORM_BLOCK_INDEX\n // ); // Array of GLint indicating the block indices of the uniforms.\n const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.\n const uniformStride = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_ARRAY_STRIDE); // Array of GLint indicating the strides between the elements.\n // const uniformMatrixStride = gl2.getActiveUniforms(\n // program,\n // uniformIndices,\n // GL.UNIFORM_MATRIX_STRIDE\n // ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.\n // const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);\n for (let i = 0; i < blockInfo.uniformCount; ++i) {\n const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n\n blockInfo.uniforms.push({\n name: activeInfo.name,\n format: decodeGLUniformType(uniformType[i]).format,\n type: uniformType[i],\n arrayLength: uniformArrayLength[i],\n byteOffset: uniformOffset[i],\n byteStride: uniformStride[i]\n // matrixStride: uniformStride[i],\n // rowMajor: uniformRowMajor[i]\n });\n }\n\n uniformBlocks.push(blockInfo);\n }\n\n uniformBlocks.sort((a, b) => a.location - b.location);\n return uniformBlocks;\n}\n\n/**\n * TOOD - compare with a above, confirm copy, then delete\n const bindings: Binding[] = [];\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < count; blockIndex++) {\n const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n const visibility = (vertex) + (fragment);\n const binding: BufferBinding = {\n location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),\n // name: gl.getActiveUniformBlockName(program, blockIndex),\n type: 'uniform',\n visibility,\n minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),\n // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n }\n bindings.push(binding);\n }\n*/\n\nconst SAMPLER_UNIFORMS_GL_TO_GPU: Record<\n number,\n [\n '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d',\n 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint'\n ]\n> = {\n [GL.SAMPLER_2D]: ['2d', 'float'],\n [GL.SAMPLER_CUBE]: ['cube', 'float'],\n [GL.SAMPLER_3D]: ['3d', 'float'],\n [GL.SAMPLER_2D_SHADOW]: ['3d', 'depth'],\n [GL.SAMPLER_2D_ARRAY]: ['2d-array', 'float'],\n [GL.SAMPLER_2D_ARRAY_SHADOW]: ['2d-array', 'depth'],\n [GL.SAMPLER_CUBE_SHADOW]: ['cube', 'float'],\n [GL.INT_SAMPLER_2D]: ['2d', 'sint'],\n [GL.INT_SAMPLER_3D]: ['3d', 'sint'],\n [GL.INT_SAMPLER_CUBE]: ['cube', 'sint'],\n [GL.INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D]: ['2d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_3D]: ['3d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: ['cube', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']\n};\n\ntype SamplerInfo = {\n viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';\n sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';\n};\n\nfunction getSamplerInfo(type: GL): SamplerInfo {\n const sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];\n if (!sampler) {\n throw new Error('sampler');\n }\n const [viewDimension, sampleType] = sampler;\n return {viewDimension, sampleType};\n}\n\n// HELPERS\n\nfunction parseUniformName(name: string): {name: string; length: number; isArray: boolean} {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = UNIFORM_NAME_REGEXP.exec(name);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] ? 1 : 0,\n isArray: Boolean(matches[2])\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"get-shader-layout.js","names":["isWebGL2","Accessor","decodeGLUniformType","decodeGLAttributeType","isSamplerUniform","getShaderLayout","gl","program","shaderLayout","attributes","bindings","readAttributeDeclarations","uniformBlocks","readUniformBlocks","uniformBlock","uniforms","map","uniform","name","format","byteOffset","byteStride","arrayLength","push","type","location","visibility","vertex","fragment","minBindingSize","byteLength","readUniformBindings","textureUnit","viewDimension","sampleType","getSamplerInfo","length","varyings","readVaryings","count","getProgramParameter","index","activeInfo","getActiveAttrib","Error","compositeType","getAttribLocation","attributeType","stepMode","test","sort","a","b","gl2","getTransformFeedbackVarying","size","glType","components","accessor","varying","uniformCount","i","getActiveUniform","rawName","isArray","parseUniformName","webglLocation","getUniformLocation","uniformInfo","j","elementName","arrayElementUniformInfo","getBlockParameter","blockIndex","pname","getActiveUniformBlockParameter","blockCount","blockInfo","getActiveUniformBlockName","uniformIndices","uniformType","getActiveUniforms","uniformArrayLength","uniformOffset","uniformStride","SAMPLER_UNIFORMS_GL_TO_GPU","sampler","UNIFORM_NAME_REGEXP","matches","exec","Boolean"],"sources":["../../../src/adapter/helpers/get-shader-layout.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {\n ShaderLayout,\n UniformBinding,\n UniformBlockBinding,\n AttributeDeclaration,\n VaryingBinding\n} from '@luma.gl/core';\n\nimport {GL} from '@luma.gl/constants';\nimport {isWebGL2} from '../../context/context/webgl-checks';\nimport {Accessor} from '../../classic/accessor'; // TODO - should NOT depend on classic API\nimport {decodeGLUniformType, decodeGLAttributeType, isSamplerUniform} from './decode-webgl-types';\n\n/**\n * Extract metadata describing binding information for a program's shaders\n * Note: `linkProgram()` needs to have been called\n * (although linking does not need to have been successful).\n */\nexport function getShaderLayout(gl: WebGLRenderingContext, program: WebGLProgram): ShaderLayout {\n const shaderLayout: ShaderLayout = {\n attributes: [],\n bindings: []\n };\n\n shaderLayout.attributes = readAttributeDeclarations(gl, program);\n\n // Uniform blocks\n const uniformBlocks: UniformBlockBinding[] = readUniformBlocks(gl, program);\n for (const uniformBlock of uniformBlocks) {\n const uniforms = uniformBlock.uniforms.map(uniform => ({\n name: uniform.name,\n format: uniform.format,\n byteOffset: uniform.byteOffset,\n byteStride: uniform.byteStride,\n arrayLength: uniform.arrayLength\n }));\n shaderLayout.bindings.push({\n type: 'uniform',\n name: uniformBlock.name,\n location: uniformBlock.location,\n visibility: (uniformBlock.vertex ? 0x1 : 0) & (uniformBlock.fragment ? 0x2 : 0),\n minBindingSize: uniformBlock.byteLength,\n uniforms\n });\n }\n\n const uniforms: UniformBinding[] = readUniformBindings(gl, program);\n let textureUnit = 0;\n for (const uniform of uniforms) {\n if (isSamplerUniform(uniform.type)) {\n const {viewDimension, sampleType} = getSamplerInfo(uniform.type);\n shaderLayout.bindings.push({\n type: 'texture',\n name: uniform.name,\n location: textureUnit,\n viewDimension,\n sampleType\n });\n\n // @ts-expect-error\n uniform.textureUnit = textureUnit;\n textureUnit += 1;\n }\n }\n\n if (uniforms.length) {\n shaderLayout.uniforms = uniforms;\n }\n\n // Varyings\n const varyings: VaryingBinding[] = readVaryings(gl, program);\n // Note - samplers are always in unform bindings, even if uniform blocks are used\n if (varyings?.length) {\n shaderLayout.varyings = varyings;\n }\n\n return shaderLayout;\n}\n\n// HELPERS\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readAttributeDeclarations(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): AttributeDeclaration[] {\n const attributes: AttributeDeclaration[] = [];\n\n const count = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n for (let index = 0; index < count; index++) {\n const activeInfo = gl.getActiveAttrib(program, index);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name, type: compositeType /* , size*/} = activeInfo;\n const location = gl.getAttribLocation(program, name);\n // Add only user provided attributes, for built-in attributes like `gl_InstanceID` location will be < 0\n if (location >= 0) {\n const {attributeType} = decodeGLAttributeType(compositeType);\n\n // Whether an attribute is instanced is essentially fixed by the structure of the shader code, \n // so it is arguably a static property of the shader.\n // There is no hint in the shader declarations\n // Heuristic: Any attribute name containing the word \"instance\" will be assumed to be instanced\n const stepMode = /instance/i.test(name) ? 'instance' : 'vertex';\n\n attributes.push({\n name,\n location,\n stepMode,\n type: attributeType,\n // size - for arrays, size is the number of elements in the array\n });\n }\n }\n\n // Sort by declaration order\n attributes.sort((a: AttributeDeclaration, b: AttributeDeclaration) => a.location - b.location);\n return attributes;\n}\n\n/**\n * Extract info about all transform feedback varyings\n *\n * linkProgram needs to have been called, although linking does not need to have been successful\n */\nfunction readVaryings(gl: WebGLRenderingContext, program: WebGLProgram): VaryingBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const varyings: VaryingBinding[] = [];\n\n const count = gl.getProgramParameter(program, GL.TRANSFORM_FEEDBACK_VARYINGS);\n for (let location = 0; location < count; location++) {\n const activeInfo = gl2.getTransformFeedbackVarying(program, location);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name, type: compositeType, size} = activeInfo;\n const {glType, components} = decodeGLUniformType(compositeType);\n const accessor = new Accessor({type: glType, size: size * components});\n const varying = {location, name, accessor}; // Base values\n varyings.push(varying);\n }\n\n varyings.sort((a, b) => a.location - b.location);\n return varyings;\n}\n\n/**\n * Extract info about all uniforms\n *\n * Query uniform locations and build name to setter map.\n */\nfunction readUniformBindings(gl: WebGLRenderingContext, program: WebGLProgram): UniformBinding[] {\n const uniforms: UniformBinding[] = [];\n\n const uniformCount = gl.getProgramParameter(program, GL.ACTIVE_UNIFORMS);\n for (let i = 0; i < uniformCount; i++) {\n const activeInfo = gl.getActiveUniform(program, i);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n const {name: rawName, size, type} = activeInfo;\n const {name, isArray} = parseUniformName(rawName);\n let webglLocation = gl.getUniformLocation(program, name);\n const uniformInfo = {\n // WebGL locations are uniquely typed but just numbers\n location: webglLocation as number,\n name,\n size,\n type,\n isArray\n };\n uniforms.push(uniformInfo);\n\n // Array (e.g. matrix) uniforms can occupy several 4x4 byte banks\n if (uniformInfo.size > 1) {\n for (let j = 0; j < uniformInfo.size; j++) {\n const elementName = `${name}[${j}]`;\n\n webglLocation = gl.getUniformLocation(program, elementName);\n\n const arrayElementUniformInfo = {\n ...uniformInfo,\n name: elementName,\n location: webglLocation as number\n };\n\n uniforms.push(arrayElementUniformInfo);\n }\n }\n }\n return uniforms;\n}\n\n/**\n * Extract info about all \"active\" uniform blocks\n * @note In WebGL, \"active\" just means that unused (inactive) blocks may have been optimized away during linking)\n */\nfunction readUniformBlocks(\n gl: WebGLRenderingContext,\n program: WebGLProgram\n): UniformBlockBinding[] {\n if (!isWebGL2(gl)) {\n return [];\n }\n const gl2 = gl as WebGL2RenderingContext;\n\n const getBlockParameter = (blockIndex: number, pname: GL): any =>\n gl2.getActiveUniformBlockParameter(program, blockIndex, pname);\n\n const uniformBlocks: UniformBlockBinding[] = [];\n\n const blockCount = gl2.getProgramParameter(program, GL.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < blockCount; blockIndex++) {\n const blockInfo: UniformBlockBinding = {\n name: gl2.getActiveUniformBlockName(program, blockIndex) || '',\n location: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_BINDING),\n byteLength: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_DATA_SIZE),\n vertex: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n fragment: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n uniformCount: getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n uniforms: [] as any[]\n };\n\n const uniformIndices =\n (getBlockParameter(blockIndex, GL.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) as number[]) || [];\n\n const uniformType = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_TYPE); // Array of GLenum indicating the types of the uniforms.\n const uniformArrayLength = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_SIZE); // Array of GLuint indicating the sizes of the uniforms.\n // const uniformBlockIndex = gl2.getActiveUniforms(\n // program,\n // uniformIndices,\n // GL.UNIFORM_BLOCK_INDEX\n // ); // Array of GLint indicating the block indices of the uniforms.\n const uniformOffset = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_OFFSET); // Array of GLint indicating the uniform buffer offsets.\n const uniformStride = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_ARRAY_STRIDE); // Array of GLint indicating the strides between the elements.\n // const uniformMatrixStride = gl2.getActiveUniforms(\n // program,\n // uniformIndices,\n // GL.UNIFORM_MATRIX_STRIDE\n // ); // Array of GLint indicating the strides between columns of a column-major matrix or a row-major matrix.\n // const uniformRowMajor = gl2.getActiveUniforms(program, uniformIndices, GL.UNIFORM_IS_ROW_MAJOR);\n for (let i = 0; i < blockInfo.uniformCount; ++i) {\n const activeInfo = gl2.getActiveUniform(program, uniformIndices[i]);\n if (!activeInfo) {\n throw new Error('activeInfo');\n }\n\n blockInfo.uniforms.push({\n name: activeInfo.name,\n format: decodeGLUniformType(uniformType[i]).format,\n type: uniformType[i],\n arrayLength: uniformArrayLength[i],\n byteOffset: uniformOffset[i],\n byteStride: uniformStride[i]\n // matrixStride: uniformStride[i],\n // rowMajor: uniformRowMajor[i]\n });\n }\n\n uniformBlocks.push(blockInfo);\n }\n\n uniformBlocks.sort((a, b) => a.location - b.location);\n return uniformBlocks;\n}\n\n/**\n * TOOD - compare with a above, confirm copy, then delete\n const bindings: Binding[] = [];\n const count = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS);\n for (let blockIndex = 0; blockIndex < count; blockIndex++) {\n const vertex = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER),\n const fragment = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER),\n const visibility = (vertex) + (fragment);\n const binding: BufferBinding = {\n location: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_BINDING),\n // name: gl.getActiveUniformBlockName(program, blockIndex),\n type: 'uniform',\n visibility,\n minBindingSize: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE),\n // uniformCount: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORMS),\n // uniformIndices: gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES),\n }\n bindings.push(binding);\n }\n*/\n\nconst SAMPLER_UNIFORMS_GL_TO_GPU: Record<\n number,\n [\n '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d',\n 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint'\n ]\n> = {\n [GL.SAMPLER_2D]: ['2d', 'float'],\n [GL.SAMPLER_CUBE]: ['cube', 'float'],\n [GL.SAMPLER_3D]: ['3d', 'float'],\n [GL.SAMPLER_2D_SHADOW]: ['3d', 'depth'],\n [GL.SAMPLER_2D_ARRAY]: ['2d-array', 'float'],\n [GL.SAMPLER_2D_ARRAY_SHADOW]: ['2d-array', 'depth'],\n [GL.SAMPLER_CUBE_SHADOW]: ['cube', 'float'],\n [GL.INT_SAMPLER_2D]: ['2d', 'sint'],\n [GL.INT_SAMPLER_3D]: ['3d', 'sint'],\n [GL.INT_SAMPLER_CUBE]: ['cube', 'sint'],\n [GL.INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D]: ['2d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_3D]: ['3d', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_CUBE]: ['cube', 'uint'],\n [GL.UNSIGNED_INT_SAMPLER_2D_ARRAY]: ['2d-array', 'uint']\n};\n\ntype SamplerInfo = {\n viewDimension: '1d' | '2d' | '2d-array' | 'cube' | 'cube-array' | '3d';\n sampleType: 'float' | 'unfilterable-float' | 'depth' | 'sint' | 'uint';\n};\n\nfunction getSamplerInfo(type: GL): SamplerInfo {\n const sampler = SAMPLER_UNIFORMS_GL_TO_GPU[type];\n if (!sampler) {\n throw new Error('sampler');\n }\n const [viewDimension, sampleType] = sampler;\n return {viewDimension, sampleType};\n}\n\n// HELPERS\n\nfunction parseUniformName(name: string): {name: string; length: number; isArray: boolean} {\n // Shortcut to avoid redundant or bad matches\n if (name[name.length - 1] !== ']') {\n return {\n name,\n length: 1,\n isArray: false\n };\n }\n\n // if array name then clean the array brackets\n const UNIFORM_NAME_REGEXP = /([^[]*)(\\[[0-9]+\\])?/;\n const matches = UNIFORM_NAME_REGEXP.exec(name);\n if (!matches || matches.length < 2) {\n throw new Error(`Failed to parse GLSL uniform name ${name}`);\n }\n\n return {\n name: matches[1],\n length: matches[2] ? 1 : 0,\n isArray: Boolean(matches[2])\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-shader-compiler-log.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/parse-shader-compiler-log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-shader-compiler-log.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/parse-shader-compiler-log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAI,SAAS,eAAe,EAAE,CA8ClF"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const MESSAGE_TYPES = ['warning', 'error', 'info'];
|
|
2
1
|
export function parseShaderCompilerLog(errLog) {
|
|
3
2
|
const lines = errLog.split(/\r?\n/);
|
|
4
3
|
const messages = [];
|
|
@@ -7,6 +6,16 @@ export function parseShaderCompilerLog(errLog) {
|
|
|
7
6
|
continue;
|
|
8
7
|
}
|
|
9
8
|
const segments = line.split(':');
|
|
9
|
+
if (segments.length === 2) {
|
|
10
|
+
const [messageType, message] = segments;
|
|
11
|
+
messages.push({
|
|
12
|
+
message: message.trim(),
|
|
13
|
+
type: getMessageType(messageType),
|
|
14
|
+
lineNum: 0,
|
|
15
|
+
linePos: 0
|
|
16
|
+
});
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
10
19
|
const [messageType, linePosition, lineNumber, ...rest] = segments;
|
|
11
20
|
let lineNum = parseInt(lineNumber, 10);
|
|
12
21
|
if (isNaN(lineNum)) {
|
|
@@ -16,15 +25,18 @@ export function parseShaderCompilerLog(errLog) {
|
|
|
16
25
|
if (isNaN(linePos)) {
|
|
17
26
|
linePos = 0;
|
|
18
27
|
}
|
|
19
|
-
const lowerCaseType = messageType.toLowerCase();
|
|
20
|
-
const type = MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info';
|
|
21
28
|
messages.push({
|
|
22
29
|
message: rest.join(':').trim(),
|
|
23
|
-
type,
|
|
30
|
+
type: getMessageType(messageType),
|
|
24
31
|
lineNum,
|
|
25
32
|
linePos
|
|
26
33
|
});
|
|
27
34
|
}
|
|
28
35
|
return messages;
|
|
29
36
|
}
|
|
37
|
+
function getMessageType(messageType) {
|
|
38
|
+
const MESSAGE_TYPES = ['warning', 'error', 'info'];
|
|
39
|
+
const lowerCaseType = messageType.toLowerCase();
|
|
40
|
+
return MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info';
|
|
41
|
+
}
|
|
30
42
|
//# sourceMappingURL=parse-shader-compiler-log.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-shader-compiler-log.js","names":["
|
|
1
|
+
{"version":3,"file":"parse-shader-compiler-log.js","names":["parseShaderCompilerLog","errLog","lines","split","messages","line","length","segments","messageType","message","push","trim","type","getMessageType","lineNum","linePos","linePosition","lineNumber","rest","parseInt","isNaN","join","MESSAGE_TYPES","lowerCaseType","toLowerCase","includes"],"sources":["../../../src/adapter/helpers/parse-shader-compiler-log.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport type {CompilerMessage} from '@luma.gl/core';\n\n/**\n * Parse a WebGL-format GLSL compilation log into an array of WebGPU style message records.\n * This follows documented WebGL conventions for compilation logs.\n * Based on https://github.com/wwwtyro/gl-format-compiler-error (public domain)\n */\nexport function parseShaderCompilerLog(errLog: string) : readonly CompilerMessage[] {\n // Parse the error - note: browser and driver dependent\n const lines = errLog.split(/\\r?\\n/);\n\n const messages: CompilerMessage[] = [];\n\n for (const line of lines) {\n if (line.length <= 1) {\n continue; // eslint-disable-line no-continue\n }\n\n const segments: string[] = line.split(':');\n\n // Check for messages with no line information `ERROR: unsupported shader version`\n if (segments.length === 2) {\n const [messageType, message] = segments;\n messages.push({\n message: message.trim(),\n type: getMessageType(messageType),\n lineNum: 0,\n linePos: 0\n });\n continue; // eslint-disable-line no-continue \n }\n\n const [messageType, linePosition, lineNumber, ...rest] = segments;\n\n let lineNum = parseInt(lineNumber, 10);\n if (isNaN(lineNum)) {\n lineNum = 0;\n }\n\n let linePos = parseInt(linePosition, 10);\n if (isNaN(linePos)) {\n linePos = 0;\n }\n\n messages.push({\n message: rest.join(':').trim(),\n type: getMessageType(messageType),\n lineNum,\n linePos // TODO\n })\n }\n\n return messages;\n}\n\n/** Ensure supported type */\nfunction getMessageType(messageType: string): 'warning' | 'error' | 'info' { \n const MESSAGE_TYPES = ['warning', 'error', 'info'];\n const lowerCaseType = messageType.toLowerCase();\n return (MESSAGE_TYPES.includes(lowerCaseType) ? lowerCaseType : 'info') as 'warning' | 'error' | 'info';\n}\n"],"mappings":"AAUA,OAAO,SAASA,sBAAsBA,CAACC,MAAc,EAA+B;EAElF,MAAMC,KAAK,GAAGD,MAAM,CAACE,KAAK,CAAC,OAAO,CAAC;EAEnC,MAAMC,QAA2B,GAAG,EAAE;EAEtC,KAAK,MAAMC,IAAI,IAAIH,KAAK,EAAE;IACxB,IAAIG,IAAI,CAACC,MAAM,IAAI,CAAC,EAAE;MACpB;IACF;IAEA,MAAMC,QAAkB,GAAGF,IAAI,CAACF,KAAK,CAAC,GAAG,CAAC;IAG1C,IAAII,QAAQ,CAACD,MAAM,KAAK,CAAC,EAAE;MACzB,MAAM,CAACE,WAAW,EAAEC,OAAO,CAAC,GAAGF,QAAQ;MACvCH,QAAQ,CAACM,IAAI,CAAC;QACZD,OAAO,EAAEA,OAAO,CAACE,IAAI,CAAC,CAAC;QACvBC,IAAI,EAAEC,cAAc,CAACL,WAAW,CAAC;QACjCM,OAAO,EAAE,CAAC;QACVC,OAAO,EAAE;MACX,CAAC,CAAC;MACF;IACF;IAEA,MAAM,CAACP,WAAW,EAAEQ,YAAY,EAAEC,UAAU,EAAE,GAAGC,IAAI,CAAC,GAAGX,QAAQ;IAEjE,IAAIO,OAAO,GAAGK,QAAQ,CAACF,UAAU,EAAE,EAAE,CAAC;IACtC,IAAIG,KAAK,CAACN,OAAO,CAAC,EAAE;MAClBA,OAAO,GAAG,CAAC;IACb;IAEA,IAAIC,OAAO,GAAGI,QAAQ,CAACH,YAAY,EAAE,EAAE,CAAC;IACxC,IAAII,KAAK,CAACL,OAAO,CAAC,EAAE;MAClBA,OAAO,GAAG,CAAC;IACb;IAEAX,QAAQ,CAACM,IAAI,CAAC;MACZD,OAAO,EAAES,IAAI,CAACG,IAAI,CAAC,GAAG,CAAC,CAACV,IAAI,CAAC,CAAC;MAC9BC,IAAI,EAAEC,cAAc,CAACL,WAAW,CAAC;MACjCM,OAAO;MACPC;IACF,CAAC,CAAC;EACJ;EAEA,OAAOX,QAAQ;AACjB;AAGA,SAASS,cAAcA,CAACL,WAAmB,EAAgC;EACzE,MAAMc,aAAa,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;EAClD,MAAMC,aAAa,GAAGf,WAAW,CAACgB,WAAW,CAAC,CAAC;EAC/C,OAAQF,aAAa,CAACG,QAAQ,CAACF,aAAa,CAAC,GAAGA,aAAa,GAAG,MAAM;AACxE"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { GL } from '@luma.gl/constants';
|
|
2
1
|
export function setUniform(gl, location, type, value) {
|
|
3
2
|
const gl2 = gl;
|
|
4
3
|
let uniformValue = value;
|
|
@@ -10,74 +9,74 @@ export function setUniform(gl, location, type, value) {
|
|
|
10
9
|
}
|
|
11
10
|
const arrayValue = typeof uniformValue === 'number' ? [uniformValue] : uniformValue;
|
|
12
11
|
switch (type) {
|
|
13
|
-
case
|
|
14
|
-
case
|
|
15
|
-
case
|
|
16
|
-
case
|
|
17
|
-
case
|
|
18
|
-
case
|
|
19
|
-
case
|
|
20
|
-
case
|
|
21
|
-
case
|
|
22
|
-
case
|
|
23
|
-
case
|
|
24
|
-
case
|
|
25
|
-
case
|
|
26
|
-
case
|
|
27
|
-
case
|
|
12
|
+
case 35678:
|
|
13
|
+
case 35680:
|
|
14
|
+
case 35679:
|
|
15
|
+
case 35682:
|
|
16
|
+
case 36289:
|
|
17
|
+
case 36292:
|
|
18
|
+
case 36293:
|
|
19
|
+
case 36298:
|
|
20
|
+
case 36299:
|
|
21
|
+
case 36300:
|
|
22
|
+
case 36303:
|
|
23
|
+
case 36306:
|
|
24
|
+
case 36307:
|
|
25
|
+
case 36308:
|
|
26
|
+
case 36311:
|
|
28
27
|
if (typeof value !== 'number') {
|
|
29
28
|
throw new Error('samplers must be set to integers');
|
|
30
29
|
}
|
|
31
30
|
return gl.uniform1i(location, value);
|
|
32
|
-
case
|
|
31
|
+
case 5126:
|
|
33
32
|
return gl.uniform1fv(location, arrayValue);
|
|
34
|
-
case
|
|
33
|
+
case 35664:
|
|
35
34
|
return gl.uniform2fv(location, arrayValue);
|
|
36
|
-
case
|
|
35
|
+
case 35665:
|
|
37
36
|
return gl.uniform3fv(location, arrayValue);
|
|
38
|
-
case
|
|
37
|
+
case 35666:
|
|
39
38
|
return gl.uniform4fv(location, arrayValue);
|
|
40
|
-
case
|
|
39
|
+
case 5124:
|
|
41
40
|
return gl.uniform1iv(location, arrayValue);
|
|
42
|
-
case
|
|
41
|
+
case 35667:
|
|
43
42
|
return gl.uniform2iv(location, arrayValue);
|
|
44
|
-
case
|
|
43
|
+
case 35668:
|
|
45
44
|
return gl.uniform3iv(location, arrayValue);
|
|
46
|
-
case
|
|
45
|
+
case 35669:
|
|
47
46
|
return gl.uniform4iv(location, arrayValue);
|
|
48
|
-
case
|
|
47
|
+
case 35670:
|
|
49
48
|
return gl.uniform1iv(location, arrayValue);
|
|
50
|
-
case
|
|
49
|
+
case 35671:
|
|
51
50
|
return gl.uniform2iv(location, arrayValue);
|
|
52
|
-
case
|
|
51
|
+
case 35672:
|
|
53
52
|
return gl.uniform3iv(location, arrayValue);
|
|
54
|
-
case
|
|
53
|
+
case 35673:
|
|
55
54
|
return gl.uniform4iv(location, arrayValue);
|
|
56
|
-
case
|
|
55
|
+
case 5125:
|
|
57
56
|
return gl2.uniform1uiv(location, arrayValue, 1);
|
|
58
|
-
case
|
|
57
|
+
case 36294:
|
|
59
58
|
return gl2.uniform2uiv(location, arrayValue, 2);
|
|
60
|
-
case
|
|
59
|
+
case 36295:
|
|
61
60
|
return gl2.uniform3uiv(location, arrayValue, 3);
|
|
62
|
-
case
|
|
61
|
+
case 36296:
|
|
63
62
|
return gl2.uniform4uiv(location, arrayValue, 4);
|
|
64
|
-
case
|
|
63
|
+
case 35674:
|
|
65
64
|
return gl.uniformMatrix2fv(location, false, arrayValue);
|
|
66
|
-
case
|
|
65
|
+
case 35675:
|
|
67
66
|
return gl.uniformMatrix3fv(location, false, arrayValue);
|
|
68
|
-
case
|
|
67
|
+
case 35676:
|
|
69
68
|
return gl.uniformMatrix4fv(location, false, arrayValue);
|
|
70
|
-
case
|
|
69
|
+
case 35685:
|
|
71
70
|
return gl2.uniformMatrix2x3fv(location, false, arrayValue);
|
|
72
|
-
case
|
|
71
|
+
case 35686:
|
|
73
72
|
return gl2.uniformMatrix2x4fv(location, false, arrayValue);
|
|
74
|
-
case
|
|
73
|
+
case 35687:
|
|
75
74
|
return gl2.uniformMatrix3x2fv(location, false, arrayValue);
|
|
76
|
-
case
|
|
75
|
+
case 35688:
|
|
77
76
|
return gl2.uniformMatrix3x4fv(location, false, arrayValue);
|
|
78
|
-
case
|
|
77
|
+
case 35689:
|
|
79
78
|
return gl2.uniformMatrix4x2fv(location, false, arrayValue);
|
|
80
|
-
case
|
|
79
|
+
case 35690:
|
|
81
80
|
return gl2.uniformMatrix4x3fv(location, false, arrayValue);
|
|
82
81
|
}
|
|
83
82
|
throw new Error('Illegal uniform');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-uniform.js","names":["
|
|
1
|
+
{"version":3,"file":"set-uniform.js","names":["setUniform","gl","location","type","value","gl2","uniformValue","arrayValue","Error","uniform1i","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniform1iv","uniform2iv","uniform3iv","uniform4iv","uniform1uiv","uniform2uiv","uniform3uiv","uniform4uiv","uniformMatrix2fv","uniformMatrix3fv","uniformMatrix4fv","uniformMatrix2x3fv","uniformMatrix2x4fv","uniformMatrix3x2fv","uniformMatrix3x4fv","uniformMatrix4x2fv","uniformMatrix4x3fv"],"sources":["../../../src/adapter/helpers/set-uniform.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n/* eslint-disable */\n\n// Uniforms\nimport type {UniformValue} from '@luma.gl/core';\nimport {GL, GLCompositeType, GLSamplerType} from '@luma.gl/constants';\n\n/** Set a raw uniform (without type conversion and caching) */\n/* eslint-disable max-len */\nexport function setUniform(\n gl: WebGLRenderingContext,\n location: WebGLUniformLocation,\n type: GLCompositeType | GLSamplerType,\n value: UniformValue\n): void {\n const gl2 = gl as WebGL2RenderingContext;\n\n // Prepare the value for WebGL setters\n let uniformValue = value;\n if (uniformValue === true) {\n uniformValue = 1;\n }\n if (uniformValue === false) {\n uniformValue = 0;\n }\n const arrayValue = typeof uniformValue === 'number' ? [uniformValue] : uniformValue;\n\n // prettier-ignore\n switch (type) {\n // WebGL1 samplers\n case GL.SAMPLER_2D:\n case GL.SAMPLER_CUBE:\n // WebGL2 samplers\n case GL.SAMPLER_3D:\n case GL.SAMPLER_2D_SHADOW:\n case GL.SAMPLER_2D_ARRAY:\n case GL.SAMPLER_2D_ARRAY_SHADOW:\n case GL.SAMPLER_CUBE_SHADOW:\n case GL.INT_SAMPLER_2D:\n case GL.INT_SAMPLER_3D:\n case GL.INT_SAMPLER_CUBE:\n case GL.INT_SAMPLER_2D_ARRAY:\n case GL.UNSIGNED_INT_SAMPLER_2D:\n case GL.UNSIGNED_INT_SAMPLER_3D:\n case GL.UNSIGNED_INT_SAMPLER_CUBE:\n case GL.UNSIGNED_INT_SAMPLER_2D_ARRAY:\n if (typeof value !== 'number') {\n throw new Error('samplers must be set to integers');\n }\n return gl.uniform1i(location, value);\n\n case GL.FLOAT: return gl.uniform1fv(location, arrayValue);\n case GL.FLOAT_VEC2: return gl.uniform2fv(location, arrayValue);\n case GL.FLOAT_VEC3: return gl.uniform3fv(location, arrayValue);\n case GL.FLOAT_VEC4: return gl.uniform4fv(location, arrayValue);\n\n case GL.INT: return gl.uniform1iv(location, arrayValue);\n case GL.INT_VEC2: return gl.uniform2iv(location, arrayValue);\n case GL.INT_VEC3: return gl.uniform3iv(location, arrayValue);\n case GL.INT_VEC4: return gl.uniform4iv(location, arrayValue);\n\n case GL.BOOL: return gl.uniform1iv(location, arrayValue);\n case GL.BOOL_VEC2: return gl.uniform2iv(location, arrayValue);\n case GL.BOOL_VEC3: return gl.uniform3iv(location, arrayValue);\n case GL.BOOL_VEC4: return gl.uniform4iv(location, arrayValue);\n\n // WEBGL2 - unsigned integers\n case GL.UNSIGNED_INT: return gl2.uniform1uiv(location, arrayValue, 1);\n case GL.UNSIGNED_INT_VEC2: return gl2.uniform2uiv(location, arrayValue, 2);\n case GL.UNSIGNED_INT_VEC3: return gl2.uniform3uiv(location, arrayValue, 3);\n case GL.UNSIGNED_INT_VEC4: return gl2.uniform4uiv(location, arrayValue, 4);\n\n // WebGL2 - quadratic matrices\n // false: don't transpose the matrix\n case GL.FLOAT_MAT2: return gl.uniformMatrix2fv(location, false, arrayValue);\n case GL.FLOAT_MAT3: return gl.uniformMatrix3fv(location, false, arrayValue);\n case GL.FLOAT_MAT4: return gl.uniformMatrix4fv(location, false, arrayValue);\n\n // WebGL2 - rectangular matrices\n case GL.FLOAT_MAT2x3: return gl2.uniformMatrix2x3fv(location, false, arrayValue);\n case GL.FLOAT_MAT2x4: return gl2.uniformMatrix2x4fv(location, false, arrayValue);\n case GL.FLOAT_MAT3x2: return gl2.uniformMatrix3x2fv(location, false, arrayValue);\n case GL.FLOAT_MAT3x4: return gl2.uniformMatrix3x4fv(location, false, arrayValue);\n case GL.FLOAT_MAT4x2: return gl2.uniformMatrix4x2fv(location, false, arrayValue);\n case GL.FLOAT_MAT4x3: return gl2.uniformMatrix4x3fv(location, false, arrayValue);\n }\n\n throw new Error('Illegal uniform');\n}\n"],"mappings":"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"}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { GL } from '@luma.gl/constants';
|
|
2
1
|
export function getPrimitiveDrawMode(drawMode) {
|
|
3
2
|
switch (drawMode) {
|
|
4
|
-
case
|
|
5
|
-
return
|
|
6
|
-
case
|
|
7
|
-
return
|
|
8
|
-
case
|
|
9
|
-
return
|
|
10
|
-
case
|
|
11
|
-
return
|
|
12
|
-
case
|
|
13
|
-
return
|
|
14
|
-
case
|
|
15
|
-
return
|
|
16
|
-
case
|
|
17
|
-
return
|
|
3
|
+
case 0:
|
|
4
|
+
return 0;
|
|
5
|
+
case 1:
|
|
6
|
+
return 1;
|
|
7
|
+
case 3:
|
|
8
|
+
return 1;
|
|
9
|
+
case 2:
|
|
10
|
+
return 1;
|
|
11
|
+
case 4:
|
|
12
|
+
return 4;
|
|
13
|
+
case 5:
|
|
14
|
+
return 4;
|
|
15
|
+
case 6:
|
|
16
|
+
return 4;
|
|
18
17
|
default:
|
|
19
18
|
throw new Error('drawMode');
|
|
20
19
|
}
|
|
@@ -25,17 +24,17 @@ export function getPrimitiveCount(options) {
|
|
|
25
24
|
vertexCount
|
|
26
25
|
} = options;
|
|
27
26
|
switch (drawMode) {
|
|
28
|
-
case
|
|
29
|
-
case
|
|
27
|
+
case 0:
|
|
28
|
+
case 2:
|
|
30
29
|
return vertexCount;
|
|
31
|
-
case
|
|
30
|
+
case 1:
|
|
32
31
|
return vertexCount / 2;
|
|
33
|
-
case
|
|
32
|
+
case 3:
|
|
34
33
|
return vertexCount - 1;
|
|
35
|
-
case
|
|
34
|
+
case 4:
|
|
36
35
|
return vertexCount / 3;
|
|
37
|
-
case
|
|
38
|
-
case
|
|
36
|
+
case 5:
|
|
37
|
+
case 6:
|
|
39
38
|
return vertexCount - 2;
|
|
40
39
|
default:
|
|
41
40
|
throw new Error('drawMode');
|
|
@@ -51,11 +50,11 @@ export function getVertexCount(options) {
|
|
|
51
50
|
vertexCount
|
|
52
51
|
});
|
|
53
52
|
switch (getPrimitiveDrawMode(drawMode)) {
|
|
54
|
-
case
|
|
53
|
+
case 0:
|
|
55
54
|
return primitiveCount;
|
|
56
|
-
case
|
|
55
|
+
case 1:
|
|
57
56
|
return primitiveCount * 2;
|
|
58
|
-
case
|
|
57
|
+
case 4:
|
|
59
58
|
return primitiveCount * 3;
|
|
60
59
|
default:
|
|
61
60
|
throw new Error('drawMode');
|
|
@@ -64,19 +63,19 @@ export function getVertexCount(options) {
|
|
|
64
63
|
export function getGLDrawMode(topology) {
|
|
65
64
|
switch (topology) {
|
|
66
65
|
case 'point-list':
|
|
67
|
-
return
|
|
66
|
+
return 0;
|
|
68
67
|
case 'line-list':
|
|
69
|
-
return
|
|
68
|
+
return 1;
|
|
70
69
|
case 'line-strip':
|
|
71
|
-
return
|
|
70
|
+
return 3;
|
|
72
71
|
case 'line-loop-webgl':
|
|
73
|
-
return
|
|
72
|
+
return 2;
|
|
74
73
|
case 'triangle-list':
|
|
75
|
-
return
|
|
74
|
+
return 4;
|
|
76
75
|
case 'triangle-strip':
|
|
77
|
-
return
|
|
76
|
+
return 5;
|
|
78
77
|
case 'triangle-fan-webgl':
|
|
79
|
-
return
|
|
78
|
+
return 6;
|
|
80
79
|
default:
|
|
81
80
|
throw new Error(topology);
|
|
82
81
|
}
|
|
@@ -84,19 +83,19 @@ export function getGLDrawMode(topology) {
|
|
|
84
83
|
export function getGLPrimitive(topology) {
|
|
85
84
|
switch (topology) {
|
|
86
85
|
case 'point-list':
|
|
87
|
-
return
|
|
86
|
+
return 0;
|
|
88
87
|
case 'line-list':
|
|
89
|
-
return
|
|
88
|
+
return 1;
|
|
90
89
|
case 'line-strip':
|
|
91
|
-
return
|
|
90
|
+
return 1;
|
|
92
91
|
case 'line-loop-webgl':
|
|
93
|
-
return
|
|
92
|
+
return 1;
|
|
94
93
|
case 'triangle-list':
|
|
95
|
-
return
|
|
94
|
+
return 4;
|
|
96
95
|
case 'triangle-strip':
|
|
97
|
-
return
|
|
96
|
+
return 4;
|
|
98
97
|
case 'triangle-fan-webgl':
|
|
99
|
-
return
|
|
98
|
+
return 4;
|
|
100
99
|
default:
|
|
101
100
|
throw new Error(topology);
|
|
102
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-topology-utils.js","names":["
|
|
1
|
+
{"version":3,"file":"webgl-topology-utils.js","names":["getPrimitiveDrawMode","drawMode","Error","getPrimitiveCount","options","vertexCount","getVertexCount","primitiveCount","getGLDrawMode","topology","getGLPrimitive"],"sources":["../../../src/adapter/helpers/webgl-topology-utils.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {GL, GLPrimitiveTopology, GLPrimitive} from '@luma.gl/constants';\nimport {PrimitiveTopology} from '@luma.gl/core';\n\n// Counts the number of complete primitives given a number of vertices and a drawMode\nexport function getPrimitiveDrawMode(drawMode: GLPrimitiveTopology): GLPrimitive {\n switch (drawMode) {\n case GL.POINTS:\n return GL.POINTS;\n case GL.LINES:\n return GL.LINES;\n case GL.LINE_STRIP:\n return GL.LINES;\n case GL.LINE_LOOP:\n return GL.LINES;\n case GL.TRIANGLES:\n return GL.TRIANGLES;\n case GL.TRIANGLE_STRIP:\n return GL.TRIANGLES;\n case GL.TRIANGLE_FAN:\n return GL.TRIANGLES;\n default:\n throw new Error('drawMode');\n }\n}\n\n// Counts the number of complete \"primitives\" given a number of vertices and a drawMode\nexport function getPrimitiveCount(options: {drawMode: GLPrimitiveTopology, vertexCount: number}): number {\n const {drawMode, vertexCount} = options;\n switch (drawMode) {\n case GL.POINTS:\n case GL.LINE_LOOP:\n return vertexCount;\n case GL.LINES:\n return vertexCount / 2;\n case GL.LINE_STRIP:\n return vertexCount - 1;\n case GL.TRIANGLES:\n return vertexCount / 3;\n case GL.TRIANGLE_STRIP:\n case GL.TRIANGLE_FAN:\n return vertexCount - 2;\n default:\n throw new Error('drawMode');\n }\n}\n\n// Counts the number of vertices after splitting the vertex stream into separate \"primitives\"\nexport function getVertexCount(options: {drawMode: GLPrimitiveTopology, vertexCount: number}): number {\n const {drawMode, vertexCount} = options;\n const primitiveCount = getPrimitiveCount({drawMode, vertexCount});\n switch (getPrimitiveDrawMode(drawMode)) {\n case GL.POINTS:\n return primitiveCount;\n case GL.LINES:\n return primitiveCount * 2;\n case GL.TRIANGLES:\n return primitiveCount * 3;\n default:\n throw new Error('drawMode');\n }\n}\n\n/** Get the primitive type for draw */\nexport function getGLDrawMode(\n topology: PrimitiveTopology\n):\n | GL.POINTS\n | GL.LINES\n | GL.LINE_STRIP\n | GL.LINE_LOOP\n | GL.TRIANGLES\n | GL.TRIANGLE_STRIP\n | GL.TRIANGLE_FAN {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINE_STRIP;\n case 'line-loop-webgl': return GL.LINE_LOOP;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLE_STRIP;\n case 'triangle-fan-webgl': return GL.TRIANGLE_FAN;\n default: throw new Error(topology);\n }\n}\n\n/** Get the primitive type for transform feedback */\nexport function getGLPrimitive(topology: PrimitiveTopology): GL.POINTS | GL.LINES | GL.TRIANGLES {\n // prettier-ignore\n switch (topology) {\n case 'point-list': return GL.POINTS;\n case 'line-list': return GL.LINES;\n case 'line-strip': return GL.LINES;\n case 'line-loop-webgl': return GL.LINES;\n case 'triangle-list': return GL.TRIANGLES;\n case 'triangle-strip': return GL.TRIANGLES;\n case 'triangle-fan-webgl': return GL.TRIANGLES;\n default: throw new Error(topology);\n }\n}\n"],"mappings":"AAOA,OAAO,SAASA,oBAAoBA,CAACC,QAA6B,EAAe;EAC/E,QAAQA,QAAQ;IACd;MACE;IACF;MACE;IACF;MACE;IACF;MACE;IACF;MACE;IACF;MACE;IACF;MACE;IACF;MACE,MAAM,IAAIC,KAAK,CAAC,UAAU,CAAC;EAC/B;AACF;AAGA,OAAO,SAASC,iBAAiBA,CAACC,OAA6D,EAAU;EACvG,MAAM;IAACH,QAAQ;IAAEI;EAAW,CAAC,GAAGD,OAAO;EACvC,QAAQH,QAAQ;IACd;IACA;MACE,OAAOI,WAAW;IACpB;MACE,OAAOA,WAAW,GAAG,CAAC;IACxB;MACE,OAAOA,WAAW,GAAG,CAAC;IACxB;MACE,OAAOA,WAAW,GAAG,CAAC;IACxB;IACA;MACE,OAAOA,WAAW,GAAG,CAAC;IACxB;MACE,MAAM,IAAIH,KAAK,CAAC,UAAU,CAAC;EAC/B;AACF;AAGA,OAAO,SAASI,cAAcA,CAACF,OAA6D,EAAU;EACpG,MAAM;IAACH,QAAQ;IAAEI;EAAW,CAAC,GAAGD,OAAO;EACvC,MAAMG,cAAc,GAAGJ,iBAAiB,CAAC;IAACF,QAAQ;IAAEI;EAAW,CAAC,CAAC;EACjE,QAAQL,oBAAoB,CAACC,QAAQ,CAAC;IACpC;MACE,OAAOM,cAAc;IACvB;MACE,OAAOA,cAAc,GAAG,CAAC;IAC3B;MACE,OAAOA,cAAc,GAAG,CAAC;IAC3B;MACE,MAAM,IAAIL,KAAK,CAAC,UAAU,CAAC;EAC/B;AACF;AAGA,OAAO,SAASM,aAAaA,CAC3BC,QAA2B,EAQT;EAElB,QAAQA,QAAQ;IACd,KAAK,YAAY;MAAE;IACnB,KAAK,WAAW;MAAE;IAClB,KAAK,YAAY;MAAE;IACnB,KAAK,iBAAiB;MAAE;IACxB,KAAK,eAAe;MAAE;IACtB,KAAK,gBAAgB;MAAE;IACvB,KAAK,oBAAoB;MAAE;IAC3B;MAAS,MAAM,IAAIP,KAAK,CAACO,QAAQ,CAAC;EACpC;AACF;AAGA,OAAO,SAASC,cAAcA,CAACD,QAA2B,EAAuC;EAE/F,QAAQA,QAAQ;IACd,KAAK,YAAY;MAAE;IACnB,KAAK,WAAW;MAAE;IAClB,KAAK,YAAY;MAAE;IACnB,KAAK,iBAAiB;MAAE;IACxB,KAAK,eAAe;MAAE;IACtB,KAAK,gBAAgB;MAAE;IACvB,KAAK,oBAAoB;MAAE;IAC3B;MAAS,MAAM,IAAIP,KAAK,CAACO,QAAQ,CAAC;EACpC;AACF"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
let _Symbol$toStringTag;
|
|
2
2
|
import { assert } from '@luma.gl/core';
|
|
3
|
-
import { GL } from '@luma.gl/constants';
|
|
4
3
|
import { WebGLResource } from "./webgl-resource.js";
|
|
5
4
|
import { isRenderbufferFormatSupported } from "../converters/texture-formats.js";
|
|
6
5
|
import { convertTextureFormatToGL, getTextureFormatBytesPerPixel } from "../converters/texture-formats.js";
|
|
@@ -55,13 +54,13 @@ export class WEBGLRenderbuffer extends WebGLResource {
|
|
|
55
54
|
} = props;
|
|
56
55
|
assert(format, 'Needs format');
|
|
57
56
|
this.trackDeallocatedMemory();
|
|
58
|
-
this.gl.bindRenderbuffer(
|
|
57
|
+
this.gl.bindRenderbuffer(36161, this.handle);
|
|
59
58
|
if (samples !== 0 && this.device.isWebGL2) {
|
|
60
|
-
this.gl2.renderbufferStorageMultisample(
|
|
59
|
+
this.gl2.renderbufferStorageMultisample(36161, samples, this.glFormat, width, height);
|
|
61
60
|
} else {
|
|
62
|
-
this.gl.renderbufferStorage(
|
|
61
|
+
this.gl.renderbufferStorage(36161, this.glFormat, width, height);
|
|
63
62
|
}
|
|
64
|
-
this.gl.bindRenderbuffer(
|
|
63
|
+
this.gl.bindRenderbuffer(36161, null);
|
|
65
64
|
this.trackAllocatedMemory(width * height * (samples || 1) * getTextureFormatBytesPerPixel(this.glFormat, this.device.isWebGL2));
|
|
66
65
|
}
|
|
67
66
|
_createHandle() {
|
|
@@ -72,7 +71,7 @@ export class WEBGLRenderbuffer extends WebGLResource {
|
|
|
72
71
|
this.trackDeallocatedMemory();
|
|
73
72
|
}
|
|
74
73
|
_bindHandle(handle) {
|
|
75
|
-
this.gl.bindRenderbuffer(
|
|
74
|
+
this.gl.bindRenderbuffer(36161, handle);
|
|
76
75
|
}
|
|
77
76
|
}
|
|
78
77
|
WEBGLRenderbuffer.defaultProps = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-renderbuffer.js","names":["assert","
|
|
1
|
+
{"version":3,"file":"webgl-renderbuffer.js","names":["assert","WebGLResource","isRenderbufferFormatSupported","convertTextureFormatToGL","getTextureFormatBytesPerPixel","_Symbol$toStringTag","Symbol","toStringTag","WEBGLRenderbuffer","width","props","height","format","samples","attachment","isTextureFormatSupported","device","gl","constructor","Error","defaultProps","glFormat","isWebGL2","_initialize","resize","size","Object","assign","trackDeallocatedMemory","bindRenderbuffer","handle","gl2","renderbufferStorageMultisample","renderbufferStorage","trackAllocatedMemory","_createHandle","createRenderbuffer","_deleteHandle","deleteRenderbuffer","_bindHandle","id","undefined","userData"],"sources":["../../../src/adapter/objects/webgl-renderbuffer.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {assert, ResourceProps, TextureFormat} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport {WebGLDevice} from '../webgl-device';\nimport {WebGLResource} from './webgl-resource';\nimport {isRenderbufferFormatSupported} from '../converters/texture-formats';\nimport {convertTextureFormatToGL, getTextureFormatBytesPerPixel} from '../converters/texture-formats';\n\nexport type RenderbufferProps = ResourceProps & {\n format: TextureFormat;\n width?: number;\n height?: number;\n samples?: number;\n};\n\n/**\n * Renderbuffers are GPU objects that contain images.\n * In contrast to Textures they are optimized for use as render targets, with Framebuffers.\n * while Textures may not be, and are the logical choice when\n * you do not need to sample (i.e. in a post-pass shader)\n * from the produced image. If you need to resample\n * (such as when reading depth back in a second shader pass),\n * use Textures instead.\n * Renderbuffer objects also natively accommodate Multisampling (MSAA).\n */\nexport class WEBGLRenderbuffer extends WebGLResource<RenderbufferProps> {\n static override readonly defaultProps: Required<RenderbufferProps> = {\n id: undefined,\n handle: undefined,\n userData: undefined,\n format: undefined, // 'depth16unorm'\n width: 1,\n height: 1, \n samples: 0\n }; \n\n override get [Symbol.toStringTag](): string { return 'Renderbuffer'; }\n\n get width(): number { return this.props.width; }\n get height(): number { return this.props.height; }\n get format(): TextureFormat { return this.props.format; }\n get samples(): number { return this.props.samples; }\n get attachment() { return }\n\n /** WebGL format constant */\n glFormat: GL;\n\n static isTextureFormatSupported(device: WebGLDevice, format: TextureFormat): boolean {\n return isRenderbufferFormatSupported(device.gl, format);\n }\n\n constructor(device: WebGLDevice, props: RenderbufferProps) {\n // TODO - remove temporary sanity check\n if (typeof props.format === 'number') {\n throw new Error('Renderbuffer');\n }\n super(device, props, WEBGLRenderbuffer.defaultProps);\n this.glFormat = convertTextureFormatToGL(this.props.format, device.isWebGL2);\n this._initialize(this.props);\n }\n\n resize(size: {width: number, height: number}): void {\n // Don't resize if width/height haven't changed\n if (size.width !== this.width || size.height !== this.height) {\n Object.assign(this.props, {...size, format: this.format, samples: this.samples});\n this._initialize(this.props);\n }\n }\n\n // PRIVATE METHODS\n\n /** Creates and initializes a renderbuffer object's data store */\n protected _initialize(props: Required<RenderbufferProps>): void {\n const {format, width, height, samples} = props;\n assert(format, 'Needs format');\n\n this.trackDeallocatedMemory();\n\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, this.handle);\n\n if (samples !== 0 && this.device.isWebGL2) {\n this.gl2.renderbufferStorageMultisample(GL.RENDERBUFFER, samples, this.glFormat, width, height);\n } else {\n this.gl.renderbufferStorage(GL.RENDERBUFFER, this.glFormat, width, height);\n }\n\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, null);\n\n this.trackAllocatedMemory(\n width * height * (samples || 1) * getTextureFormatBytesPerPixel(this.glFormat, this.device.isWebGL2)\n );\n }\n\n // RESOURCE IMPLEMENTATION\n\n override _createHandle() {\n return this.gl.createRenderbuffer();\n }\n\n override _deleteHandle(): void {\n this.gl.deleteRenderbuffer(this.handle);\n this.trackDeallocatedMemory();\n }\n\n override _bindHandle(handle: WEBGLRenderbuffer): void {\n this.gl.bindRenderbuffer(GL.RENDERBUFFER, handle);\n }\n}\n"],"mappings":"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"}
|