@luma.gl/webgl 9.0.0-alpha.35 → 9.0.0-alpha.37
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/device-parameters.d.ts +9 -0
- package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/device-parameters.js +15 -2
- package/dist/adapter/converters/device-parameters.js.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +0 -1
- package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts +2 -2
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +5 -3
- package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +23 -28
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +41 -110
- package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +3 -1
- package/dist/adapter/resources/webgl-shader.js.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +5 -5
- package/dist/adapter/resources/webgl-texture.js.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-vertex-array.js +166 -0
- package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
- package/dist/adapter/webgl-device.d.ts +11 -1
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +66 -1
- package/dist/adapter/webgl-device.js.map +1 -1
- package/dist/classic/clear.js +3 -3
- package/dist/classic/clear.js.map +1 -1
- package/dist/classic/copy-and-blit.d.ts.map +1 -1
- package/dist/classic/copy-and-blit.js +7 -9
- package/dist/classic/copy-and-blit.js.map +1 -1
- package/dist/context/context/create-browser-context.d.ts.map +1 -1
- package/dist/context/context/create-browser-context.js.map +1 -1
- package/dist/context/parameters/unified-parameter-api.d.ts +3 -3
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +4 -4
- package/dist/context/parameters/unified-parameter-api.js.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +3 -3
- package/dist/context/state-tracker/track-context-state.js.map +1 -1
- package/dist/context/state-tracker/with-parameters.d.ts +1 -1
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +3 -3
- package/dist/context/state-tracker/with-parameters.js.map +1 -1
- package/dist/dist.dev.js +1273 -1179
- package/dist/index.cjs +1026 -972
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist.min.js +22 -22
- package/package.json +5 -5
- package/src/.DS_Store +0 -0
- package/src/adapter/.DS_Store +0 -0
- package/src/adapter/converters/device-parameters.ts +34 -2
- package/src/adapter/resources/webgl-command-buffer.ts +2 -2
- package/src/adapter/resources/webgl-render-pass.ts +8 -6
- package/src/adapter/resources/webgl-render-pipeline.ts +141 -174
- package/src/adapter/resources/webgl-sampler.ts +1 -1
- package/src/adapter/resources/webgl-shader.ts +1 -1
- package/src/adapter/resources/webgl-texture.ts +5 -5
- package/src/adapter/resources/webgl-vertex-array.ts +278 -0
- package/src/adapter/webgl-device.ts +137 -11
- package/src/classic/clear.ts +3 -3
- package/src/classic/copy-and-blit.ts +19 -15
- package/src/context/.DS_Store +0 -0
- package/src/context/context/create-browser-context.ts +12 -0
- package/src/context/parameters/unified-parameter-api.ts +4 -4
- package/src/context/state-tracker/track-context-state.ts +3 -3
- package/src/context/state-tracker/with-parameters.ts +3 -3
- package/src/index.ts +38 -16
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -55
- package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
- package/dist/adapter/objects/webgl-vertex-array-object.js +0 -173
- package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
- package/src/adapter/objects/webgl-vertex-array-object.ts +0 -276
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { Device, Parameters, CompareFunction } from '@luma.gl/core';
|
|
2
2
|
import { GL } from '@luma.gl/constants';
|
|
3
3
|
import type { GLParameters } from '@luma.gl/constants';
|
|
4
|
+
/**
|
|
5
|
+
* Execute a function with a set of temporary WebGL parameter overrides
|
|
6
|
+
* - Saves current "global" WebGL context settings
|
|
7
|
+
* - Sets the supplies WebGL context parameters,
|
|
8
|
+
* - Executes supplied function
|
|
9
|
+
* - Restores parameters
|
|
10
|
+
* - Returns the return value of the supplied function
|
|
11
|
+
*/
|
|
12
|
+
export declare function withDeviceAndGLParameters<T = unknown>(device: Device, parameters: Parameters, glParameters: GLParameters, func: (device?: Device) => T): T;
|
|
4
13
|
/**
|
|
5
14
|
* Execute a function with a set of temporary WebGL parameter overrides
|
|
6
15
|
* - Saves current "global" WebGL context settings
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/device-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,UAAU,EACV,eAAe,EAIhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAOrD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,EAC9C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,QA+GzE;AAyBD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,EAAE,CAWpF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,eAAe,CAWtF"}
|
|
1
|
+
{"version":3,"file":"device-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/device-parameters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,UAAU,EACV,eAAe,EAIhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAOrD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,GAAG,OAAO,EACnD,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAiBH;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EACxB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,GAAG,OAAO,EAC9C,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GAC3B,CAAC,CAgBH;AAED,kCAAkC;AAClC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,QA+GzE;AAyBD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,EAAE,CAWpF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,eAAe,CAWtF"}
|
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
import { log, isObjectEmpty } from '@luma.gl/core';
|
|
2
2
|
import { GL } from '@luma.gl/constants';
|
|
3
3
|
import { pushContextState, popContextState } from "../../context/state-tracker/track-context-state.js";
|
|
4
|
-
import {
|
|
4
|
+
import { setGLParameters } from "../../context/parameters/unified-parameter-api.js";
|
|
5
5
|
import { WebGLDevice } from "../webgl-device.js";
|
|
6
|
+
export function withDeviceAndGLParameters(device, parameters, glParameters, func) {
|
|
7
|
+
if (isObjectEmpty(parameters)) {
|
|
8
|
+
return func(device);
|
|
9
|
+
}
|
|
10
|
+
pushContextState(device.gl);
|
|
11
|
+
try {
|
|
12
|
+
setDeviceParameters(device, parameters);
|
|
13
|
+
setGLParameters(device, glParameters);
|
|
14
|
+
return func(device);
|
|
15
|
+
} finally {
|
|
16
|
+
popContextState(device.gl);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
6
19
|
export function withGLParameters(device, parameters, func) {
|
|
7
20
|
if (isObjectEmpty(parameters)) {
|
|
8
21
|
return func(device);
|
|
9
22
|
}
|
|
10
23
|
pushContextState(device.gl);
|
|
11
24
|
try {
|
|
12
|
-
|
|
25
|
+
setGLParameters(device, parameters);
|
|
13
26
|
return func(device);
|
|
14
27
|
} finally {
|
|
15
28
|
popContextState(device.gl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","GL","pushContextState","popContextState","setParameters","WebGLDevice","withGLParameters","device","parameters","func","gl","withDeviceParameters","setDeviceParameters","webglDevice","attach","cullMode","disable","CULL_FACE","enable","cullFace","FRONT","BACK","frontFace","map","ccw","CCW","cw","CW","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","DEPTH_TEST","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","STENCIL_TEST","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","parameter","value","never","NEVER","less","LESS","equal","EQUAL","LEQUAL","greater","GREATER","NOTEQUAL","GEQUAL","always","ALWAYS","convertToCompareFunction","keep","KEEP","zero","ZERO","replace","REPLACE","invert","INVERT","INCR","DECR","INCR_WRAP","DECR_WRAP","message","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["import {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLParameters} from '@luma.gl/constants';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setParameters} from '../../context/parameters/unified-parameter-api';\nimport {WebGLDevice} from '../webgl-device';\n\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters<T = unknown>(\n device: Device,\n parameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(\n device: Device,\n parameters: Parameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(\n map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n })\n );\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(GL.STENCIL_TEST)\n : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (\n parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation\n ) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation(\n 'stencilDepthFailOperation',\n parameters.stencilDepthFailOperation\n );\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n // if (parameters.blend) {\n // gl.enable(GL.BLEND);\n\n // const blend = parameters.blend;\n\n // let colorEquation = (blend && blend.color && blend.color.operation) || 'add';\n // let alphaEquation = (blend && blend.alpha && blend.alpha.operation) || 'add';\n // gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n // let colorSrcFactor = (blend && blend.color && blend.color.srcFactor) || 'one';\n // let colorDstFactor = (blend && blend.color && blend.color.dstFactor) || 'zero';\n // let alphaSrcFactor = (blend && blend.alpha && blend.alpha.srcFactor) || 'one';\n // let alphaDstFactor = (blend && blend.alpha && blend.alpha.dstFactor) || 'zero';\n // gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n // }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n never: GL.NEVER,\n less: GL.LESS,\n equal: GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n greater: GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n always: GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n keep: GL.KEEP,\n zero: GL.ZERO,\n replace: GL.REPLACE,\n invert: GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\n// function convertBlendOperationToEquation(parameter: string, value: string): number {\n// return map(parameter, value, {\n// 'add': GL.FUNC_ADD,\n// 'sub': GL.FUNC_SUBTRACT,\n// 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n// // When using a WebGL 2 context, the following values are available additionally:\n// 'min': GL.MIN,\n// 'max': GL.MAX\n// });\n// }\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","GL","pushContextState","popContextState","setGLParameters","WebGLDevice","withDeviceAndGLParameters","device","parameters","glParameters","func","gl","setDeviceParameters","withGLParameters","withDeviceParameters","webglDevice","attach","cullMode","disable","CULL_FACE","enable","cullFace","FRONT","BACK","frontFace","map","ccw","CCW","cw","CW","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","DEPTH_TEST","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","STENCIL_TEST","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","parameter","value","never","NEVER","less","LESS","equal","EQUAL","LEQUAL","greater","GREATER","NOTEQUAL","GEQUAL","always","ALWAYS","convertToCompareFunction","keep","KEEP","zero","ZERO","replace","REPLACE","invert","INVERT","INCR","DECR","INCR_WRAP","DECR_WRAP","message","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["import {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLParameters} from '@luma.gl/constants';\nimport {pushContextState, popContextState} from '../../context/state-tracker/track-context-state';\nimport {setGLParameters} from '../../context/parameters/unified-parameter-api';\nimport {WebGLDevice} from '../webgl-device';\n\n/* eslint-disable no-unused-expressions */ // For expression ? gl.enable() : gl.disable()\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceAndGLParameters<T = unknown>(\n device: Device, \n parameters: Parameters,\n glParameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n setGLParameters(device, glParameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n * @deprecated use withDeviceParameters instead\n */\nexport function withGLParameters<T = unknown>(\n device: Device,\n parameters: GLParameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setGLParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/**\n * Execute a function with a set of temporary WebGL parameter overrides\n * - Saves current \"global\" WebGL context settings\n * - Sets the supplies WebGL context parameters,\n * - Executes supplied function\n * - Restores parameters\n * - Returns the return value of the supplied function\n */\nexport function withDeviceParameters<T = unknown>(\n device: Device,\n parameters: Parameters,\n func: (device?: Device) => T\n): T {\n if (isObjectEmpty(parameters)) {\n // Avoid setting state if no parameters provided. Just call and return\n return func(device);\n }\n\n // Wrap in a try-catch to ensure that parameters are restored on exceptions\n // @ts-expect-error\n pushContextState(device.gl);\n try {\n setDeviceParameters(device, parameters);\n return func(device);\n } finally {\n // @ts-expect-error\n popContextState(device.gl);\n }\n}\n\n/** Set WebGPU Style Parameters */\nexport function setDeviceParameters(device: Device, parameters: Parameters) {\n const webglDevice = WebGLDevice.attach(device);\n const {gl} = webglDevice;\n\n // RASTERIZATION SETTINGS\n if (parameters.cullMode) {\n switch (parameters.cullMode) {\n case 'none':\n gl.disable(GL.CULL_FACE);\n break;\n case 'front':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.FRONT);\n break;\n case 'back':\n gl.enable(GL.CULL_FACE);\n gl.cullFace(GL.BACK);\n break;\n }\n }\n\n if (parameters.frontFace) {\n gl.frontFace(\n map('frontFace', parameters.frontFace, {\n ccw: GL.CCW,\n cw: GL.CW\n })\n );\n }\n\n if (parameters.depthBias !== undefined) {\n gl.polygonOffset(parameters.depthBias, parameters.depthBiasSlopeScale || 0);\n }\n\n // depthBiasSlopeScale: {\n // // Handled by depthBias\n // },\n\n // DEPTH STENCIL\n\n if (parameters.depthWriteEnabled !== undefined) {\n gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));\n }\n\n if (parameters.depthCompare) {\n parameters.depthCompare !== 'always' ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST);\n gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));\n }\n\n if (parameters.stencilWriteMask) {\n const mask = parameters.stencilWriteMask;\n gl.stencilMaskSeparate(GL.FRONT, mask);\n gl.stencilMaskSeparate(GL.BACK, mask);\n }\n\n if (parameters.stencilReadMask) {\n // stencilReadMask is handle inside stencil***Compare.\n log.warn('stencilReadMask not supported under WebGL');\n }\n\n if (parameters.stencilCompare) {\n const mask = parameters.stencilReadMask || 0xffffffff;\n const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);\n // TODO - ensure back doesn't overwrite\n parameters.stencilCompare !== 'always'\n ? gl.enable(GL.STENCIL_TEST)\n : gl.disable(GL.STENCIL_TEST);\n gl.stencilFuncSeparate(GL.FRONT, glValue, 0, mask);\n gl.stencilFuncSeparate(GL.BACK, glValue, 0, mask);\n }\n\n if (\n parameters.stencilPassOperation &&\n parameters.stencilFailOperation &&\n parameters.stencilDepthFailOperation\n ) {\n const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);\n const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);\n const dpfail = convertStencilOperation(\n 'stencilDepthFailOperation',\n parameters.stencilDepthFailOperation\n );\n gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);\n gl.stencilOpSeparate(GL.BACK, sfail, dpfail, dppass);\n }\n\n // stencilDepthFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // stencilFailOperation() {\n // // handled by stencilPassOperation\n // },\n\n // COLOR STATE\n\n // if (parameters.blend) {\n // gl.enable(GL.BLEND);\n\n // const blend = parameters.blend;\n\n // let colorEquation = (blend && blend.color && blend.color.operation) || 'add';\n // let alphaEquation = (blend && blend.alpha && blend.alpha.operation) || 'add';\n // gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n // let colorSrcFactor = (blend && blend.color && blend.color.srcFactor) || 'one';\n // let colorDstFactor = (blend && blend.color && blend.color.dstFactor) || 'zero';\n // let alphaSrcFactor = (blend && blend.alpha && blend.alpha.srcFactor) || 'one';\n // let alphaDstFactor = (blend && blend.alpha && blend.alpha.dstFactor) || 'zero';\n // gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);\n // }\n}\n\n/*\n rasterizationState: {\n cullMode: \"back\",\n },\n\n depthStencilState: {\n depthWriteEnabled: true,\n depthCompare: \"less\",\n format: \"depth24plus-stencil8\",\n },\n\n colorStates: [\n {\n format: \"bgra8unorm\",\n // colorBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // colorBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n // alphaBlend.srcFactor = wgpu::BlendFactor::SrcAlpha;\n // alphaBlend.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha;\n },\n ],\n });\n*/\n\nexport function convertCompareFunction(parameter: string, value: CompareFunction): GL {\n return map(parameter, value, {\n never: GL.NEVER,\n less: GL.LESS,\n equal: GL.EQUAL,\n 'less-equal': GL.LEQUAL,\n greater: GL.GREATER,\n 'not-equal': GL.NOTEQUAL,\n 'greater-equal': GL.GEQUAL,\n always: GL.ALWAYS\n });\n}\n\nexport function convertToCompareFunction(parameter: string, value: GL): CompareFunction {\n return map(parameter, value, {\n [GL.NEVER]: 'never',\n [GL.LESS]: 'less',\n [GL.EQUAL]: 'equal',\n [GL.LEQUAL]: 'less-equal',\n [GL.GREATER]: 'greater',\n [GL.NOTEQUAL]: 'not-equal',\n [GL.GEQUAL]: 'greater-equal',\n [GL.ALWAYS]: 'always'\n });\n}\n\nfunction convertStencilOperation(parameter: string, value: StencilOperation): GL {\n return map(parameter, value, {\n keep: GL.KEEP,\n zero: GL.ZERO,\n replace: GL.REPLACE,\n invert: GL.INVERT,\n 'increment-clamp': GL.INCR,\n 'decrement-clamp': GL.DECR,\n 'increment-wrap': GL.INCR_WRAP,\n 'decrement-wrap': GL.DECR_WRAP\n });\n}\n\n// function convertBlendOperationToEquation(parameter: string, value: string): number {\n// return map(parameter, value, {\n// 'add': GL.FUNC_ADD,\n// 'sub': GL.FUNC_SUBTRACT,\n// 'reverse-subtract': GL.FUNC_REVERSE_SUBTRACT,\n// // When using a WebGL 2 context, the following values are available additionally:\n// 'min': GL.MIN,\n// 'max': GL.MAX\n// });\n// }\n\nfunction message(parameter: string, value: any): string {\n return `Illegal parameter ${value} for ${parameter}`;\n}\n\nfunction map(parameter: string, value: any, valueMap: Record<string, any>): any {\n if (!(value in valueMap)) {\n throw new Error(message(parameter, value));\n }\n return valueMap[value];\n}\n\nfunction mapBoolean(parameter: string, value: boolean): boolean {\n return value;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-command-buffer.js","names":["CommandBuffer","Texture","GL","WEBGLTexture","cast","value","WEBGLCommandBuffer","constructor","device","commands","submitCommands","arguments","length","undefined","command","name","_copyBufferToBuffer","options","_copyBufferToTexture","_copyTextureToBuffer","_copyTextureToTexture","source","destination","gl2","assertWebGL2","_options$sourceOffset","_options$destinationO","bindBuffer","COPY_READ_BUFFER","handle","COPY_WRITE_BUFFER","copyBufferSubData","sourceOffset","destinationOffset","size","Error","mipLevel","aspect","width","height","depthOrArrayLayers","origin","byteOffset","bytesPerRow","rowsPerImage","framebuffer","destroyFramebuffer","getFramebuffer","webglBuffer","sourceWidth","sourceHeight","sourceFormat","RGBA","sourceType","UNSIGNED_BYTE","PIXEL_PACK_BUFFER","bindFramebuffer","FRAMEBUFFER","readPixels","destroy","destinationMipmaplevel","destinationInternalFormat","sourceX","sourceY","isSubCopy","gl","texture","textureTarget","Number","isFinite","bind","copyTexImage2D","unbind","prevHandle","glFormatToComponents","format","ALPHA","R32F","RED","RG32F","RG","RGB","RGB32F","RGBA32F","glTypeToBytes","type","UNSIGNED_SHORT_5_6_5","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","FLOAT","id","createFramebuffer","colorAttachments"],"sources":["../../../src/adapter/resources/webgl-command-buffer.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport type {\n CopyBufferToBufferOptions,\n CopyBufferToTextureOptions,\n CopyTextureToBufferOptions,\n CopyTextureToTextureOptions\n} from '@luma.gl/core';\nimport {\n CommandBuffer,\n Texture,\n // Buffer,\n Framebuffer\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\n\n// import {getTypedArrayFromGLType, getGLTypeFromTypedArray} from '../../classic/typed-array-utils';\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLBuffer} from './webgl-buffer';\nimport {WEBGLTexture} from './webgl-texture';\nimport {WEBGLFramebuffer} from './webgl-framebuffer';\n\nfunction cast<T>(value: unknown): T {\n return value as T;\n}\n\ntype CopyBufferToBufferCommand = {\n name: 'copy-buffer-to-buffer';\n options: CopyBufferToBufferOptions;\n};\n\ntype CopyBufferToTextureCommand = {\n name: 'copy-buffer-to-texture';\n options: CopyBufferToTextureOptions;\n};\n\ntype CopyTextureToBufferCommand = {\n name: 'copy-texture-to-buffer';\n options: CopyTextureToBufferOptions;\n};\n\ntype CopyTextureToTextureCommand = {\n name: 'copy-texture-to-texture';\n options: CopyTextureToTextureOptions;\n};\n\ntype Command =\n | CopyBufferToBufferCommand\n | CopyBufferToTextureCommand\n | CopyTextureToBufferCommand\n | CopyTextureToTextureCommand;\n\nexport class WEBGLCommandBuffer extends CommandBuffer {\n device: WebGLDevice;\n commands: Command[] = [];\n\n constructor(device: WebGLDevice) {\n super({});\n this.device = device;\n }\n\n submitCommands(commands: Command[] = this.commands) {\n for (const command of commands) {\n switch (command.name) {\n case 'copy-buffer-to-buffer':\n _copyBufferToBuffer(this.device, command.options);\n break;\n case 'copy-buffer-to-texture':\n _copyBufferToTexture(this.device, command.options);\n break;\n case 'copy-texture-to-buffer':\n _copyTextureToBuffer(this.device, command.options);\n break;\n case 'copy-texture-to-texture':\n _copyTextureToTexture(this.device, command.options);\n break;\n }\n }\n }\n}\n\nfunction _copyBufferToBuffer(device: WebGLDevice, options: CopyBufferToBufferOptions): void {\n const source = cast<WEBGLBuffer>(options.source);\n const destination = cast<WEBGLBuffer>(options.destination);\n\n const gl2 = device.assertWebGL2();\n if (gl2) {\n // In WebGL2 we can perform the copy on the GPU\n // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type\n gl2.bindBuffer(GL.COPY_READ_BUFFER, source.handle);\n gl2.bindBuffer(GL.COPY_WRITE_BUFFER, destination.handle);\n gl2.copyBufferSubData(\n GL.COPY_READ_BUFFER,\n GL.COPY_WRITE_BUFFER,\n options.sourceOffset ?? 0,\n options.destinationOffset ?? 0,\n options.size\n );\n gl2.bindBuffer(GL.COPY_READ_BUFFER, null);\n gl2.bindBuffer(GL.COPY_WRITE_BUFFER, null);\n } else {\n // TODO - in WebGL1 we would have to read back to CPU\n // read / write buffer from / to CPU\n throw new Error('copyBufferToBuffer not implemented in WebGL1');\n }\n}\n\n/**\n * Copies data from a Buffer object into a Texture object\n * NOTE: doesn't wait for copy to be complete\n */\nfunction _copyBufferToTexture(device: WebGLDevice, options: CopyBufferToTextureOptions): void {\n throw new Error('Not implemented');\n}\n\n/**\n * Copies data from a Texture object into a Buffer object.\n * NOTE: doesn't wait for copy to be complete\n */\nfunction _copyTextureToBuffer(device: WebGLDevice, options: CopyTextureToBufferOptions): void {\n const {\n /** Texture to copy to/from. */\n source,\n /** Mip-map level of the texture to copy to/from. (Default 0) */\n mipLevel = 0,\n /** Defines which aspects of the texture to copy to/from. */\n aspect = 'all',\n\n /** Width to copy */\n width = options.source.width,\n /** Height to copy */\n height = options.source.height,\n depthOrArrayLayers = 0,\n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */\n origin = [0, 0],\n\n /** Destination buffer */\n destination,\n /** Offset, in bytes, from the beginning of the buffer to the start of the image data (default 0) */\n byteOffset = 0,\n /**\n * The stride, in bytes, between the beginning of each block row and the subsequent block row.\n * Required if there are multiple block rows (i.e. the copy height or depth is more than one block).\n */\n bytesPerRow,\n /**\n * Number of block rows per single image of the texture.\n * rowsPerImage × bytesPerRow is the stride, in bytes, between the beginning of each image of data and the subsequent image.\n * Required if there are multiple images (i.e. the copy depth is more than one).\n */\n rowsPerImage\n } = options;\n\n // TODO - Not possible to read just stencil or depth part in WebGL?\n if (aspect !== 'all') {\n throw new Error('not supported');\n }\n\n // TODO - mipLevels are set when attaching texture to framebuffer\n if (mipLevel !== 0 || depthOrArrayLayers !== undefined || bytesPerRow || rowsPerImage) {\n throw new Error('not implemented');\n }\n\n // Asynchronous read (PIXEL_PACK_BUFFER) is WebGL2 only feature\n const gl2 = device.assertWebGL2();\n\n const {framebuffer, destroyFramebuffer} = getFramebuffer(source);\n try {\n const webglBuffer = destination as WEBGLBuffer;\n const sourceWidth = width || framebuffer.width;\n const sourceHeight = height || framebuffer.height;\n\n // TODO - hack - should be deduced\n const sourceFormat = GL.RGBA;\n const sourceType = GL.UNSIGNED_BYTE;\n\n // if (!target) {\n // // Create new buffer with enough size\n // const components = glFormatToComponents(sourceFormat);\n // const byteCount = glTypeToBytes(sourceType);\n // const byteLength = byteOffset + sourceWidth * sourceHeight * components * byteCount;\n // target = device.createBuffer({byteLength});\n // }\n\n gl2.bindBuffer(GL.PIXEL_PACK_BUFFER, webglBuffer.handle);\n gl2.bindFramebuffer(GL.FRAMEBUFFER, framebuffer.handle);\n\n gl2.readPixels(\n origin[0],\n origin[1],\n sourceWidth,\n sourceHeight,\n sourceFormat,\n sourceType,\n byteOffset\n );\n } finally {\n gl2.bindBuffer(GL.PIXEL_PACK_BUFFER, null);\n gl2.bindFramebuffer(GL.FRAMEBUFFER, null);\n\n if (destroyFramebuffer) {\n framebuffer.destroy();\n }\n }\n}\n\n/**\n * Copies data from a Framebuffer or a Texture object into a Buffer object.\n * NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transfer.\nexport function readPixelsToBuffer(\n source: Framebuffer | Texture,\n options?: {\n sourceX?: number;\n sourceY?: number;\n sourceFormat?: number;\n target?: Buffer; // A new Buffer object is created when not provided.\n targetByteOffset?: number; // byte offset in buffer object\n // following parameters are auto deduced if not provided\n sourceWidth?: number;\n sourceHeight?: number;\n sourceType?: number;\n }\n): Buffer\n */\n\n/**\n * Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)\n */\n// eslint-disable-next-line complexity, max-statements\nfunction _copyTextureToTexture(device: WebGLDevice, options: CopyTextureToTextureOptions): void {\n const {\n /** Texture to copy to/from. */\n source,\n /** Mip-map level of the texture to copy to/from. (Default 0) */\n // mipLevel = 0,\n /** Defines which aspects of the texture to copy to/from. */\n // aspect = 'all',\n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */\n origin = [0, 0],\n\n /** Texture to copy to/from. */\n destination,\n /** Mip-map level of the texture to copy to/from. (Default 0) */\n // destinationMipLevel = options.mipLevel,\n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */\n // destinationOrigin = [0, 0],\n /** Defines which aspects of the texture to copy to/from. */\n // destinationAspect = options.aspect,\n\n } = options;\n\n let {\n width = options.destination.width,\n height = options.destination.width,\n // depthOrArrayLayers = 0\n } = options;\n\n const destinationMipmaplevel = 0;\n const destinationInternalFormat = GL.RGBA;\n\n const {framebuffer, destroyFramebuffer} = getFramebuffer(source);\n const [sourceX, sourceY] = origin;\n\n const isSubCopy = false;\n // typeof destinationX !== 'undefined' ||\n // typeof destinationY !== 'undefined' ||\n // typeof destinationZ !== 'undefined';\n\n // destinationX = destinationX || 0;\n // destinationY = destinationY || 0;\n // destinationZ = destinationZ || 0;\n device.gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer.handle);\n // TODO - support gl.readBuffer (WebGL2 only)\n // const prevBuffer = gl.readBuffer(attachment);\n\n let texture = null;\n let textureTarget: GL;\n if (destination instanceof WEBGLTexture) {\n texture = destination;\n width = Number.isFinite(width) ? width : texture.width;\n height = Number.isFinite(height) ? height : texture.height;\n texture.bind(0);\n textureTarget = texture.destination;\n } else {\n throw new Error('whoops');\n // textureTarget = destination;\n }\n\n if (!isSubCopy) {\n device.gl.copyTexImage2D(\n textureTarget,\n destinationMipmaplevel,\n destinationInternalFormat,\n sourceX,\n sourceY,\n width,\n height,\n 0 /* border must be 0 */\n );\n } else {\n // switch (textureTarget) {\n // case GL.TEXTURE_2D:\n // case GL.TEXTURE_CUBE_MAP:\n // device.gl.copyTexSubImage2D(\n // textureTarget,\n // destinationMipmaplevel,\n // destinationX,\n // destinationY,\n // sourceX,\n // sourceY,\n // width,\n // height\n // );\n // break;\n // case GL.TEXTURE_2D_ARRAY:\n // case GL.TEXTURE_3D:\n // const gl2 = device.assertWebGL2();\n // gl2.copyTexSubImage3D(\n // textureTarget,\n // destinationMipmaplevel,\n // destinationX,\n // destinationY,\n // destinationZ,\n // sourceX,\n // sourceY,\n // width,\n // height\n // );\n // break;\n // default:\n // }\n }\n if (texture) {\n texture.unbind();\n }\n // @ts-expect-error\n device.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (destroyFramebuffer) {\n framebuffer.destroy();\n }\n return texture;\n}\n\n// Returns number of components in a specific readPixels WebGL format\nexport function glFormatToComponents(format): 1 | 2 | 3 | 4 {\n switch (format) {\n case GL.ALPHA:\n case GL.R32F:\n case GL.RED:\n return 1;\n case GL.RG32F:\n case GL.RG:\n return 2;\n case GL.RGB:\n case GL.RGB32F:\n return 3;\n case GL.RGBA:\n case GL.RGBA32F:\n return 4;\n // TODO: Add support for additional WebGL2 formats\n default:\n throw new Error('GLFormat');\n }\n}\n\n// Return byte count for given readPixels WebGL type\nexport function glTypeToBytes(type: GL): 1 | 2 | 4 {\n switch (type) {\n case GL.UNSIGNED_BYTE:\n return 1;\n case GL.UNSIGNED_SHORT_5_6_5:\n case GL.UNSIGNED_SHORT_4_4_4_4:\n case GL.UNSIGNED_SHORT_5_5_5_1:\n return 2;\n case GL.FLOAT:\n return 4;\n // TODO: Add support for additional WebGL2 types\n default:\n throw new Error('GLType');\n }\n}\n\n// Helper methods\n\nfunction getFramebuffer(source: Texture | Framebuffer): {\n framebuffer: WEBGLFramebuffer;\n destroyFramebuffer: boolean;\n} {\n if (source instanceof Texture) {\n const {width, height, id} = source;\n const framebuffer = source.device.createFramebuffer({\n id: `framebuffer-for-${id}`,\n width,\n height,\n colorAttachments: [source]\n }) as unknown as WEBGLFramebuffer;\n\n return {framebuffer, destroyFramebuffer: true};\n }\n return {framebuffer: source as unknown as WEBGLFramebuffer, destroyFramebuffer: false};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webgl-command-buffer.js","names":["CommandBuffer","Texture","GL","WEBGLTexture","cast","value","WEBGLCommandBuffer","constructor","device","commands","submitCommands","arguments","length","undefined","command","name","_copyBufferToBuffer","options","_copyBufferToTexture","_copyTextureToBuffer","_copyTextureToTexture","source","destination","gl2","assertWebGL2","_options$sourceOffset","_options$destinationO","bindBuffer","COPY_READ_BUFFER","handle","COPY_WRITE_BUFFER","copyBufferSubData","sourceOffset","destinationOffset","size","Error","mipLevel","aspect","width","height","depthOrArrayLayers","origin","byteOffset","bytesPerRow","rowsPerImage","framebuffer","destroyFramebuffer","getFramebuffer","webglBuffer","sourceWidth","sourceHeight","sourceFormat","RGBA","sourceType","UNSIGNED_BYTE","PIXEL_PACK_BUFFER","bindFramebuffer","FRAMEBUFFER","readPixels","destroy","destinationMipmaplevel","destinationInternalFormat","sourceX","sourceY","isSubCopy","gl","texture","textureTarget","Number","isFinite","bind","copyTexImage2D","unbind","glFormatToComponents","format","ALPHA","R32F","RED","RG32F","RG","RGB","RGB32F","RGBA32F","glTypeToBytes","type","UNSIGNED_SHORT_5_6_5","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","FLOAT","id","createFramebuffer","colorAttachments"],"sources":["../../../src/adapter/resources/webgl-command-buffer.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport type {\n CopyBufferToBufferOptions,\n CopyBufferToTextureOptions,\n CopyTextureToBufferOptions,\n CopyTextureToTextureOptions\n} from '@luma.gl/core';\nimport {\n CommandBuffer,\n Texture,\n // Buffer,\n Framebuffer\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\n\n// import {getTypedArrayFromGLType, getGLTypeFromTypedArray} from '../../classic/typed-array-utils';\nimport {WebGLDevice} from '../webgl-device';\nimport {WEBGLBuffer} from './webgl-buffer';\nimport {WEBGLTexture} from './webgl-texture';\nimport {WEBGLFramebuffer} from './webgl-framebuffer';\n\nfunction cast<T>(value: unknown): T {\n return value as T;\n}\n\ntype CopyBufferToBufferCommand = {\n name: 'copy-buffer-to-buffer';\n options: CopyBufferToBufferOptions;\n};\n\ntype CopyBufferToTextureCommand = {\n name: 'copy-buffer-to-texture';\n options: CopyBufferToTextureOptions;\n};\n\ntype CopyTextureToBufferCommand = {\n name: 'copy-texture-to-buffer';\n options: CopyTextureToBufferOptions;\n};\n\ntype CopyTextureToTextureCommand = {\n name: 'copy-texture-to-texture';\n options: CopyTextureToTextureOptions;\n};\n\ntype Command =\n | CopyBufferToBufferCommand\n | CopyBufferToTextureCommand\n | CopyTextureToBufferCommand\n | CopyTextureToTextureCommand;\n\nexport class WEBGLCommandBuffer extends CommandBuffer {\n device: WebGLDevice;\n commands: Command[] = [];\n\n constructor(device: WebGLDevice) {\n super({});\n this.device = device;\n }\n\n submitCommands(commands: Command[] = this.commands) {\n for (const command of commands) {\n switch (command.name) {\n case 'copy-buffer-to-buffer':\n _copyBufferToBuffer(this.device, command.options);\n break;\n case 'copy-buffer-to-texture':\n _copyBufferToTexture(this.device, command.options);\n break;\n case 'copy-texture-to-buffer':\n _copyTextureToBuffer(this.device, command.options);\n break;\n case 'copy-texture-to-texture':\n _copyTextureToTexture(this.device, command.options);\n break;\n }\n }\n }\n}\n\nfunction _copyBufferToBuffer(device: WebGLDevice, options: CopyBufferToBufferOptions): void {\n const source = cast<WEBGLBuffer>(options.source);\n const destination = cast<WEBGLBuffer>(options.destination);\n\n const gl2 = device.assertWebGL2();\n if (gl2) {\n // In WebGL2 we can perform the copy on the GPU\n // Use GL.COPY_READ_BUFFER+GL.COPY_WRITE_BUFFER avoid disturbing other targets and locking type\n gl2.bindBuffer(GL.COPY_READ_BUFFER, source.handle);\n gl2.bindBuffer(GL.COPY_WRITE_BUFFER, destination.handle);\n gl2.copyBufferSubData(\n GL.COPY_READ_BUFFER,\n GL.COPY_WRITE_BUFFER,\n options.sourceOffset ?? 0,\n options.destinationOffset ?? 0,\n options.size\n );\n gl2.bindBuffer(GL.COPY_READ_BUFFER, null);\n gl2.bindBuffer(GL.COPY_WRITE_BUFFER, null);\n } else {\n // TODO - in WebGL1 we would have to read back to CPU\n // read / write buffer from / to CPU\n throw new Error('copyBufferToBuffer not implemented in WebGL1');\n }\n}\n\n/**\n * Copies data from a Buffer object into a Texture object\n * NOTE: doesn't wait for copy to be complete\n */\nfunction _copyBufferToTexture(device: WebGLDevice, options: CopyBufferToTextureOptions): void {\n throw new Error('Not implemented');\n}\n\n/**\n * Copies data from a Texture object into a Buffer object.\n * NOTE: doesn't wait for copy to be complete\n */\nfunction _copyTextureToBuffer(device: WebGLDevice, options: CopyTextureToBufferOptions): void {\n const {\n /** Texture to copy to/from. */\n source,\n /** Mip-map level of the texture to copy to/from. (Default 0) */\n mipLevel = 0,\n /** Defines which aspects of the texture to copy to/from. */\n aspect = 'all',\n\n /** Width to copy */\n width = options.source.width,\n /** Height to copy */\n height = options.source.height,\n depthOrArrayLayers = 0,\n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */\n origin = [0, 0],\n\n /** Destination buffer */\n destination,\n /** Offset, in bytes, from the beginning of the buffer to the start of the image data (default 0) */\n byteOffset = 0,\n /**\n * The stride, in bytes, between the beginning of each block row and the subsequent block row.\n * Required if there are multiple block rows (i.e. the copy height or depth is more than one block).\n */\n bytesPerRow,\n /**\n * Number of block rows per single image of the texture.\n * rowsPerImage × bytesPerRow is the stride, in bytes, between the beginning of each image of data and the subsequent image.\n * Required if there are multiple images (i.e. the copy depth is more than one).\n */\n rowsPerImage\n } = options;\n\n // TODO - Not possible to read just stencil or depth part in WebGL?\n if (aspect !== 'all') {\n throw new Error('not supported');\n }\n\n // TODO - mipLevels are set when attaching texture to framebuffer\n if (mipLevel !== 0 || depthOrArrayLayers !== undefined || bytesPerRow || rowsPerImage) {\n throw new Error('not implemented');\n }\n\n // Asynchronous read (PIXEL_PACK_BUFFER) is WebGL2 only feature\n const gl2 = device.assertWebGL2();\n\n const {framebuffer, destroyFramebuffer} = getFramebuffer(source);\n try {\n const webglBuffer = destination as WEBGLBuffer;\n const sourceWidth = width || framebuffer.width;\n const sourceHeight = height || framebuffer.height;\n\n // TODO - hack - should be deduced\n const sourceFormat = GL.RGBA;\n const sourceType = GL.UNSIGNED_BYTE;\n\n // if (!target) {\n // // Create new buffer with enough size\n // const components = glFormatToComponents(sourceFormat);\n // const byteCount = glTypeToBytes(sourceType);\n // const byteLength = byteOffset + sourceWidth * sourceHeight * components * byteCount;\n // target = device.createBuffer({byteLength});\n // }\n\n gl2.bindBuffer(GL.PIXEL_PACK_BUFFER, webglBuffer.handle);\n gl2.bindFramebuffer(GL.FRAMEBUFFER, framebuffer.handle);\n\n gl2.readPixels(\n origin[0],\n origin[1],\n sourceWidth,\n sourceHeight,\n sourceFormat,\n sourceType,\n byteOffset\n );\n } finally {\n gl2.bindBuffer(GL.PIXEL_PACK_BUFFER, null);\n gl2.bindFramebuffer(GL.FRAMEBUFFER, null);\n\n if (destroyFramebuffer) {\n framebuffer.destroy();\n }\n }\n}\n\n/**\n * Copies data from a Framebuffer or a Texture object into a Buffer object.\n * NOTE: doesn't wait for copy to be complete, it programs GPU to perform a DMA transfer.\nexport function readPixelsToBuffer(\n source: Framebuffer | Texture,\n options?: {\n sourceX?: number;\n sourceY?: number;\n sourceFormat?: number;\n target?: Buffer; // A new Buffer object is created when not provided.\n targetByteOffset?: number; // byte offset in buffer object\n // following parameters are auto deduced if not provided\n sourceWidth?: number;\n sourceHeight?: number;\n sourceType?: number;\n }\n): Buffer\n */\n\n/**\n * Copy a rectangle from a Framebuffer or Texture object into a texture (at an offset)\n */\n// eslint-disable-next-line complexity, max-statements\nfunction _copyTextureToTexture(device: WebGLDevice, options: CopyTextureToTextureOptions): void {\n const {\n /** Texture to copy to/from. */\n source,\n /** Mip-map level of the texture to copy to/from. (Default 0) */\n // mipLevel = 0,\n /** Defines which aspects of the texture to copy to/from. */\n // aspect = 'all',\n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */\n origin = [0, 0],\n\n /** Texture to copy to/from. */\n destination,\n /** Mip-map level of the texture to copy to/from. (Default 0) */\n // destinationMipLevel = options.mipLevel,\n /** Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from. */\n // destinationOrigin = [0, 0],\n /** Defines which aspects of the texture to copy to/from. */\n // destinationAspect = options.aspect,\n\n } = options;\n\n let {\n width = options.destination.width,\n height = options.destination.width,\n // depthOrArrayLayers = 0\n } = options;\n\n const destinationMipmaplevel = 0;\n const destinationInternalFormat = GL.RGBA;\n\n const {framebuffer, destroyFramebuffer} = getFramebuffer(source);\n const [sourceX, sourceY] = origin;\n\n const isSubCopy = false;\n // typeof destinationX !== 'undefined' ||\n // typeof destinationY !== 'undefined' ||\n // typeof destinationZ !== 'undefined';\n\n // destinationX = destinationX || 0;\n // destinationY = destinationY || 0;\n // destinationZ = destinationZ || 0;\n device.gl.bindFramebuffer(GL.FRAMEBUFFER, framebuffer.handle);\n // TODO - support gl.readBuffer (WebGL2 only)\n // const prevBuffer = gl.readBuffer(attachment);\n\n let texture = null;\n let textureTarget: GL;\n if (destination instanceof WEBGLTexture) {\n texture = destination;\n width = Number.isFinite(width) ? width : texture.width;\n height = Number.isFinite(height) ? height : texture.height;\n texture.bind(0);\n textureTarget = texture.destination;\n } else {\n throw new Error('whoops');\n // textureTarget = destination;\n }\n\n if (!isSubCopy) {\n device.gl.copyTexImage2D(\n textureTarget,\n destinationMipmaplevel,\n destinationInternalFormat,\n sourceX,\n sourceY,\n width,\n height,\n 0 /* border must be 0 */\n );\n } else {\n // switch (textureTarget) {\n // case GL.TEXTURE_2D:\n // case GL.TEXTURE_CUBE_MAP:\n // device.gl.copyTexSubImage2D(\n // textureTarget,\n // destinationMipmaplevel,\n // destinationX,\n // destinationY,\n // sourceX,\n // sourceY,\n // width,\n // height\n // );\n // break;\n // case GL.TEXTURE_2D_ARRAY:\n // case GL.TEXTURE_3D:\n // const gl2 = device.assertWebGL2();\n // gl2.copyTexSubImage3D(\n // textureTarget,\n // destinationMipmaplevel,\n // destinationX,\n // destinationY,\n // destinationZ,\n // sourceX,\n // sourceY,\n // width,\n // height\n // );\n // break;\n // default:\n // }\n }\n if (texture) {\n texture.unbind();\n }\n // ts-expect-error\n // device.gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);\n if (destroyFramebuffer) {\n framebuffer.destroy();\n }\n return texture;\n}\n\n// Returns number of components in a specific readPixels WebGL format\nexport function glFormatToComponents(format): 1 | 2 | 3 | 4 {\n switch (format) {\n case GL.ALPHA:\n case GL.R32F:\n case GL.RED:\n return 1;\n case GL.RG32F:\n case GL.RG:\n return 2;\n case GL.RGB:\n case GL.RGB32F:\n return 3;\n case GL.RGBA:\n case GL.RGBA32F:\n return 4;\n // TODO: Add support for additional WebGL2 formats\n default:\n throw new Error('GLFormat');\n }\n}\n\n// Return byte count for given readPixels WebGL type\nexport function glTypeToBytes(type: GL): 1 | 2 | 4 {\n switch (type) {\n case GL.UNSIGNED_BYTE:\n return 1;\n case GL.UNSIGNED_SHORT_5_6_5:\n case GL.UNSIGNED_SHORT_4_4_4_4:\n case GL.UNSIGNED_SHORT_5_5_5_1:\n return 2;\n case GL.FLOAT:\n return 4;\n // TODO: Add support for additional WebGL2 types\n default:\n throw new Error('GLType');\n }\n}\n\n// Helper methods\n\nfunction getFramebuffer(source: Texture | Framebuffer): {\n framebuffer: WEBGLFramebuffer;\n destroyFramebuffer: boolean;\n} {\n if (source instanceof Texture) {\n const {width, height, id} = source;\n const framebuffer = source.device.createFramebuffer({\n id: `framebuffer-for-${id}`,\n width,\n height,\n colorAttachments: [source]\n }) as unknown as WEBGLFramebuffer;\n\n return {framebuffer, destroyFramebuffer: true};\n }\n return {framebuffer: source as unknown as WEBGLFramebuffer, destroyFramebuffer: false};\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RenderPass, RenderPassProps,
|
|
1
|
+
import { RenderPass, RenderPassProps, NumberArray, RenderPassParameters } from '@luma.gl/core';
|
|
2
2
|
import { WebGLDevice } from '../webgl-device';
|
|
3
3
|
import { GLParameters } from '@luma.gl/constants';
|
|
4
4
|
export declare class WEBGLRenderPass extends RenderPass {
|
|
@@ -21,6 +21,6 @@ export declare class WEBGLRenderPass extends RenderPass {
|
|
|
21
21
|
/**
|
|
22
22
|
* WebGL2 - clear a specific color buffer
|
|
23
23
|
*/
|
|
24
|
-
protected clearColorBuffer(drawBuffer?: number, value?:
|
|
24
|
+
protected clearColorBuffer(drawBuffer?: number, value?: NumberArray): void;
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=webgl-render-pass.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAK,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAWpD,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;gBAEf,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;IAWvD,GAAG,IAAI,IAAI;IAIX,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IACxC,aAAa,IAAI,IAAI;IACrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAS5C;;OAEG;IACH,aAAa,CAAC,UAAU,GAAE,oBAAyB,GAAG,IAAI;IAiD1D;;OAEG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IA+BvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,UAAU,GAAE,MAAU,EAAE,KAAK,GAAE,WAA0B;CAwCrF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { RenderPass } from '@luma.gl/core';
|
|
2
2
|
import { GL } from '@luma.gl/constants';
|
|
3
|
-
import {
|
|
3
|
+
import { withGLParameters } from "../../context/state-tracker/with-parameters.js";
|
|
4
|
+
import { setGLParameters } from "../../context/parameters/unified-parameter-api.js";
|
|
4
5
|
const GL_DEPTH_BUFFER_BIT = 0x00000100;
|
|
5
6
|
const GL_STENCIL_BUFFER_BIT = 0x00000400;
|
|
6
7
|
const GL_COLOR_BUFFER_BIT = 0x00004000;
|
|
@@ -49,6 +50,7 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
49
50
|
parameters[GL.STENCIL_REF] = parameters.stencilReference;
|
|
50
51
|
}
|
|
51
52
|
this.glParameters = glParameters;
|
|
53
|
+
setGLParameters(this.device, glParameters);
|
|
52
54
|
}
|
|
53
55
|
clear() {
|
|
54
56
|
const glParameters = {
|
|
@@ -68,7 +70,7 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
68
70
|
glParameters.clearStencil = this.props.clearStencil;
|
|
69
71
|
}
|
|
70
72
|
if (clearMask !== 0) {
|
|
71
|
-
|
|
73
|
+
withGLParameters(this.device, glParameters, () => {
|
|
72
74
|
this.device.gl.clear(clearMask);
|
|
73
75
|
});
|
|
74
76
|
}
|
|
@@ -76,7 +78,7 @@ export class WEBGLRenderPass extends RenderPass {
|
|
|
76
78
|
clearColorBuffer() {
|
|
77
79
|
let drawBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
78
80
|
let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0, 0];
|
|
79
|
-
|
|
81
|
+
withGLParameters(this.device.gl2, {
|
|
80
82
|
framebuffer: this.props.framebuffer
|
|
81
83
|
}, () => {
|
|
82
84
|
switch (value.constructor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-render-pass.js","names":["RenderPass","GL","withParameters","GL_DEPTH_BUFFER_BIT","GL_STENCIL_BUFFER_BIT","GL_COLOR_BUFFER_BIT","GL_COLOR","WEBGLRenderPass","constructor","device","props","glParameters","setParameters","parameters","clear","end","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel","arguments","length","undefined","framebuffer","depthReadOnly","depthMask","stencilMask","stencilReadOnly","RASTERIZER_DISCARD","discard","viewport","slice","depthRange","scissorTest","Boolean","scissorRect","scissor","blendConstant","blendColor","stencilReference","console","warn","STENCIL_REF","clearMask","clearColor","clearDepth","clearStencil","gl","clearColorBuffer","drawBuffer","value","gl2","Int32Array","clearBufferiv","Uint32Array","clearBufferuiv","Float32Array","clearBufferfv"],"sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"sourcesContent":["import {RenderPass, RenderPassProps, NumericArray, RenderPassParameters} from '@luma.gl/core';\nimport {WebGLDevice} from '../webgl-device';\nimport {GL, GLParameters} from '@luma.gl/constants';\nimport {withParameters} from '../../context/state-tracker/with-parameters';\n\n// Should collapse during minification\n\nconst GL_DEPTH_BUFFER_BIT = 0x00000100;\nconst GL_STENCIL_BUFFER_BIT = 0x00000400;\nconst GL_COLOR_BUFFER_BIT = 0x00004000;\n\nconst GL_COLOR = 0x1800;\n\nexport class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n /** Parameters that should be applied before each draw call */\n glParameters: GLParameters;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n this.device = device;\n\n // TODO - do parameters (scissorRect) affect the clear operation?\n this.setParameters(this.props.parameters);\n\n // Hack - for now WebGL draws in \"immediate mode\" (instead of queueing the operations)...\n this.clear();\n }\n\n end(): void {\n // should add commands to CommandEncoder.\n }\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n\n /**\n * Maps RenderPass parameters to GL parameters\n */\n setParameters(parameters: RenderPassParameters = {}): void {\n const glParameters: GLParameters = {};\n\n // Framebuffers are specified using parameters in WebGL\n if (this.props.framebuffer) {\n glParameters.framebuffer = this.props.framebuffer;\n }\n\n if (this.props.depthReadOnly) {\n glParameters.depthMask = !this.props.depthReadOnly;\n }\n\n glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;\n\n glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;\n\n // Map the four renderpass parameters to WebGL parameters\n if (parameters.viewport) {\n // WebGPU viewports are 6 coordinates (X, Y, Z)\n if (parameters.viewport.length >= 6) {\n glParameters.viewport = parameters.viewport.slice(0, 4);\n glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];\n } else {\n // WebGL viewports are 4 coordinates (X, Y)\n glParameters.viewport = parameters.viewport;\n }\n }\n glParameters.scissorTest = Boolean(parameters.scissorRect);\n if (parameters.scissorRect) {\n glParameters.scissor = parameters.scissorRect;\n }\n if (parameters.blendConstant) {\n glParameters.blendColor = parameters.blendConstant;\n }\n if (parameters.stencilReference) {\n // eslint-disable-next-line no-console\n console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');\n // parameters.stencilFunc = [func, ref, mask];\n // Does this work?\n parameters[GL.STENCIL_REF] = parameters.stencilReference;\n }\n\n this.glParameters = glParameters;\n }\n\n // Internal\n\n /**\n * Optionally clears depth, color and stencil buffers based on parameters\n */\n protected clear(): void {\n const glParameters: GLParameters = {...this.glParameters};\n\n let clearMask = 0;\n\n if (this.props.clearColor !== false) {\n clearMask |= GL_COLOR_BUFFER_BIT;\n glParameters.clearColor = this.props.clearColor;\n }\n if (this.props.clearDepth !== false) {\n clearMask |= GL_DEPTH_BUFFER_BIT;\n glParameters.clearDepth = this.props.clearDepth;\n }\n if (this.props.clearStencil !== false) {\n clearMask |= GL_STENCIL_BUFFER_BIT;\n glParameters.clearStencil = this.props.clearStencil;\n }\n\n if (clearMask !== 0) {\n // Temporarily set any clear \"colors\" and call clear\n withParameters(this.device, glParameters, () => {\n this.device.gl.clear(clearMask);\n });\n\n // TODO - clear multiple color attachments\n // for (attachment of this.framebuffer.colorAttachments) {\n // this.clearColorBuffer \n // }\n }\n }\n\n /** \n * WebGL2 - clear a specific color buffer \n */\n protected clearColorBuffer(drawBuffer: number = 0, value: NumericArray = [0, 0, 0, 0]) {\n withParameters(this.device.gl2, {framebuffer: this.props.framebuffer}, () => {\n // Method selection per OpenGL ES 3 docs\n switch (value.constructor) {\n case Int32Array:\n this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);\n break;\n case Uint32Array:\n this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);\n break;\n case Float32Array:\n default:\n this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);\n break;\n }\n });\n }\n\n // clearDepthStencil() {\n // const GL_DEPTH = 0x1801;\n // const GL_STENCIL = 0x1802;\n // const GL_DEPTH_STENCIL = 0x84f9;\n\n // case GL_DEPTH:\n // this.device.gl2.clearBufferfv(GL_DEPTH, 0, [value]);\n // break;\n\n // case GL_STENCIL:\n // this.device.gl2.clearBufferiv(GL_STENCIL, 0, [value]);\n // break;\n\n // case GL_DEPTH_STENCIL:\n // const [depth, stencil] = value;\n // this.device.gl2.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);\n // break;\n\n // default:\n // assert(false, ERR_ARGUMENTS);\n // }\n // });\n}\n\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webgl-render-pass.js","names":["RenderPass","GL","withGLParameters","setGLParameters","GL_DEPTH_BUFFER_BIT","GL_STENCIL_BUFFER_BIT","GL_COLOR_BUFFER_BIT","GL_COLOR","WEBGLRenderPass","constructor","device","props","glParameters","setParameters","parameters","clear","end","pushDebugGroup","groupLabel","popDebugGroup","insertDebugMarker","markerLabel","arguments","length","undefined","framebuffer","depthReadOnly","depthMask","stencilMask","stencilReadOnly","RASTERIZER_DISCARD","discard","viewport","slice","depthRange","scissorTest","Boolean","scissorRect","scissor","blendConstant","blendColor","stencilReference","console","warn","STENCIL_REF","clearMask","clearColor","clearDepth","clearStencil","gl","clearColorBuffer","drawBuffer","value","gl2","Int32Array","clearBufferiv","Uint32Array","clearBufferuiv","Float32Array","clearBufferfv"],"sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"sourcesContent":["import {RenderPass, RenderPassProps, NumberArray, RenderPassParameters} from '@luma.gl/core';\nimport {WebGLDevice} from '../webgl-device';\nimport {GL, GLParameters} from '@luma.gl/constants';\nimport {withGLParameters} from '../../context/state-tracker/with-parameters';\nimport {setGLParameters} from '../../context/parameters/unified-parameter-api';\n\n// Should collapse during minification\nconst GL_DEPTH_BUFFER_BIT = 0x00000100;\nconst GL_STENCIL_BUFFER_BIT = 0x00000400;\nconst GL_COLOR_BUFFER_BIT = 0x00004000;\n\nconst GL_COLOR = 0x1800;\n\nexport class WEBGLRenderPass extends RenderPass {\n readonly device: WebGLDevice;\n\n /** Parameters that should be applied before each draw call */\n glParameters: GLParameters;\n\n constructor(device: WebGLDevice, props: RenderPassProps) {\n super(device, props);\n this.device = device;\n\n // TODO - do parameters (scissorRect) affect the clear operation?\n this.setParameters(this.props.parameters);\n\n // Hack - for now WebGL draws in \"immediate mode\" (instead of queueing the operations)...\n this.clear();\n }\n\n end(): void {\n // should add commands to CommandEncoder.\n }\n\n pushDebugGroup(groupLabel: string): void {}\n popDebugGroup(): void {}\n insertDebugMarker(markerLabel: string): void {}\n\n // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;\n\n // beginOcclusionQuery(queryIndex: number): void;\n // endOcclusionQuery(): void;\n\n // executeBundles(bundles: Iterable<GPURenderBundle>): void;\n\n /**\n * Maps RenderPass parameters to GL parameters\n */\n setParameters(parameters: RenderPassParameters = {}): void {\n const glParameters: GLParameters = {};\n\n // Framebuffers are specified using parameters in WebGL\n if (this.props.framebuffer) {\n glParameters.framebuffer = this.props.framebuffer;\n }\n\n if (this.props.depthReadOnly) {\n glParameters.depthMask = !this.props.depthReadOnly;\n }\n\n glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;\n\n glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;\n\n // Map the four renderpass parameters to WebGL parameters\n if (parameters.viewport) {\n // WebGPU viewports are 6 coordinates (X, Y, Z)\n if (parameters.viewport.length >= 6) {\n glParameters.viewport = parameters.viewport.slice(0, 4);\n glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];\n } else {\n // WebGL viewports are 4 coordinates (X, Y)\n glParameters.viewport = parameters.viewport;\n }\n }\n glParameters.scissorTest = Boolean(parameters.scissorRect);\n if (parameters.scissorRect) {\n glParameters.scissor = parameters.scissorRect;\n }\n if (parameters.blendConstant) {\n glParameters.blendColor = parameters.blendConstant;\n }\n if (parameters.stencilReference) {\n // eslint-disable-next-line no-console\n console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');\n // parameters.stencilFunc = [func, ref, mask];\n // Does this work?\n parameters[GL.STENCIL_REF] = parameters.stencilReference;\n }\n\n this.glParameters = glParameters;\n\n setGLParameters(this.device, glParameters);\n }\n\n // Internal\n\n /**\n * Optionally clears depth, color and stencil buffers based on parameters\n */\n protected clear(): void {\n const glParameters: GLParameters = {...this.glParameters};\n\n let clearMask = 0;\n\n if (this.props.clearColor !== false) {\n clearMask |= GL_COLOR_BUFFER_BIT;\n glParameters.clearColor = this.props.clearColor;\n }\n if (this.props.clearDepth !== false) {\n clearMask |= GL_DEPTH_BUFFER_BIT;\n glParameters.clearDepth = this.props.clearDepth;\n }\n if (this.props.clearStencil !== false) {\n clearMask |= GL_STENCIL_BUFFER_BIT;\n glParameters.clearStencil = this.props.clearStencil;\n }\n\n if (clearMask !== 0) {\n // Temporarily set any clear \"colors\" and call clear\n withGLParameters(this.device, glParameters, () => {\n this.device.gl.clear(clearMask);\n });\n\n // TODO - clear multiple color attachments\n // for (attachment of this.framebuffer.colorAttachments) {\n // this.clearColorBuffer \n // }\n }\n }\n\n /** \n * WebGL2 - clear a specific color buffer \n */\n protected clearColorBuffer(drawBuffer: number = 0, value: NumberArray = [0, 0, 0, 0]) {\n withGLParameters(this.device.gl2, {framebuffer: this.props.framebuffer}, () => {\n // Method selection per OpenGL ES 3 docs\n switch (value.constructor) {\n case Int32Array:\n this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);\n break;\n case Uint32Array:\n this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);\n break;\n case Float32Array:\n default:\n this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);\n break;\n }\n });\n }\n\n // clearDepthStencil() {\n // const GL_DEPTH = 0x1801;\n // const GL_STENCIL = 0x1802;\n // const GL_DEPTH_STENCIL = 0x84f9;\n\n // case GL_DEPTH:\n // this.device.gl2.clearBufferfv(GL_DEPTH, 0, [value]);\n // break;\n\n // case GL_STENCIL:\n // this.device.gl2.clearBufferiv(GL_STENCIL, 0, [value]);\n // break;\n\n // case GL_DEPTH_STENCIL:\n // const [depth, stencil] = value;\n // this.device.gl2.clearBufferfi(GL_DEPTH_STENCIL, 0, depth, stencil);\n // break;\n\n // default:\n // assert(false, ERR_ARGUMENTS);\n // }\n // });\n}\n\n"],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { UniformValue, RenderPipelineProps, Binding } from '@luma.gl/core';
|
|
2
|
+
import type { ShaderLayout } from '@luma.gl/core';
|
|
3
|
+
import type { RenderPass, VertexArray } from '@luma.gl/core';
|
|
3
4
|
import { RenderPipeline } from '@luma.gl/core';
|
|
4
5
|
import { WebGLDevice } from '../webgl-device';
|
|
5
|
-
import { WEBGLBuffer } from './webgl-buffer';
|
|
6
6
|
import { WEBGLShader } from './webgl-shader';
|
|
7
|
-
import { WEBGLVertexArrayObject } from '../objects/webgl-vertex-array-object';
|
|
8
7
|
/** Creates a new render pipeline */
|
|
9
8
|
export declare class WEBGLRenderPipeline extends RenderPipeline {
|
|
10
9
|
/** The WebGL device that created this render pipeline */
|
|
@@ -17,38 +16,18 @@ export declare class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
17
16
|
fs: WEBGLShader;
|
|
18
17
|
/** The layout extracted from shader by WebGL introspection APIs */
|
|
19
18
|
introspectedLayout: ShaderLayout;
|
|
20
|
-
/** The merged layout */
|
|
21
|
-
shaderLayout: ShaderLayout;
|
|
22
|
-
/** Buffer map describing buffer interleaving etc */
|
|
23
|
-
bufferLayout: BufferLayout[];
|
|
24
19
|
/** Uniforms set on this model */
|
|
25
|
-
uniforms: Record<string,
|
|
20
|
+
uniforms: Record<string, UniformValue>;
|
|
26
21
|
/** Bindings set on this model */
|
|
27
|
-
bindings: Record<string,
|
|
28
|
-
/** Any constant attributes */
|
|
29
|
-
constantAttributes: Record<string, TypedArray>;
|
|
30
|
-
/** Index buffer is stored separately */
|
|
31
|
-
_indexBuffer?: WEBGLBuffer;
|
|
22
|
+
bindings: Record<string, Binding>;
|
|
32
23
|
/** WebGL varyings */
|
|
33
24
|
varyings: string[] | null;
|
|
34
|
-
/** Stores attribute bindings */
|
|
35
|
-
vertexArrayObject: WEBGLVertexArrayObject;
|
|
36
25
|
_textureUniforms: Record<string, any>;
|
|
37
26
|
_textureIndexCounter: number;
|
|
38
27
|
_uniformCount: number;
|
|
39
28
|
_uniformSetters: Record<string, Function>;
|
|
40
29
|
constructor(device: WebGLDevice, props: RenderPipelineProps);
|
|
41
30
|
destroy(): void;
|
|
42
|
-
setIndexBuffer(indexBuffer: Buffer): void;
|
|
43
|
-
/** @todo needed for portable model */
|
|
44
|
-
setAttributes(buffers: Record<string, Buffer>): void;
|
|
45
|
-
/**
|
|
46
|
-
* Constant attributes are only supported in WebGL, not in WebGPU
|
|
47
|
-
* Any attribute that is disabled in the current vertex array object
|
|
48
|
-
* is read from the context's global constant value for that attribute location.
|
|
49
|
-
* @param attributes
|
|
50
|
-
*/
|
|
51
|
-
setConstantAttributes(attributes: Record<string, TypedArray>): void;
|
|
52
31
|
/**
|
|
53
32
|
* Bindings include: textures, samplers and uniform buffers
|
|
54
33
|
* @todo needed for portable model
|
|
@@ -61,6 +40,8 @@ export declare class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
61
40
|
*/
|
|
62
41
|
draw(options: {
|
|
63
42
|
renderPass: RenderPass;
|
|
43
|
+
/** vertex attributes */
|
|
44
|
+
vertexArray: VertexArray;
|
|
64
45
|
vertexCount?: number;
|
|
65
46
|
indexCount?: number;
|
|
66
47
|
instanceCount?: number;
|
|
@@ -81,8 +62,22 @@ export declare class WEBGLRenderPipeline extends RenderPipeline {
|
|
|
81
62
|
* Any attribute that is disabled in the current vertex array object
|
|
82
63
|
* is read from the context's global constant value for that attribute location.
|
|
83
64
|
* @note Constant attributes are only supported in WebGL, not in WebGPU
|
|
84
|
-
|
|
85
|
-
_applyConstantAttributes(): void
|
|
65
|
+
*
|
|
66
|
+
_applyConstantAttributes(vertexArray: WEBGLVertexArray): void {
|
|
67
|
+
const attributeInfos = getAttributeInfosFromLayouts(this.shaderLayout, this.bufferLayout);
|
|
68
|
+
for (const [name, value] of Object.entries(this.)) {
|
|
69
|
+
const attributeInfo = attributeInfos[name];
|
|
70
|
+
if (!attributeInfo) {
|
|
71
|
+
log.warn(
|
|
72
|
+
`Ignoring constant value supplied for unknown attribute "${name}" in pipeline "${this.id}"`
|
|
73
|
+
)();
|
|
74
|
+
continue; // eslint-disable-line no-continue
|
|
75
|
+
}
|
|
76
|
+
vertexArray.setConstant(attributeInfo.location, value);
|
|
77
|
+
vertexArray.enable(attributeInfo.location, false);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
*/
|
|
86
81
|
/** Apply any bindings (before each draw call) */
|
|
87
82
|
_applyBindings(): void;
|
|
88
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"webgl-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAC,YAAY,EAAoB,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAC,UAAU,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAY,MAAM,eAAe,CAAC;AAUxD,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAO3C,oCAAoC;AACpC,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,yDAAyD;IACzD,MAAM,EAAE,WAAW,CAAC;IACpB,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,oBAAoB;IACpB,EAAE,EAAE,WAAW,CAAC;IAChB,sBAAsB;IACtB,EAAE,EAAE,WAAW,CAAC;IAChB,mEAAmE;IACnE,kBAAkB,EAAE,YAAY,CAAC;IAEjC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAC5C,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACvC,qBAAqB;IACrB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEjC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IAC3C,oBAAoB,EAAE,MAAM,CAAK;IACjC,aAAa,EAAE,MAAM,CAAK;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;gBAEnC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB;IA+BlD,OAAO,IAAI,IAAI;IAyCxB;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqCpD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAKlD;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,UAAU,CAAC;QACvB,wBAAwB;QACxB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO;IA2GX,SAAS,CAAC,eAAe;IA4BzB;;;;OAIG;IACH,sBAAsB;IAoBtB;;;;;;;;;;;;;;;;;;;;MAoBE;IAEF,iDAAiD;IACjD,cAAc;IAgEd;;;OAGG;IACH,cAAc;CASf"}
|