@luma.gl/webgl 9.0.0-alpha.47 → 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/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.js +8 -9
- 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.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 +979 -2696
- package/dist/index.cjs +382 -263
- 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-vertex-array.ts +4 -3
- package/src/adapter/webgl-device.ts +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/device-parameters.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,MAAM,EACN,UAAU,EACV,eAAe,
|
|
1
|
+
{"version":3,"file":"device-parameters.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/device-parameters.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,MAAM,EACN,UAAU,EACV,eAAe,EAMhB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,KAAK,EAAmC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAOvF;;;;;;;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,QA6GzE;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,5 +1,4 @@
|
|
|
1
1
|
import { log, isObjectEmpty } from '@luma.gl/core';
|
|
2
|
-
import { GL } from '@luma.gl/constants';
|
|
3
2
|
import { pushContextState, popContextState } from "../../context/state-tracker/track-context-state.js";
|
|
4
3
|
import { setGLParameters } from "../../context/parameters/unified-parameter-api.js";
|
|
5
4
|
import { WebGLDevice } from "../webgl-device.js";
|
|
@@ -48,22 +47,22 @@ export function setDeviceParameters(device, parameters) {
|
|
|
48
47
|
if (parameters.cullMode) {
|
|
49
48
|
switch (parameters.cullMode) {
|
|
50
49
|
case 'none':
|
|
51
|
-
gl.disable(
|
|
50
|
+
gl.disable(2884);
|
|
52
51
|
break;
|
|
53
52
|
case 'front':
|
|
54
|
-
gl.enable(
|
|
55
|
-
gl.cullFace(
|
|
53
|
+
gl.enable(2884);
|
|
54
|
+
gl.cullFace(1028);
|
|
56
55
|
break;
|
|
57
56
|
case 'back':
|
|
58
|
-
gl.enable(
|
|
59
|
-
gl.cullFace(
|
|
57
|
+
gl.enable(2884);
|
|
58
|
+
gl.cullFace(1029);
|
|
60
59
|
break;
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
if (parameters.frontFace) {
|
|
64
63
|
gl.frontFace(map('frontFace', parameters.frontFace, {
|
|
65
|
-
ccw:
|
|
66
|
-
cw:
|
|
64
|
+
ccw: 2305,
|
|
65
|
+
cw: 2304
|
|
67
66
|
}));
|
|
68
67
|
}
|
|
69
68
|
if (parameters.depthBias !== undefined) {
|
|
@@ -73,13 +72,13 @@ export function setDeviceParameters(device, parameters) {
|
|
|
73
72
|
gl.depthMask(mapBoolean('depthWriteEnabled', parameters.depthWriteEnabled));
|
|
74
73
|
}
|
|
75
74
|
if (parameters.depthCompare) {
|
|
76
|
-
parameters.depthCompare !== 'always' ? gl.enable(
|
|
75
|
+
parameters.depthCompare !== 'always' ? gl.enable(2929) : gl.disable(2929);
|
|
77
76
|
gl.depthFunc(convertCompareFunction('depthCompare', parameters.depthCompare));
|
|
78
77
|
}
|
|
79
78
|
if (parameters.stencilWriteMask) {
|
|
80
79
|
const mask = parameters.stencilWriteMask;
|
|
81
|
-
gl.stencilMaskSeparate(
|
|
82
|
-
gl.stencilMaskSeparate(
|
|
80
|
+
gl.stencilMaskSeparate(1028, mask);
|
|
81
|
+
gl.stencilMaskSeparate(1029, mask);
|
|
83
82
|
}
|
|
84
83
|
if (parameters.stencilReadMask) {
|
|
85
84
|
log.warn('stencilReadMask not supported under WebGL');
|
|
@@ -87,52 +86,86 @@ export function setDeviceParameters(device, parameters) {
|
|
|
87
86
|
if (parameters.stencilCompare) {
|
|
88
87
|
const mask = parameters.stencilReadMask || 0xffffffff;
|
|
89
88
|
const glValue = convertCompareFunction('depthCompare', parameters.stencilCompare);
|
|
90
|
-
parameters.stencilCompare !== 'always' ? gl.enable(
|
|
91
|
-
gl.stencilFuncSeparate(
|
|
92
|
-
gl.stencilFuncSeparate(
|
|
89
|
+
parameters.stencilCompare !== 'always' ? gl.enable(2960) : gl.disable(2960);
|
|
90
|
+
gl.stencilFuncSeparate(1028, glValue, 0, mask);
|
|
91
|
+
gl.stencilFuncSeparate(1029, glValue, 0, mask);
|
|
93
92
|
}
|
|
94
93
|
if (parameters.stencilPassOperation && parameters.stencilFailOperation && parameters.stencilDepthFailOperation) {
|
|
95
94
|
const dppass = convertStencilOperation('stencilPassOperation', parameters.stencilPassOperation);
|
|
96
95
|
const sfail = convertStencilOperation('stencilFailOperation', parameters.stencilFailOperation);
|
|
97
96
|
const dpfail = convertStencilOperation('stencilDepthFailOperation', parameters.stencilDepthFailOperation);
|
|
98
|
-
gl.stencilOpSeparate(
|
|
99
|
-
gl.stencilOpSeparate(
|
|
97
|
+
gl.stencilOpSeparate(1028, sfail, dpfail, dppass);
|
|
98
|
+
gl.stencilOpSeparate(1029, sfail, dpfail, dppass);
|
|
99
|
+
}
|
|
100
|
+
if (parameters.blendColorOperation || parameters.blendAlphaOperation) {
|
|
101
|
+
gl.enable(3042);
|
|
102
|
+
const colorEquation = convertBlendOperationToEquation('blendColorOperation', parameters.blendColorOperation || 'add');
|
|
103
|
+
const alphaEquation = convertBlendOperationToEquation('blendAlphaOperation', parameters.blendAlphaOperation || 'add');
|
|
104
|
+
gl.blendEquationSeparate(colorEquation, alphaEquation);
|
|
105
|
+
const colorSrcFactor = convertBlendFactorToFunction('blendColorSrcFactor', parameters.blendColorSrcFactor || 'one');
|
|
106
|
+
const colorDstFactor = convertBlendFactorToFunction('blendColorDstFactor', parameters.blendColorDstFactor || 'zero');
|
|
107
|
+
const alphaSrcFactor = convertBlendFactorToFunction('blendAlphaSrcFactor', parameters.blendAlphaSrcFactor || 'one');
|
|
108
|
+
const alphaDstFactor = convertBlendFactorToFunction('blendAlphaDstFactor', parameters.blendAlphaDstFactor || 'zero');
|
|
109
|
+
gl.blendFuncSeparate(colorSrcFactor, colorDstFactor, alphaSrcFactor, alphaDstFactor);
|
|
100
110
|
}
|
|
101
111
|
}
|
|
102
112
|
export function convertCompareFunction(parameter, value) {
|
|
103
113
|
return map(parameter, value, {
|
|
104
|
-
never:
|
|
105
|
-
less:
|
|
106
|
-
equal:
|
|
107
|
-
'less-equal':
|
|
108
|
-
greater:
|
|
109
|
-
'not-equal':
|
|
110
|
-
'greater-equal':
|
|
111
|
-
always:
|
|
114
|
+
never: 512,
|
|
115
|
+
less: 513,
|
|
116
|
+
equal: 514,
|
|
117
|
+
'less-equal': 515,
|
|
118
|
+
greater: 516,
|
|
119
|
+
'not-equal': 517,
|
|
120
|
+
'greater-equal': 518,
|
|
121
|
+
always: 519
|
|
112
122
|
});
|
|
113
123
|
}
|
|
114
124
|
export function convertToCompareFunction(parameter, value) {
|
|
115
125
|
return map(parameter, value, {
|
|
116
|
-
[
|
|
117
|
-
[
|
|
118
|
-
[
|
|
119
|
-
[
|
|
120
|
-
[
|
|
121
|
-
[
|
|
122
|
-
[
|
|
123
|
-
[
|
|
126
|
+
[512]: 'never',
|
|
127
|
+
[513]: 'less',
|
|
128
|
+
[514]: 'equal',
|
|
129
|
+
[515]: 'less-equal',
|
|
130
|
+
[516]: 'greater',
|
|
131
|
+
[517]: 'not-equal',
|
|
132
|
+
[518]: 'greater-equal',
|
|
133
|
+
[519]: 'always'
|
|
124
134
|
});
|
|
125
135
|
}
|
|
126
136
|
function convertStencilOperation(parameter, value) {
|
|
127
137
|
return map(parameter, value, {
|
|
128
|
-
keep:
|
|
129
|
-
zero:
|
|
130
|
-
replace:
|
|
131
|
-
invert:
|
|
132
|
-
'increment-clamp':
|
|
133
|
-
'decrement-clamp':
|
|
134
|
-
'increment-wrap':
|
|
135
|
-
'decrement-wrap':
|
|
138
|
+
keep: 7680,
|
|
139
|
+
zero: 0,
|
|
140
|
+
replace: 7681,
|
|
141
|
+
invert: 5386,
|
|
142
|
+
'increment-clamp': 7682,
|
|
143
|
+
'decrement-clamp': 7683,
|
|
144
|
+
'increment-wrap': 34055,
|
|
145
|
+
'decrement-wrap': 34056
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function convertBlendOperationToEquation(parameter, value) {
|
|
149
|
+
return map(parameter, value, {
|
|
150
|
+
'add': 32774,
|
|
151
|
+
'subtract': 32778,
|
|
152
|
+
'reverse-subtract': 32779,
|
|
153
|
+
'min': 32775,
|
|
154
|
+
'max': 32776
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function convertBlendFactorToFunction(parameter, value) {
|
|
158
|
+
return map(parameter, value, {
|
|
159
|
+
'one': 1,
|
|
160
|
+
'zero': 0,
|
|
161
|
+
'src-color': 768,
|
|
162
|
+
'one-minus-src-color': 769,
|
|
163
|
+
'dst-color': 774,
|
|
164
|
+
'one-minus-dst-color': 775,
|
|
165
|
+
'src-alpha': 770,
|
|
166
|
+
'one-minus-src-alpha': 771,
|
|
167
|
+
'dst-alpha': 772,
|
|
168
|
+
'one-minus-dst-alpha': 773
|
|
136
169
|
});
|
|
137
170
|
}
|
|
138
171
|
function message(parameter, value) {
|
|
@@ -1 +1 @@
|
|
|
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":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {\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
|
+
{"version":3,"file":"device-parameters.js","names":["log","isObjectEmpty","pushContextState","popContextState","setGLParameters","WebGLDevice","withDeviceAndGLParameters","device","parameters","glParameters","func","gl","setDeviceParameters","withGLParameters","withDeviceParameters","webglDevice","attach","cullMode","disable","enable","cullFace","frontFace","map","ccw","cw","depthBias","undefined","polygonOffset","depthBiasSlopeScale","depthWriteEnabled","depthMask","mapBoolean","depthCompare","depthFunc","convertCompareFunction","stencilWriteMask","mask","stencilMaskSeparate","stencilReadMask","warn","stencilCompare","glValue","stencilFuncSeparate","stencilPassOperation","stencilFailOperation","stencilDepthFailOperation","dppass","convertStencilOperation","sfail","dpfail","stencilOpSeparate","blendColorOperation","blendAlphaOperation","colorEquation","convertBlendOperationToEquation","alphaEquation","blendEquationSeparate","colorSrcFactor","convertBlendFactorToFunction","blendColorSrcFactor","colorDstFactor","blendColorDstFactor","alphaSrcFactor","blendAlphaSrcFactor","alphaDstFactor","blendAlphaDstFactor","blendFuncSeparate","parameter","value","never","less","equal","greater","always","convertToCompareFunction","keep","zero","replace","invert","message","valueMap","Error"],"sources":["../../../src/adapter/converters/device-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {\n Device,\n Parameters,\n CompareFunction,\n StencilOperation,\n log,\n isObjectEmpty,\n BlendOperation,\n BlendFactor\n} from '@luma.gl/core';\nimport {GL} from '@luma.gl/constants';\nimport type {GLBlendEquation, GLBlendFunction, 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.blendColorOperation || parameters.blendAlphaOperation) {\n gl.enable(GL.BLEND);\n\n const colorEquation = convertBlendOperationToEquation('blendColorOperation', parameters.blendColorOperation || 'add');\n const alphaEquation = convertBlendOperationToEquation('blendAlphaOperation', parameters.blendAlphaOperation || 'add');\n gl.blendEquationSeparate(colorEquation, alphaEquation);\n\n const colorSrcFactor = convertBlendFactorToFunction('blendColorSrcFactor', parameters.blendColorSrcFactor || 'one');\n const colorDstFactor = convertBlendFactorToFunction('blendColorDstFactor', parameters.blendColorDstFactor || 'zero');\n const alphaSrcFactor = convertBlendFactorToFunction('blendAlphaSrcFactor', parameters.blendAlphaSrcFactor || 'one');\n const alphaDstFactor = convertBlendFactorToFunction('blendAlphaDstFactor', parameters.blendAlphaDstFactor || '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\nfunction convertBlendOperationToEquation(parameter: string, value: BlendOperation): GLBlendEquation {\n return map(parameter, value, {\n 'add': GL.FUNC_ADD,\n 'subtract': 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 } as Record<BlendOperation, GLBlendEquation>);\n}\n\nfunction convertBlendFactorToFunction(parameter: string, value: BlendFactor): GLBlendFunction {\n return map(parameter, value, {\n 'one': GL.ONE,\n 'zero': GL.ZERO,\n 'src-color': GL.SRC_COLOR,\n 'one-minus-src-color': GL.ONE_MINUS_SRC_COLOR,\n 'dst-color': GL.DST_COLOR,\n 'one-minus-dst-color': GL.ONE_MINUS_DST_COLOR,\n 'src-alpha': GL.SRC_ALPHA,\n 'one-minus-src-alpha': GL.ONE_MINUS_SRC_ALPHA,\n 'dst-alpha': GL.DST_ALPHA,\n 'one-minus-dst-alpha': GL.ONE_MINUS_DST_ALPHA,\n } as Record<BlendFactor, GLBlendFunction>);\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,55 +1,54 @@
|
|
|
1
|
-
import { GL } from '@luma.gl/constants';
|
|
2
1
|
import { convertCompareFunction, convertToCompareFunction } from "./device-parameters.js";
|
|
3
2
|
export function convertSamplerParametersToWebGL(props) {
|
|
4
3
|
const params = {};
|
|
5
4
|
if (props.addressModeU) {
|
|
6
|
-
params[
|
|
5
|
+
params[10242] = convertAddressMode(props.addressModeU);
|
|
7
6
|
}
|
|
8
7
|
if (props.addressModeV) {
|
|
9
|
-
params[
|
|
8
|
+
params[10243] = convertAddressMode(props.addressModeV);
|
|
10
9
|
}
|
|
11
10
|
if (props.addressModeW) {
|
|
12
|
-
params[
|
|
11
|
+
params[32882] = convertAddressMode(props.addressModeW);
|
|
13
12
|
}
|
|
14
13
|
if (props.magFilter) {
|
|
15
|
-
params[
|
|
14
|
+
params[10240] = convertMaxFilterMode(props.magFilter);
|
|
16
15
|
}
|
|
17
16
|
if (props.minFilter || props.mipmapFilter) {
|
|
18
|
-
params[
|
|
17
|
+
params[10241] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);
|
|
19
18
|
}
|
|
20
19
|
if (props.lodMinClamp !== undefined) {
|
|
21
|
-
params[
|
|
20
|
+
params[33082] = props.lodMinClamp;
|
|
22
21
|
}
|
|
23
22
|
if (props.lodMaxClamp !== undefined) {
|
|
24
|
-
params[
|
|
23
|
+
params[33083] = props.lodMaxClamp;
|
|
25
24
|
}
|
|
26
25
|
if (props.type === 'comparison-sampler') {
|
|
27
|
-
params[
|
|
26
|
+
params[34892] = 34894;
|
|
28
27
|
}
|
|
29
28
|
if (props.compare) {
|
|
30
|
-
params[
|
|
29
|
+
params[34893] = convertCompareFunction('compare', props.compare);
|
|
31
30
|
}
|
|
32
31
|
if (props.maxAnisotropy) {
|
|
33
|
-
params[
|
|
32
|
+
params[34046] = props.maxAnisotropy;
|
|
34
33
|
}
|
|
35
34
|
return params;
|
|
36
35
|
}
|
|
37
36
|
function convertAddressMode(addressMode) {
|
|
38
37
|
switch (addressMode) {
|
|
39
38
|
case 'clamp-to-edge':
|
|
40
|
-
return
|
|
39
|
+
return 33071;
|
|
41
40
|
case 'repeat':
|
|
42
|
-
return
|
|
41
|
+
return 10497;
|
|
43
42
|
case 'mirror-repeat':
|
|
44
|
-
return
|
|
43
|
+
return 33648;
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
46
|
function convertMaxFilterMode(maxFilter) {
|
|
48
47
|
switch (maxFilter) {
|
|
49
48
|
case 'nearest':
|
|
50
|
-
return
|
|
49
|
+
return 9728;
|
|
51
50
|
case 'linear':
|
|
52
|
-
return
|
|
51
|
+
return 9729;
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
function convertMinFilterMode(minFilter, mipmapFilter) {
|
|
@@ -58,55 +57,55 @@ function convertMinFilterMode(minFilter, mipmapFilter) {
|
|
|
58
57
|
}
|
|
59
58
|
switch (minFilter) {
|
|
60
59
|
case 'nearest':
|
|
61
|
-
return mipmapFilter === 'nearest' ?
|
|
60
|
+
return mipmapFilter === 'nearest' ? 9984 : 9986;
|
|
62
61
|
case 'linear':
|
|
63
|
-
return mipmapFilter === 'nearest' ?
|
|
62
|
+
return mipmapFilter === 'nearest' ? 9985 : 9987;
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
65
|
export function convertToSamplerParameters(params) {
|
|
67
66
|
const props = {};
|
|
68
|
-
if (params[
|
|
69
|
-
props.addressModeU = convertToAddressMode(params[
|
|
67
|
+
if (params[10242]) {
|
|
68
|
+
props.addressModeU = convertToAddressMode(params[10242]);
|
|
70
69
|
}
|
|
71
|
-
if (params[
|
|
72
|
-
props.addressModeV = convertToAddressMode(params[
|
|
70
|
+
if (params[10243]) {
|
|
71
|
+
props.addressModeV = convertToAddressMode(params[10243]);
|
|
73
72
|
}
|
|
74
|
-
if (params[
|
|
75
|
-
props.addressModeW = convertToAddressMode(params[
|
|
73
|
+
if (params[32882]) {
|
|
74
|
+
props.addressModeW = convertToAddressMode(params[32882]);
|
|
76
75
|
}
|
|
77
|
-
if (params[
|
|
78
|
-
props.magFilter = convertToMaxFilterMode(params[
|
|
76
|
+
if (params[10240]) {
|
|
77
|
+
props.magFilter = convertToMaxFilterMode(params[10240]);
|
|
79
78
|
}
|
|
80
|
-
if (params[
|
|
81
|
-
props.minFilter = convertToMinFilterMode(params[
|
|
79
|
+
if (params[10241]) {
|
|
80
|
+
props.minFilter = convertToMinFilterMode(params[10241]);
|
|
82
81
|
}
|
|
83
|
-
if (params[
|
|
84
|
-
props.mipmapFilter = convertToMipmapFilterMode(params[
|
|
82
|
+
if (params[10241]) {
|
|
83
|
+
props.mipmapFilter = convertToMipmapFilterMode(params[10241]);
|
|
85
84
|
}
|
|
86
|
-
if (params[
|
|
87
|
-
props.lodMinClamp = params[
|
|
85
|
+
if (params[33082]) {
|
|
86
|
+
props.lodMinClamp = params[33082];
|
|
88
87
|
}
|
|
89
|
-
if (params[
|
|
90
|
-
props.lodMaxClamp = params[
|
|
88
|
+
if (params[33083]) {
|
|
89
|
+
props.lodMaxClamp = params[33083];
|
|
91
90
|
}
|
|
92
|
-
if (params[
|
|
93
|
-
props.type = params[
|
|
91
|
+
if (params[34892]) {
|
|
92
|
+
props.type = params[34892] === 34894 ? 'comparison-sampler' : 'color-sampler';
|
|
94
93
|
}
|
|
95
|
-
if (params[
|
|
96
|
-
props.compare = convertToCompareFunction('compare', params[
|
|
94
|
+
if (params[34893]) {
|
|
95
|
+
props.compare = convertToCompareFunction('compare', params[34893]);
|
|
97
96
|
}
|
|
98
|
-
if (params[
|
|
99
|
-
props.maxAnisotropy = params[
|
|
97
|
+
if (params[34046]) {
|
|
98
|
+
props.maxAnisotropy = params[34046];
|
|
100
99
|
}
|
|
101
100
|
return props;
|
|
102
101
|
}
|
|
103
102
|
function convertToAddressMode(addressMode) {
|
|
104
103
|
switch (addressMode) {
|
|
105
|
-
case
|
|
104
|
+
case 33071:
|
|
106
105
|
return 'clamp-to-edge';
|
|
107
|
-
case
|
|
106
|
+
case 10497:
|
|
108
107
|
return 'repeat';
|
|
109
|
-
case
|
|
108
|
+
case 33648:
|
|
110
109
|
return 'mirror-repeat';
|
|
111
110
|
default:
|
|
112
111
|
throw new Error('address');
|
|
@@ -114,9 +113,9 @@ function convertToAddressMode(addressMode) {
|
|
|
114
113
|
}
|
|
115
114
|
function convertToMaxFilterMode(filterMode) {
|
|
116
115
|
switch (filterMode) {
|
|
117
|
-
case
|
|
116
|
+
case 9728:
|
|
118
117
|
return 'nearest';
|
|
119
|
-
case
|
|
118
|
+
case 9729:
|
|
120
119
|
return 'linear';
|
|
121
120
|
default:
|
|
122
121
|
throw new Error('maxfilter');
|
|
@@ -124,17 +123,17 @@ function convertToMaxFilterMode(filterMode) {
|
|
|
124
123
|
}
|
|
125
124
|
function convertToMinFilterMode(filterMode) {
|
|
126
125
|
switch (filterMode) {
|
|
127
|
-
case
|
|
126
|
+
case 9728:
|
|
128
127
|
return 'nearest';
|
|
129
|
-
case
|
|
128
|
+
case 9729:
|
|
130
129
|
return 'linear';
|
|
131
|
-
case
|
|
130
|
+
case 9984:
|
|
132
131
|
return 'nearest';
|
|
133
|
-
case
|
|
132
|
+
case 9985:
|
|
134
133
|
return 'linear';
|
|
135
|
-
case
|
|
134
|
+
case 9986:
|
|
136
135
|
return 'nearest';
|
|
137
|
-
case
|
|
136
|
+
case 9987:
|
|
138
137
|
return 'linear';
|
|
139
138
|
default:
|
|
140
139
|
throw new Error('minfilter');
|
|
@@ -142,17 +141,17 @@ function convertToMinFilterMode(filterMode) {
|
|
|
142
141
|
}
|
|
143
142
|
function convertToMipmapFilterMode(filterMode) {
|
|
144
143
|
switch (filterMode) {
|
|
145
|
-
case
|
|
144
|
+
case 9728:
|
|
146
145
|
return 'nearest';
|
|
147
|
-
case
|
|
146
|
+
case 9729:
|
|
148
147
|
return 'linear';
|
|
149
|
-
case
|
|
148
|
+
case 9984:
|
|
150
149
|
return 'nearest';
|
|
151
|
-
case
|
|
150
|
+
case 9985:
|
|
152
151
|
return 'nearest';
|
|
153
|
-
case
|
|
152
|
+
case 9986:
|
|
154
153
|
return 'linear';
|
|
155
|
-
case
|
|
154
|
+
case 9987:
|
|
156
155
|
return 'linear';
|
|
157
156
|
default:
|
|
158
157
|
throw new Error('mipmap');
|
|
@@ -162,11 +161,11 @@ export function updateSamplerParametersForNPOT(parameters) {
|
|
|
162
161
|
const newParameters = {
|
|
163
162
|
...parameters
|
|
164
163
|
};
|
|
165
|
-
if (parameters[
|
|
166
|
-
newParameters[
|
|
164
|
+
if (parameters[10241] !== 9728) {
|
|
165
|
+
newParameters[10241] = 9729;
|
|
167
166
|
}
|
|
168
|
-
newParameters[
|
|
169
|
-
newParameters[
|
|
167
|
+
newParameters[10242] = 33071;
|
|
168
|
+
newParameters[10243] = 33071;
|
|
170
169
|
return newParameters;
|
|
171
170
|
}
|
|
172
171
|
//# sourceMappingURL=sampler-parameters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampler-parameters.js","names":["GL","convertCompareFunction","convertToCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","TEXTURE_WRAP_S","convertAddressMode","addressModeV","TEXTURE_WRAP_T","addressModeW","TEXTURE_WRAP_R","magFilter","TEXTURE_MAG_FILTER","convertMaxFilterMode","minFilter","mipmapFilter","TEXTURE_MIN_FILTER","convertMinFilterMode","lodMinClamp","undefined","TEXTURE_MIN_LOD","lodMaxClamp","TEXTURE_MAX_LOD","type","TEXTURE_COMPARE_MODE","COMPARE_REF_TO_TEXTURE","compare","TEXTURE_COMPARE_FUNC","maxAnisotropy","TEXTURE_MAX_ANISOTROPY_EXT","addressMode","CLAMP_TO_EDGE","REPEAT","MIRRORED_REPEAT","maxFilter","NEAREST","LINEAR","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","convertToSamplerParameters","convertToAddressMode","convertToMaxFilterMode","convertToMinFilterMode","convertToMipmapFilterMode","Error","filterMode","updateSamplerParametersForNPOT","parameters","newParameters"],"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// SAMPLER FILTERS\nimport {SamplerParameters} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertCompareFunction, convertToCompareFunction} from './device-parameters';\n\n/* eslint-disable consistent-return */\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerParameters): GLSamplerParameters {\n const params: Record<number, number> = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n }\n if (props.compare) {\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL {\n switch (addressMode) {\n case 'clamp-to-edge': return GL.CLAMP_TO_EDGE;\n case 'repeat': return GL.REPEAT;\n case 'mirror-repeat': return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL {\n switch (maxFilter) {\n case 'nearest': return GL.NEAREST;\n case 'linear': return GL.LINEAR;\n }\n}\n\n/** \n * WebGPU has separate min filter and mipmap filter, \n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'nearest' | 'linear'): GL {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest': return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear': return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n\n// Convert from WebGL to WebGPU\n\n/**\n * Convert WebGL-style sampler props to WebGPU\n * @param props\n * @returns\n */\nexport function convertToSamplerParameters(params: GLSamplerParameters): SamplerParameters {\n const props: SamplerParameters = {};\n if (params[GL.TEXTURE_WRAP_S]) {\n props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);\n }\n if (params[GL.TEXTURE_WRAP_T]) {\n props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);\n }\n if (params[GL.TEXTURE_WRAP_R]) {\n props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);\n }\n if (params[GL.TEXTURE_MAG_FILTER]) {\n props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_LOD]) {\n props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];\n }\n if (params[GL.TEXTURE_MAX_LOD]) {\n props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];\n }\n if (params[GL.TEXTURE_COMPARE_MODE]) {\n props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';\n }\n if (params[GL.TEXTURE_COMPARE_FUNC]) {\n props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);\n }\n // NOTE depends on extension (very common)\n if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {\n props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];\n }\n return props;\n}\n\n/** Convert address more */\nfunction convertToAddressMode(addressMode: number): 'clamp-to-edge' | 'repeat' | 'mirror-repeat' {\n switch (addressMode) {\n case GL.CLAMP_TO_EDGE: return 'clamp-to-edge';\n case GL.REPEAT: return 'repeat';\n case GL.MIRRORED_REPEAT: return 'mirror-repeat';\n default: throw new Error('address');\n }\n}\n\nfunction convertToMaxFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n default: throw new Error('maxfilter');\n }\n}\n\n/** WebGPU has separate min filter and mipmap filter, WebGL is combined */\nfunction convertToMinFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'linear';\n case GL.NEAREST_MIPMAP_LINEAR: return 'nearest';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('minfilter');\n }\n}\n\nfunction convertToMipmapFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'nearest';\n case GL.NEAREST_MIPMAP_LINEAR: return 'linear';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('mipmap');\n }\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n*/\nexport function updateSamplerParametersForNPOT(parameters: GLSamplerParameters): GLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sampler-parameters.js","names":["convertCompareFunction","convertToCompareFunction","convertSamplerParametersToWebGL","props","params","addressModeU","convertAddressMode","addressModeV","addressModeW","magFilter","convertMaxFilterMode","minFilter","mipmapFilter","convertMinFilterMode","lodMinClamp","undefined","lodMaxClamp","type","compare","maxAnisotropy","addressMode","maxFilter","convertToSamplerParameters","convertToAddressMode","convertToMaxFilterMode","convertToMinFilterMode","convertToMipmapFilterMode","Error","filterMode","updateSamplerParametersForNPOT","parameters","newParameters"],"sources":["../../../src/adapter/converters/sampler-parameters.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\n// SAMPLER FILTERS\nimport {SamplerParameters} from '@luma.gl/core';\nimport {GL, GLSamplerParameters} from '@luma.gl/constants';\nimport {convertCompareFunction, convertToCompareFunction} from './device-parameters';\n\n/* eslint-disable consistent-return */\n\n/**\n * Convert WebGPU-style sampler props to WebGL\n * @param props\n * @returns\n */\nexport function convertSamplerParametersToWebGL(props: SamplerParameters): GLSamplerParameters {\n const params: Record<number, number> = {};\n if (props.addressModeU) {\n params[GL.TEXTURE_WRAP_S] = convertAddressMode(props.addressModeU);\n }\n if (props.addressModeV) {\n params[GL.TEXTURE_WRAP_T] = convertAddressMode(props.addressModeV);\n }\n if (props.addressModeW) {\n params[GL.TEXTURE_WRAP_R] = convertAddressMode(props.addressModeW);\n }\n if (props.magFilter) {\n params[GL.TEXTURE_MAG_FILTER] = convertMaxFilterMode(props.magFilter);\n }\n if (props.minFilter || props.mipmapFilter) {\n // TODO - arbitrary choice of linear?\n params[GL.TEXTURE_MIN_FILTER] = convertMinFilterMode(props.minFilter || 'linear', props.mipmapFilter);\n }\n if (props.lodMinClamp !== undefined) {\n params[GL.TEXTURE_MIN_LOD] = props.lodMinClamp;\n }\n if (props.lodMaxClamp !== undefined) {\n params[GL.TEXTURE_MAX_LOD] = props.lodMaxClamp;\n }\n if (props.type === 'comparison-sampler') {\n // Setting prop.compare turns this into a comparison sampler\n params[GL.TEXTURE_COMPARE_MODE] = GL.COMPARE_REF_TO_TEXTURE;\n }\n if (props.compare) {\n params[GL.TEXTURE_COMPARE_FUNC] = convertCompareFunction('compare', props.compare);\n }\n // Note depends on WebGL extension\n if (props.maxAnisotropy) {\n params[GL.TEXTURE_MAX_ANISOTROPY_EXT] = props.maxAnisotropy;\n }\n return params;\n}\n\n/** Convert address more */\nfunction convertAddressMode(addressMode: 'clamp-to-edge' | 'repeat' | 'mirror-repeat'): GL {\n switch (addressMode) {\n case 'clamp-to-edge': return GL.CLAMP_TO_EDGE;\n case 'repeat': return GL.REPEAT;\n case 'mirror-repeat': return GL.MIRRORED_REPEAT;\n }\n}\n\nfunction convertMaxFilterMode(maxFilter: 'nearest' | 'linear'): GL {\n switch (maxFilter) {\n case 'nearest': return GL.NEAREST;\n case 'linear': return GL.LINEAR;\n }\n}\n\n/** \n * WebGPU has separate min filter and mipmap filter, \n * WebGL is combined and effectively offers 6 options\n */\nfunction convertMinFilterMode(minFilter: 'nearest' | 'linear', mipmapFilter?: 'nearest' | 'linear'): GL {\n if (!mipmapFilter) {\n return convertMaxFilterMode(minFilter);\n }\n switch (minFilter) {\n case 'nearest': return mipmapFilter === 'nearest' ? GL.NEAREST_MIPMAP_NEAREST : GL.NEAREST_MIPMAP_LINEAR;\n case 'linear': return mipmapFilter === 'nearest' ? GL.LINEAR_MIPMAP_NEAREST : GL.LINEAR_MIPMAP_LINEAR;\n }\n}\n\n// Convert from WebGL to WebGPU\n\n/**\n * Convert WebGL-style sampler props to WebGPU\n * @param props\n * @returns\n */\nexport function convertToSamplerParameters(params: GLSamplerParameters): SamplerParameters {\n const props: SamplerParameters = {};\n if (params[GL.TEXTURE_WRAP_S]) {\n props.addressModeU = convertToAddressMode(params[GL.TEXTURE_WRAP_S]);\n }\n if (params[GL.TEXTURE_WRAP_T]) {\n props.addressModeV = convertToAddressMode(params[GL.TEXTURE_WRAP_T]);\n }\n if (params[GL.TEXTURE_WRAP_R]) {\n props.addressModeW = convertToAddressMode(params[GL.TEXTURE_WRAP_R]);\n }\n if (params[GL.TEXTURE_MAG_FILTER]) {\n props.magFilter = convertToMaxFilterMode(params[GL.TEXTURE_MAG_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.minFilter = convertToMinFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_FILTER]) {\n props.mipmapFilter = convertToMipmapFilterMode(params[GL.TEXTURE_MIN_FILTER]);\n }\n if (params[GL.TEXTURE_MIN_LOD]) {\n props.lodMinClamp = params[GL.TEXTURE_MIN_LOD];\n }\n if (params[GL.TEXTURE_MAX_LOD]) {\n props.lodMaxClamp = params[GL.TEXTURE_MAX_LOD];\n }\n if (params[GL.TEXTURE_COMPARE_MODE]) {\n props.type = params[GL.TEXTURE_COMPARE_MODE] === GL.COMPARE_REF_TO_TEXTURE ? 'comparison-sampler' : 'color-sampler';\n }\n if (params[GL.TEXTURE_COMPARE_FUNC]) {\n props.compare = convertToCompareFunction('compare', params[GL.TEXTURE_COMPARE_FUNC]);\n }\n // NOTE depends on extension (very common)\n if (params[GL.TEXTURE_MAX_ANISOTROPY_EXT]) {\n props.maxAnisotropy = params[GL.TEXTURE_MAX_ANISOTROPY_EXT];\n }\n return props;\n}\n\n/** Convert address more */\nfunction convertToAddressMode(addressMode: number): 'clamp-to-edge' | 'repeat' | 'mirror-repeat' {\n switch (addressMode) {\n case GL.CLAMP_TO_EDGE: return 'clamp-to-edge';\n case GL.REPEAT: return 'repeat';\n case GL.MIRRORED_REPEAT: return 'mirror-repeat';\n default: throw new Error('address');\n }\n}\n\nfunction convertToMaxFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n default: throw new Error('maxfilter');\n }\n}\n\n/** WebGPU has separate min filter and mipmap filter, WebGL is combined */\nfunction convertToMinFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'linear';\n case GL.NEAREST_MIPMAP_LINEAR: return 'nearest';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('minfilter');\n }\n}\n\nfunction convertToMipmapFilterMode(filterMode: number): 'nearest' | 'linear' {\n switch (filterMode) {\n // TODO is this correct?\n case GL.NEAREST: return 'nearest';\n case GL.LINEAR: return 'linear';\n case GL.NEAREST_MIPMAP_NEAREST: return 'nearest';\n case GL.LINEAR_MIPMAP_NEAREST: return 'nearest';\n case GL.NEAREST_MIPMAP_LINEAR: return 'linear';\n case GL.LINEAR_MIPMAP_LINEAR: return 'linear';\n default: throw new Error('mipmap');\n }\n}\n\n/**\n * Override sampler settings that are not supported by Non-Power-of-Two textures in WebGL1.\n*/\nexport function updateSamplerParametersForNPOT(parameters: GLSamplerParameters): GLSamplerParameters {\n const newParameters = {...parameters};\n if (parameters[GL.TEXTURE_MIN_FILTER] !== GL.NEAREST) {\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();\n newParameters[GL.TEXTURE_MIN_FILTER] = GL.LINEAR;\n }\n // log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_WRAP_S to CLAMP_TO_EDGE`)();\n newParameters[GL.TEXTURE_WRAP_S] = GL.CLAMP_TO_EDGE;\n newParameters[GL.TEXTURE_WRAP_T] = GL.CLAMP_TO_EDGE;\n return newParameters;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { GL } from '@luma.gl/constants';
|
|
2
1
|
export function getShaderAttributeTypeFromGL(type, components) {
|
|
3
2
|
const dataType = getShaderDataTypeFromGL(type);
|
|
4
3
|
switch (components) {
|
|
@@ -16,21 +15,21 @@ export function getShaderAttributeTypeFromGL(type, components) {
|
|
|
16
15
|
}
|
|
17
16
|
export function getShaderDataTypeFromGL(type) {
|
|
18
17
|
switch (type) {
|
|
19
|
-
case
|
|
18
|
+
case 5124:
|
|
20
19
|
return 'i32';
|
|
21
|
-
case
|
|
20
|
+
case 5125:
|
|
22
21
|
return 'u32';
|
|
23
|
-
case
|
|
22
|
+
case 5122:
|
|
24
23
|
return 'i32';
|
|
25
|
-
case
|
|
24
|
+
case 5123:
|
|
26
25
|
return 'u32';
|
|
27
|
-
case
|
|
26
|
+
case 5120:
|
|
28
27
|
return 'i32';
|
|
29
|
-
case
|
|
28
|
+
case 5121:
|
|
30
29
|
return 'u32';
|
|
31
|
-
case
|
|
30
|
+
case 5126:
|
|
32
31
|
return 'f32';
|
|
33
|
-
case
|
|
32
|
+
case 5131:
|
|
34
33
|
return 'f16';
|
|
35
34
|
default:
|
|
36
35
|
throw new Error(String(type));
|
|
@@ -39,13 +38,13 @@ export function getShaderDataTypeFromGL(type) {
|
|
|
39
38
|
export function getGLFromShaderDataType(type) {
|
|
40
39
|
switch (type) {
|
|
41
40
|
case 'i32':
|
|
42
|
-
return
|
|
41
|
+
return 5124;
|
|
43
42
|
case 'u32':
|
|
44
|
-
return
|
|
43
|
+
return 5125;
|
|
45
44
|
case 'f32':
|
|
46
|
-
return
|
|
45
|
+
return 5126;
|
|
47
46
|
case 'f16':
|
|
48
|
-
return
|
|
47
|
+
return 5131;
|
|
49
48
|
default:
|
|
50
49
|
throw new Error(String(type));
|
|
51
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader-formats.js","names":["
|
|
1
|
+
{"version":3,"file":"shader-formats.js","names":["getShaderAttributeTypeFromGL","type","components","dataType","getShaderDataTypeFromGL","Error","String","getGLFromShaderDataType"],"sources":["../../../src/adapter/converters/shader-formats.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {GL} from '@luma.gl/constants';\nimport {ShaderAttributeType, ShaderDataType} from '@luma.gl/core';\n\n/** Get shader attribute type from GL constants */\nexport function getShaderAttributeTypeFromGL(type: GL, components: 1 | 2 | 3 | 4): ShaderAttributeType {\n const dataType = getShaderDataTypeFromGL(type);\n switch (components) {\n case 1: return dataType;\n case 2: return `vec2<${dataType}>`;\n case 3: return `vec2<${dataType}>`;\n case 4: return `vec2<${dataType}>`;\n default: throw new Error(String(components));\n }\n}\n\n/** Get shader data type from GL constants */\nexport function getShaderDataTypeFromGL(type: GL): ShaderDataType {\n switch (type) {\n case GL.INT: return 'i32';\n case GL.UNSIGNED_INT: return 'u32';\n case GL.SHORT: return 'i32';\n case GL.UNSIGNED_SHORT: return 'u32';\n case GL.BYTE: return 'i32';\n case GL.UNSIGNED_BYTE: return 'u32';\n case GL.FLOAT: return 'f32';\n case GL.HALF_FLOAT: return 'f16';\n default: throw new Error(String(type));\n }\n}\n\n/** GetGL constant from shader data type */\nexport function getGLFromShaderDataType(type: ShaderDataType): GL.INT | GL.UNSIGNED_INT | GL.FLOAT | GL.HALF_FLOAT {\n switch (type) {\n // TODO\n case 'i32': return GL.INT;\n case 'u32': return GL.UNSIGNED_INT;\n case 'f32': return GL.FLOAT;\n case 'f16': return GL.HALF_FLOAT;\n default: throw new Error(String(type));\n }\n}\n"],"mappings":"AAOA,OAAO,SAASA,4BAA4BA,CAACC,IAAQ,EAAEC,UAAyB,EAAuB;EACrG,MAAMC,QAAQ,GAAGC,uBAAuB,CAACH,IAAI,CAAC;EAC9C,QAAQC,UAAU;IAChB,KAAK,CAAC;MAAE,OAAOC,QAAQ;IACvB,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC,KAAK,CAAC;MAAE,OAAQ,QAAOA,QAAS,GAAE;IAClC;MAAS,MAAM,IAAIE,KAAK,CAACC,MAAM,CAACJ,UAAU,CAAC,CAAC;EAC9C;AACF;AAGA,OAAO,SAASE,uBAAuBA,CAACH,IAAQ,EAAkB;EAChE,QAAQA,IAAI;IACV;MAAa,OAAO,KAAK;IACzB;MAAsB,OAAO,KAAK;IAClC;MAAe,OAAO,KAAK;IAC3B;MAAwB,OAAO,KAAK;IACpC;MAAc,OAAO,KAAK;IAC1B;MAAuB,OAAO,KAAK;IACnC;MAAe,OAAO,KAAK;IAC3B;MAAoB,OAAO,KAAK;IAChC;MAAS,MAAM,IAAII,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;EACxC;AACF;AAGA,OAAO,SAASM,uBAAuBA,CAACN,IAAoB,EAAuD;EACjH,QAAQA,IAAI;IAEV,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ,KAAK,KAAK;MAAE;IACZ;MAAS,MAAM,IAAII,KAAK,CAACC,MAAM,CAACL,IAAI,CAAC,CAAC;EACxC;AACF"}
|