@luma.gl/webgl 9.0.0-beta.1 → 9.0.0-beta.10
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 +295 -156
- package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
- package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
- package/dist/adapter/converters/sampler-parameters.js +73 -67
- package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
- package/dist/adapter/converters/shader-formats.js +53 -46
- package/dist/adapter/converters/texture-formats.d.ts +17 -21
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +481 -879
- package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
- package/dist/adapter/converters/vertex-formats.js +53 -61
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +20 -0
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-features.js +98 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
- package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
- package/dist/adapter/helpers/decode-webgl-types.js +88 -76
- package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
- package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
- package/dist/adapter/helpers/get-shader-layout.js +261 -225
- package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js +47 -37
- package/dist/adapter/helpers/set-uniform.d.ts +1 -1
- package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
- package/dist/adapter/helpers/set-uniform.js +68 -82
- package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
- package/dist/adapter/helpers/webgl-topology-utils.js +78 -93
- package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
- package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
- package/dist/adapter/objects/constants-to-keys.js +19 -12
- package/dist/adapter/objects/webgl-renderbuffer.d.ts +2 -2
- package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-renderbuffer.js +86 -77
- package/dist/adapter/objects/webgl-resource.d.ts +3 -25
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +102 -147
- package/dist/adapter/resources/webgl-buffer.d.ts +3 -4
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +159 -117
- package/dist/adapter/resources/webgl-command-buffer.d.ts +1 -1
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +266 -168
- package/dist/adapter/resources/webgl-command-encoder.d.ts +8 -3
- package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-encoder.js +33 -39
- package/dist/adapter/resources/webgl-external-texture.js +93 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +8 -12
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +174 -139
- package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
- package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-query-set.js +136 -0
- package/dist/adapter/resources/webgl-render-pass.d.ts +3 -1
- package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pass.js +124 -90
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +15 -6
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +362 -221
- package/dist/adapter/resources/webgl-sampler.d.ts +1 -3
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +43 -33
- package/dist/adapter/resources/webgl-shader.d.ts +12 -2
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +114 -47
- package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
- package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
- package/dist/adapter/resources/webgl-texture-view.js +18 -0
- package/dist/adapter/resources/webgl-texture.d.ts +8 -10
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +616 -694
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +2 -2
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js +141 -143
- package/dist/adapter/resources/webgl-vertex-array.d.ts +3 -3
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +229 -157
- package/dist/adapter/webgl-canvas-context.d.ts +2 -2
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +58 -36
- package/dist/adapter/webgl-device.d.ts +50 -44
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +427 -352
- package/dist/classic/accessor.d.ts.map +1 -1
- package/dist/classic/accessor.js +132 -101
- package/dist/classic/clear.d.ts +2 -2
- package/dist/classic/clear.d.ts.map +1 -1
- package/dist/classic/clear.js +73 -72
- package/dist/classic/copy-and-blit.d.ts +1 -1
- package/dist/classic/copy-and-blit.d.ts.map +1 -1
- package/dist/classic/copy-and-blit.js +174 -175
- package/dist/classic/format-utils.d.ts +2 -2
- package/dist/classic/format-utils.d.ts.map +1 -1
- package/dist/classic/format-utils.js +39 -32
- package/dist/classic/typed-array-utils.d.ts.map +1 -1
- package/dist/classic/typed-array-utils.js +96 -81
- package/dist/context/debug/spector.d.ts.map +1 -1
- package/dist/context/debug/spector.js +55 -50
- package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
- package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
- package/dist/context/debug/webgl-developer-tools.js +104 -77
- package/dist/context/{context → helpers}/create-browser-context.d.ts +1 -6
- package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
- package/dist/context/helpers/create-browser-context.js +67 -0
- package/dist/context/{polyfill/context-data.d.ts → helpers/webgl-context-data.d.ts} +2 -2
- package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
- package/dist/context/helpers/webgl-context-data.js +21 -0
- package/dist/context/helpers/webgl-extensions.d.ts +4 -0
- package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
- package/dist/context/helpers/webgl-extensions.js +10 -0
- package/dist/context/parameters/unified-parameter-api.d.ts +3 -4
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +92 -47
- package/dist/context/parameters/webgl-parameter-tables.d.ts +109 -99
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +463 -404
- package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
- package/dist/context/state-tracker/deep-array-equal.js +19 -14
- package/dist/context/state-tracker/track-context-state.d.ts +4 -4
- package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
- package/dist/context/state-tracker/track-context-state.js +188 -123
- package/dist/context/state-tracker/with-parameters.d.ts +2 -3
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +42 -28
- package/dist/dist.dev.js +4465 -7235
- package/dist/dist.min.js +10 -0
- package/dist/index.cjs +2146 -3116
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +25 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist.min.js +9 -42
- package/package.json +10 -15
- package/src/adapter/converters/device-parameters.ts +114 -28
- package/src/adapter/converters/sampler-parameters.ts +12 -20
- package/src/adapter/converters/shader-formats.ts +47 -22
- package/src/adapter/converters/texture-formats.ts +183 -227
- package/src/adapter/converters/vertex-formats.ts +3 -3
- package/src/adapter/device-helpers/webgl-device-features.ts +121 -0
- package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +30 -22
- package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
- package/src/adapter/helpers/decode-webgl-types.ts +13 -7
- package/src/adapter/helpers/get-shader-layout.ts +21 -31
- package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
- package/src/adapter/helpers/set-uniform.ts +3 -4
- package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
- package/src/adapter/objects/constants-to-keys.ts +3 -2
- package/src/adapter/objects/webgl-renderbuffer.ts +38 -16
- package/src/adapter/objects/webgl-resource.ts +8 -141
- package/src/adapter/resources/webgl-buffer.ts +10 -14
- package/src/adapter/resources/webgl-command-buffer.ts +24 -34
- package/src/adapter/resources/webgl-command-encoder.ts +14 -11
- package/src/adapter/resources/webgl-external-texture.ts +7 -7
- package/src/adapter/resources/webgl-framebuffer.ts +65 -58
- package/src/adapter/resources/webgl-query-set.ts +171 -0
- package/src/adapter/resources/webgl-render-pass.ts +27 -18
- package/src/adapter/resources/webgl-render-pipeline.ts +148 -73
- package/src/adapter/resources/webgl-sampler.ts +7 -10
- package/src/adapter/resources/webgl-shader.ts +65 -11
- package/src/adapter/resources/webgl-texture-view.ts +28 -0
- package/src/adapter/resources/webgl-texture.ts +43 -106
- package/src/adapter/resources/webgl-transform-feedback.ts +16 -22
- package/src/adapter/resources/webgl-vertex-array.ts +20 -21
- package/src/adapter/webgl-canvas-context.ts +7 -11
- package/src/adapter/webgl-device.ts +142 -162
- package/src/classic/accessor.ts +5 -4
- package/src/classic/clear.ts +25 -20
- package/src/classic/copy-and-blit.ts +12 -6
- package/src/classic/format-utils.ts +2 -1
- package/src/classic/typed-array-utils.ts +3 -7
- package/src/context/debug/spector.ts +9 -6
- package/src/context/debug/webgl-developer-tools.ts +31 -20
- package/src/context/{context → helpers}/create-browser-context.ts +9 -33
- package/src/context/{polyfill/context-data.ts → helpers/webgl-context-data.ts} +3 -2
- package/src/context/helpers/webgl-extensions.ts +17 -0
- package/src/context/parameters/unified-parameter-api.ts +6 -17
- package/src/context/parameters/webgl-parameter-tables.ts +118 -90
- package/src/context/state-tracker/deep-array-equal.ts +2 -1
- package/src/context/state-tracker/track-context-state.ts +29 -23
- package/src/context/state-tracker/with-parameters.ts +8 -8
- package/src/index.ts +16 -56
- package/src/types.ts +2 -1
- package/dist/adapter/converters/device-parameters.js.map +0 -1
- package/dist/adapter/converters/sampler-parameters.js.map +0 -1
- package/dist/adapter/converters/shader-formats.js.map +0 -1
- package/dist/adapter/converters/texture-formats.js.map +0 -1
- package/dist/adapter/converters/vertex-formats.js.map +0 -1
- package/dist/adapter/device-helpers/device-features.d.ts +0 -9
- package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
- package/dist/adapter/device-helpers/device-features.js +0 -96
- package/dist/adapter/device-helpers/device-features.js.map +0 -1
- package/dist/adapter/device-helpers/device-limits.d.ts +0 -52
- package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
- package/dist/adapter/device-helpers/device-limits.js +0 -87
- package/dist/adapter/device-helpers/device-limits.js.map +0 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
- package/dist/adapter/device-helpers/get-device-info.js +0 -71
- package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
- package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
- package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
- package/dist/adapter/device-helpers/is-old-ie.js +0 -9
- package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
- package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
- package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
- package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
- package/dist/adapter/helpers/set-uniform.js.map +0 -1
- package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
- package/dist/adapter/objects/constants-to-keys.js.map +0 -1
- package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
- package/dist/adapter/objects/webgl-resource.js.map +0 -1
- package/dist/adapter/resources/webgl-buffer.js.map +0 -1
- package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
- package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
- package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
- package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
- package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
- package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
- package/dist/adapter/resources/webgl-sampler.js.map +0 -1
- package/dist/adapter/resources/webgl-shader.js.map +0 -1
- package/dist/adapter/resources/webgl-texture.js.map +0 -1
- package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
- package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
- package/dist/adapter/webgl-canvas-context.js.map +0 -1
- package/dist/adapter/webgl-device.js.map +0 -1
- package/dist/classic/accessor.js.map +0 -1
- package/dist/classic/clear.js.map +0 -1
- package/dist/classic/copy-and-blit.js.map +0 -1
- package/dist/classic/format-utils.js.map +0 -1
- package/dist/classic/typed-array-utils.js.map +0 -1
- package/dist/context/context/create-browser-context.d.ts.map +0 -1
- package/dist/context/context/create-browser-context.js +0 -53
- package/dist/context/context/create-browser-context.js.map +0 -1
- package/dist/context/context/create-headless-context.d.ts +0 -9
- package/dist/context/context/create-headless-context.d.ts.map +0 -1
- package/dist/context/context/create-headless-context.js +0 -42
- package/dist/context/context/create-headless-context.js.map +0 -1
- package/dist/context/context/webgl-checks.d.ts +0 -13
- package/dist/context/context/webgl-checks.d.ts.map +0 -1
- package/dist/context/context/webgl-checks.js +0 -31
- package/dist/context/context/webgl-checks.js.map +0 -1
- package/dist/context/debug/spector.js.map +0 -1
- package/dist/context/debug/webgl-developer-tools.js.map +0 -1
- package/dist/context/parameters/unified-parameter-api.js.map +0 -1
- package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
- package/dist/context/polyfill/context-data.d.ts.map +0 -1
- package/dist/context/polyfill/context-data.js +0 -12
- package/dist/context/polyfill/context-data.js.map +0 -1
- package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
- package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
- package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
- package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
- package/dist/context/polyfill/polyfill-context.d.ts +0 -5
- package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-context.js +0 -87
- package/dist/context/polyfill/polyfill-context.js.map +0 -1
- package/dist/context/polyfill/polyfill-table.d.ts +0 -48
- package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-table.js +0 -137
- package/dist/context/polyfill/polyfill-table.js.map +0 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
- package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
- package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
- package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
- package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
- package/dist/context/state-tracker/track-context-state.js.map +0 -1
- package/dist/context/state-tracker/with-parameters.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/src/adapter/device-helpers/device-features.ts +0 -161
- package/src/adapter/device-helpers/device-limits.ts +0 -155
- package/src/adapter/device-helpers/is-old-ie.ts +0 -14
- package/src/context/context/create-headless-context.ts +0 -51
- package/src/context/context/webgl-checks.ts +0 -51
- package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
- package/src/context/polyfill/polyfill-context.ts +0 -104
- package/src/context/polyfill/polyfill-table.ts +0 -167
- package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
// Texture class.
|
|
@@ -9,12 +10,13 @@
|
|
|
9
10
|
import {
|
|
10
11
|
Device,
|
|
11
12
|
TextureProps,
|
|
13
|
+
TextureViewProps,
|
|
12
14
|
Sampler,
|
|
13
15
|
SamplerProps,
|
|
14
16
|
SamplerParameters,
|
|
15
17
|
TypedArray
|
|
16
18
|
} from '@luma.gl/core';
|
|
17
|
-
import {Texture, log, assert,
|
|
19
|
+
import {Texture, log, assert, loadImage, isObjectEmpty} from '@luma.gl/core';
|
|
18
20
|
import {GL, GLSamplerParameters} from '@luma.gl/constants';
|
|
19
21
|
import {withGLParameters} from '../../context/state-tracker/with-parameters';
|
|
20
22
|
import {
|
|
@@ -22,13 +24,11 @@ import {
|
|
|
22
24
|
getWebGLTextureParameters,
|
|
23
25
|
getTextureFormatBytesPerPixel
|
|
24
26
|
} from '../converters/texture-formats';
|
|
25
|
-
import {
|
|
26
|
-
convertSamplerParametersToWebGL,
|
|
27
|
-
updateSamplerParametersForNPOT
|
|
28
|
-
} from '../converters/sampler-parameters';
|
|
27
|
+
import {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';
|
|
29
28
|
import {WebGLDevice} from '../webgl-device';
|
|
30
29
|
import {WEBGLBuffer} from './webgl-buffer';
|
|
31
30
|
import {WEBGLSampler} from './webgl-sampler';
|
|
31
|
+
import {WEBGLTextureView} from './webgl-texture-view';
|
|
32
32
|
|
|
33
33
|
export type WEBGLTextureProps = TextureProps & {
|
|
34
34
|
/** @deprecated use props.sampler */
|
|
@@ -151,13 +151,14 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
151
151
|
|
|
152
152
|
readonly MAX_ATTRIBUTES: number;
|
|
153
153
|
readonly device: WebGLDevice;
|
|
154
|
-
readonly gl:
|
|
155
|
-
readonly gl2: WebGL2RenderingContext | null;
|
|
154
|
+
readonly gl: WebGL2RenderingContext;
|
|
156
155
|
readonly handle: WebGLTexture;
|
|
157
156
|
|
|
158
|
-
|
|
157
|
+
// (TODO - currently unused in WebGL, but WebGL 2 does support sampler objects) */
|
|
159
158
|
sampler: WEBGLSampler = undefined;
|
|
160
159
|
|
|
160
|
+
view: WEBGLTextureView = undefined;
|
|
161
|
+
|
|
161
162
|
// data;
|
|
162
163
|
|
|
163
164
|
glFormat: GL = undefined;
|
|
@@ -194,7 +195,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
194
195
|
|
|
195
196
|
this.device = device as WebGLDevice;
|
|
196
197
|
this.gl = this.device.gl;
|
|
197
|
-
this.gl2 = this.device.gl2;
|
|
198
198
|
this.handle = this.props.handle || this.gl.createTexture();
|
|
199
199
|
this.device.setSpectorMetadata(this.handle, {...this.props, data: typeof this.props.data}); // {name: this.props.id};
|
|
200
200
|
|
|
@@ -228,6 +228,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
228
228
|
return `Texture(${this.id},${this.width}x${this.height})`;
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
+
createView(props: TextureViewProps): WEBGLTextureView {
|
|
232
|
+
return new WEBGLTextureView(this.device, {...props, texture: this});
|
|
233
|
+
}
|
|
234
|
+
|
|
231
235
|
// eslint-disable-next-line max-statements
|
|
232
236
|
initialize(props: WEBGLTextureProps = {}): this {
|
|
233
237
|
// Cube textures
|
|
@@ -260,7 +264,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
260
264
|
|
|
261
265
|
const {parameters = {} as Record<GL, any>} = props;
|
|
262
266
|
|
|
263
|
-
const {pixels = null, pixelStore = {}, textureUnit = undefined} = props;
|
|
267
|
+
const {pixels = null, pixelStore = {}, textureUnit = undefined, mipmaps = true} = props;
|
|
264
268
|
|
|
265
269
|
// pixels variable is for API compatibility purpose
|
|
266
270
|
if (!data) {
|
|
@@ -270,10 +274,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
270
274
|
data = pixels;
|
|
271
275
|
}
|
|
272
276
|
|
|
273
|
-
let {width, height, dataFormat, type, compressed = false
|
|
277
|
+
let {width, height, dataFormat, type, compressed = false} = props;
|
|
274
278
|
const {depth = 0} = props;
|
|
275
279
|
|
|
276
|
-
const glFormat = convertTextureFormatToGL(props.format
|
|
280
|
+
const glFormat = convertTextureFormatToGL(props.format);
|
|
277
281
|
|
|
278
282
|
// Deduce width and height
|
|
279
283
|
({width, height, compressed, dataFormat, type} = this._deduceParameters({
|
|
@@ -300,11 +304,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
300
304
|
this.gl.bindTexture(this.target, this.handle);
|
|
301
305
|
}
|
|
302
306
|
|
|
303
|
-
if (mipmaps && this.device.isWebGL1 && isNPOT(this.width, this.height)) {
|
|
304
|
-
log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaps`)();
|
|
305
|
-
mipmaps = false;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
307
|
this.mipmaps = mipmaps;
|
|
309
308
|
|
|
310
309
|
this.setImageData({
|
|
@@ -324,7 +323,9 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
324
323
|
this.setSampler(props.sampler);
|
|
325
324
|
this._setSamplerParameters(parameters);
|
|
326
325
|
|
|
327
|
-
|
|
326
|
+
this.view = this.createView({...this.props, mipLevelCount: 1, arrayLayerCount: 1});
|
|
327
|
+
|
|
328
|
+
if (mipmaps && this.device.isTextureFormatFilterable(props.format)) {
|
|
328
329
|
this.generateMipmap();
|
|
329
330
|
}
|
|
330
331
|
|
|
@@ -372,7 +373,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
372
373
|
samplerProps = sampler as SamplerProps;
|
|
373
374
|
}
|
|
374
375
|
|
|
375
|
-
// TODO - technically, this is only needed in WebGL1. In WebGL2 we could always use the sampler.
|
|
376
376
|
const parameters = convertSamplerParametersToWebGL(samplerProps);
|
|
377
377
|
this._setSamplerParameters(parameters);
|
|
378
378
|
return this;
|
|
@@ -418,11 +418,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
418
418
|
|
|
419
419
|
// Call to regenerate mipmaps after modifying texture(s)
|
|
420
420
|
generateMipmap(params = {}): this {
|
|
421
|
-
if (this.device.isWebGL1 && isNPOT(this.width, this.height)) {
|
|
422
|
-
log.warn(`texture: ${this} is Non-Power-Of-Two, disabling mipmaping`)();
|
|
423
|
-
return this;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
421
|
this.mipmaps = true;
|
|
427
422
|
|
|
428
423
|
this.gl.bindTexture(this.target, this.handle);
|
|
@@ -500,8 +495,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
500
495
|
let dataType = null;
|
|
501
496
|
({data, dataType} = this._getDataType({data, compressed}));
|
|
502
497
|
|
|
503
|
-
let gl2;
|
|
504
|
-
|
|
505
498
|
withGLParameters(this.gl, parameters, () => {
|
|
506
499
|
switch (dataType) {
|
|
507
500
|
case 'null':
|
|
@@ -518,8 +511,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
518
511
|
);
|
|
519
512
|
break;
|
|
520
513
|
case 'typed-array':
|
|
521
|
-
// Looks like this assert is not necessary, as offset is ignored under WebGL1
|
|
522
|
-
// assert((offset === 0 || this.device.isWebGL2), 'offset supported in WebGL2 only');
|
|
523
514
|
gl.texImage2D(
|
|
524
515
|
target,
|
|
525
516
|
level,
|
|
@@ -530,15 +521,13 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
530
521
|
dataFormat,
|
|
531
522
|
type,
|
|
532
523
|
data,
|
|
533
|
-
// @ts-expect-error
|
|
534
524
|
offset
|
|
535
525
|
);
|
|
536
526
|
break;
|
|
537
527
|
case 'buffer':
|
|
538
528
|
// WebGL2 enables creating textures directly from a WebGL buffer
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
gl2.texImage2D(
|
|
529
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);
|
|
530
|
+
this.device.gl.texImage2D(
|
|
542
531
|
target,
|
|
543
532
|
level,
|
|
544
533
|
glFormat,
|
|
@@ -549,24 +538,20 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
549
538
|
type,
|
|
550
539
|
offset
|
|
551
540
|
);
|
|
552
|
-
|
|
541
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
|
|
553
542
|
break;
|
|
554
543
|
case 'browser-object':
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
);
|
|
567
|
-
} else {
|
|
568
|
-
gl.texImage2D(target, level, glFormat, dataFormat, type, data);
|
|
569
|
-
}
|
|
544
|
+
gl.texImage2D(
|
|
545
|
+
target,
|
|
546
|
+
level,
|
|
547
|
+
glFormat,
|
|
548
|
+
width,
|
|
549
|
+
height,
|
|
550
|
+
0 /* border*/,
|
|
551
|
+
dataFormat,
|
|
552
|
+
type,
|
|
553
|
+
data
|
|
554
|
+
);
|
|
570
555
|
break;
|
|
571
556
|
case 'compressed':
|
|
572
557
|
for (const [levelIndex, levelData] of data.entries()) {
|
|
@@ -590,7 +575,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
590
575
|
if (data && data.byteLength) {
|
|
591
576
|
this.trackAllocatedMemory(data.byteLength, 'Texture');
|
|
592
577
|
} else {
|
|
593
|
-
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format
|
|
578
|
+
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);
|
|
594
579
|
this.trackAllocatedMemory(this.width * this.height * bytesPerPixel, 'Texture');
|
|
595
580
|
}
|
|
596
581
|
|
|
@@ -659,22 +644,16 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
659
644
|
} else if (data === null) {
|
|
660
645
|
this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);
|
|
661
646
|
} else if (ArrayBuffer.isView(data)) {
|
|
662
|
-
// const gl2 = this.device.assertWebGL2();
|
|
663
|
-
// @ts-expect-error last offset parameter is ignored under WebGL1
|
|
664
647
|
this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);
|
|
665
648
|
} else if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {
|
|
666
649
|
// WebGL2 allows us to create texture directly from a WebGL buffer
|
|
667
|
-
const gl2 = this.device.assertWebGL2();
|
|
668
650
|
// This texImage2D signature uses currently bound GL.PIXEL_UNPACK_BUFFER
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
} else if (this.device.isWebGL2) {
|
|
673
|
-
// Assume data is a browser supported object (ImageData, Canvas, ...)
|
|
674
|
-
const gl2 = this.device.assertWebGL2();
|
|
675
|
-
gl2.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);
|
|
651
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);
|
|
652
|
+
this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);
|
|
653
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
|
|
676
654
|
} else {
|
|
677
|
-
|
|
655
|
+
// Assume data is a browser supported object (ImageData, Canvas, ...)
|
|
656
|
+
this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);
|
|
678
657
|
}
|
|
679
658
|
});
|
|
680
659
|
|
|
@@ -754,7 +733,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
754
733
|
let {width, height, dataFormat, type, compressed} = opts;
|
|
755
734
|
|
|
756
735
|
// Deduce format and type from format
|
|
757
|
-
const parameters = getWebGLTextureParameters(format
|
|
736
|
+
const parameters = getWebGLTextureParameters(format);
|
|
758
737
|
dataFormat = dataFormat || parameters.dataFormat;
|
|
759
738
|
type = type || parameters.type;
|
|
760
739
|
compressed = compressed || parameters.compressed;
|
|
@@ -910,11 +889,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
910
889
|
|
|
911
890
|
this.gl.bindTexture(this.target, this.handle);
|
|
912
891
|
|
|
913
|
-
const webglTextureFormat = getWebGLTextureParameters(format
|
|
892
|
+
const webglTextureFormat = getWebGLTextureParameters(format);
|
|
914
893
|
|
|
915
894
|
withGLParameters(this.gl, parameters, () => {
|
|
916
895
|
if (ArrayBuffer.isView(data)) {
|
|
917
|
-
// @ts-expect-error
|
|
918
896
|
this.gl.texImage3D(
|
|
919
897
|
this.target,
|
|
920
898
|
level,
|
|
@@ -931,7 +909,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
931
909
|
|
|
932
910
|
if (data instanceof WEBGLBuffer) {
|
|
933
911
|
this.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle);
|
|
934
|
-
// @ts-expect-error
|
|
935
912
|
this.gl.texImage3D(
|
|
936
913
|
this.target,
|
|
937
914
|
level,
|
|
@@ -950,7 +927,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
950
927
|
if (data && data.byteLength) {
|
|
951
928
|
this.trackAllocatedMemory(data.byteLength, 'Texture');
|
|
952
929
|
} else {
|
|
953
|
-
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format
|
|
930
|
+
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);
|
|
954
931
|
this.trackAllocatedMemory(this.width * this.height * this.depth * bytesPerPixel, 'Texture');
|
|
955
932
|
}
|
|
956
933
|
|
|
@@ -963,14 +940,8 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
963
940
|
|
|
964
941
|
/**
|
|
965
942
|
* Sets sampler parameters on texture
|
|
966
|
-
* @note: Applies NPOT workaround if appropriate
|
|
967
943
|
*/
|
|
968
944
|
_setSamplerParameters(parameters: GLSamplerParameters): void {
|
|
969
|
-
// Work around WebGL1 sampling restrictions on NPOT textures
|
|
970
|
-
if (this.device.isWebGL1 && isNPOT(this.width, this.height)) {
|
|
971
|
-
parameters = updateSamplerParametersForNPOT(parameters);
|
|
972
|
-
}
|
|
973
|
-
|
|
974
945
|
// NPOT parameters may populate an empty object
|
|
975
946
|
if (isObjectEmpty(parameters)) {
|
|
976
947
|
return;
|
|
@@ -999,32 +970,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
999
970
|
this.gl.bindTexture(this.target, null);
|
|
1000
971
|
return;
|
|
1001
972
|
}
|
|
1002
|
-
|
|
1003
|
-
/** @deprecated For LegacyTexture subclass */
|
|
1004
|
-
protected _getWebGL1NPOTParameterOverride(
|
|
1005
|
-
pname: GL.TEXTURE_MIN_FILTER | GL.TEXTURE_WRAP_S | GL.TEXTURE_WRAP_T,
|
|
1006
|
-
value: GL.LINEAR | GL.NEAREST
|
|
1007
|
-
): number {
|
|
1008
|
-
// NOTE: Apply NPOT workaround
|
|
1009
|
-
const npot = this.device.isWebGL1 && isNPOT(this.width, this.height);
|
|
1010
|
-
if (npot) {
|
|
1011
|
-
switch (pname) {
|
|
1012
|
-
case GL.TEXTURE_MIN_FILTER:
|
|
1013
|
-
if (value !== GL.LINEAR && value !== GL.NEAREST) {
|
|
1014
|
-
// log.warn(`texture: ${this} is Non-Power-Of-Two, forcing TEXTURE_MIN_FILTER to LINEAR`)();
|
|
1015
|
-
return GL.LINEAR;
|
|
1016
|
-
}
|
|
1017
|
-
break;
|
|
1018
|
-
case GL.TEXTURE_WRAP_S:
|
|
1019
|
-
case GL.TEXTURE_WRAP_T:
|
|
1020
|
-
// if (value !== GL.CLAMP_TO_EDGE) { log.warn(`texture: ${this} is Non-Power-Of-Two, ${getKey(this.gl, pname)} to CLAMP_TO_EDGE`)(); }
|
|
1021
|
-
return GL.CLAMP_TO_EDGE;
|
|
1022
|
-
default:
|
|
1023
|
-
break;
|
|
1024
|
-
}
|
|
1025
|
-
}
|
|
1026
|
-
return value;
|
|
1027
|
-
}
|
|
1028
973
|
}
|
|
1029
974
|
|
|
1030
975
|
// HELPERS
|
|
@@ -1049,14 +994,6 @@ function getWebGLTextureTarget(props: TextureProps) {
|
|
|
1049
994
|
}
|
|
1050
995
|
}
|
|
1051
996
|
|
|
1052
|
-
function isNPOT(width: number, height: number): boolean {
|
|
1053
|
-
// Width and height not available, avoid classifying as NPOT texture
|
|
1054
|
-
if (!width || !height) {
|
|
1055
|
-
return false;
|
|
1056
|
-
}
|
|
1057
|
-
return !isPowerOfTwo(width) || !isPowerOfTwo(height);
|
|
1058
|
-
}
|
|
1059
|
-
|
|
1060
997
|
function logParameters(parameters: Record<number, GL | number>) {
|
|
1061
998
|
log.log(1, 'texture sampler parameters', parameters)();
|
|
1062
999
|
}
|
|
@@ -2,12 +2,12 @@ import type {PrimitiveTopology, ShaderLayout, TransformFeedbackProps} from '@lum
|
|
|
2
2
|
import {log, TransformFeedback, Buffer, BufferRange} from '@luma.gl/core';
|
|
3
3
|
import {GL} from '@luma.gl/constants';
|
|
4
4
|
import {WebGLDevice} from '../webgl-device';
|
|
5
|
-
import {WEBGLBuffer} from '
|
|
5
|
+
import {WEBGLBuffer} from '../../index';
|
|
6
6
|
import {getGLPrimitive} from '../helpers/webgl-topology-utils';
|
|
7
7
|
|
|
8
8
|
export class WEBGLTransformFeedback extends TransformFeedback {
|
|
9
9
|
readonly device: WebGLDevice;
|
|
10
|
-
readonly
|
|
10
|
+
readonly gl: WebGL2RenderingContext;
|
|
11
11
|
readonly handle: WebGLTransformFeedback;
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -29,10 +29,9 @@ export class WEBGLTransformFeedback extends TransformFeedback {
|
|
|
29
29
|
constructor(device: WebGLDevice, props: TransformFeedbackProps) {
|
|
30
30
|
super(device, props);
|
|
31
31
|
|
|
32
|
-
device.assertWebGL2();
|
|
33
32
|
this.device = device;
|
|
34
|
-
this.
|
|
35
|
-
this.handle = this.props.handle || this.
|
|
33
|
+
this.gl = device.gl;
|
|
34
|
+
this.handle = this.props.handle || this.gl.createTransformFeedback();
|
|
36
35
|
this.layout = this.props.layout;
|
|
37
36
|
|
|
38
37
|
if (props.buffers) {
|
|
@@ -43,24 +42,24 @@ export class WEBGLTransformFeedback extends TransformFeedback {
|
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
override destroy(): void {
|
|
46
|
-
this.
|
|
45
|
+
this.gl.deleteTransformFeedback(this.handle);
|
|
47
46
|
super.destroy();
|
|
48
47
|
}
|
|
49
48
|
|
|
50
49
|
begin(topology: PrimitiveTopology = 'point-list'): void {
|
|
51
|
-
this.
|
|
50
|
+
this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);
|
|
52
51
|
if (this.bindOnUse) {
|
|
53
52
|
this._bindBuffers();
|
|
54
53
|
}
|
|
55
|
-
this.
|
|
54
|
+
this.gl.beginTransformFeedback(getGLPrimitive(topology));
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
end(): void {
|
|
59
|
-
this.
|
|
58
|
+
this.gl.endTransformFeedback();
|
|
60
59
|
if (!this.bindOnUse) {
|
|
61
60
|
this._unbindBuffers();
|
|
62
61
|
}
|
|
63
|
-
this.
|
|
62
|
+
this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
// SUBCLASS
|
|
@@ -105,18 +104,18 @@ export class WEBGLTransformFeedback extends TransformFeedback {
|
|
|
105
104
|
|
|
106
105
|
bind(funcOrHandle = this.handle) {
|
|
107
106
|
if (typeof funcOrHandle !== 'function') {
|
|
108
|
-
this.
|
|
107
|
+
this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, funcOrHandle);
|
|
109
108
|
return this;
|
|
110
109
|
}
|
|
111
110
|
|
|
112
111
|
let value: unknown;
|
|
113
112
|
|
|
114
113
|
if (!this._bound) {
|
|
115
|
-
this.
|
|
114
|
+
this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, this.handle);
|
|
116
115
|
this._bound = true;
|
|
117
116
|
value = funcOrHandle();
|
|
118
117
|
this._bound = false;
|
|
119
|
-
this.
|
|
118
|
+
this.gl.bindTransformFeedback(GL.TRANSFORM_FEEDBACK, null);
|
|
120
119
|
} else {
|
|
121
120
|
value = funcOrHandle();
|
|
122
121
|
}
|
|
@@ -171,21 +170,16 @@ export class WEBGLTransformFeedback extends TransformFeedback {
|
|
|
171
170
|
|
|
172
171
|
protected _unbindBuffers(): void {
|
|
173
172
|
for (const bufferIndex in this.buffers) {
|
|
174
|
-
this.
|
|
173
|
+
this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, Number(bufferIndex), null);
|
|
175
174
|
}
|
|
176
175
|
}
|
|
177
176
|
|
|
178
|
-
protected _bindBuffer(
|
|
179
|
-
index: number,
|
|
180
|
-
buffer: Buffer,
|
|
181
|
-
byteOffset = 0,
|
|
182
|
-
byteLength?: number
|
|
183
|
-
): void {
|
|
177
|
+
protected _bindBuffer(index: number, buffer: Buffer, byteOffset = 0, byteLength?: number): void {
|
|
184
178
|
const handle = buffer && (buffer as WEBGLBuffer).handle;
|
|
185
179
|
if (!handle || byteLength === undefined) {
|
|
186
|
-
this.
|
|
180
|
+
this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);
|
|
187
181
|
} else {
|
|
188
|
-
this.
|
|
182
|
+
this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteLength);
|
|
189
183
|
}
|
|
190
184
|
}
|
|
191
185
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
import type {Device, Buffer, VertexArrayProps, TypedArray, NumberArray} from '@luma.gl/core';
|
|
@@ -28,14 +29,14 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
28
29
|
|
|
29
30
|
/** * Attribute 0 can not be disable on most desktop OpenGL based browsers */
|
|
30
31
|
static isConstantAttributeZeroSupported(device: Device): boolean {
|
|
31
|
-
return
|
|
32
|
+
return getBrowser() === 'Chrome';
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
// Create a VertexArray
|
|
35
36
|
constructor(device: WebGLDevice, props?: VertexArrayProps) {
|
|
36
37
|
super(device, props);
|
|
37
38
|
this.device = device;
|
|
38
|
-
this.handle = this.device.
|
|
39
|
+
this.handle = this.device.gl.createVertexArray();
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
override destroy(): void {
|
|
@@ -44,7 +45,7 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
44
45
|
this.buffer?.destroy();
|
|
45
46
|
}
|
|
46
47
|
if (this.handle) {
|
|
47
|
-
this.device.
|
|
48
|
+
this.device.gl.deleteVertexArray(this.handle);
|
|
48
49
|
// @ts-expect-error read-only/undefined
|
|
49
50
|
this.handle = undefined!;
|
|
50
51
|
}
|
|
@@ -66,9 +67,9 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
66
67
|
throw new Error('Use .setBuffer()');
|
|
67
68
|
}
|
|
68
69
|
// In WebGL The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject
|
|
69
|
-
this.device.
|
|
70
|
+
this.device.gl.bindVertexArray(this.handle);
|
|
70
71
|
// TODO - this initial binding does not seem to take effect? see bindBeforeRender()
|
|
71
|
-
this.device.
|
|
72
|
+
this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, buffer ? buffer.handle : null);
|
|
72
73
|
// log.log(1, 'VertexArray.setIndexBuffer', indexBuffer)();
|
|
73
74
|
// log.log(1, `Binding vertex array ${this.id}`, buffer?.id)();
|
|
74
75
|
|
|
@@ -85,14 +86,13 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
85
86
|
|
|
86
87
|
const {size, type, stride, offset, normalized, integer, divisor} = this._getAccessor(location);
|
|
87
88
|
|
|
88
|
-
this.device.
|
|
89
|
+
this.device.gl.bindVertexArray(this.handle);
|
|
89
90
|
// A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target
|
|
90
91
|
this.device.gl.bindBuffer(GL.ARRAY_BUFFER, buffer.handle);
|
|
91
92
|
|
|
92
93
|
// WebGL2 supports *integer* data formats, i.e. GPU will see integer values
|
|
93
94
|
if (integer) {
|
|
94
|
-
this.device.
|
|
95
|
-
this.device.gl2.vertexAttribIPointer(location, size, type, stride, offset);
|
|
95
|
+
this.device.gl.vertexAttribIPointer(location, size, type, stride, offset);
|
|
96
96
|
} else {
|
|
97
97
|
// Attaches ARRAY_BUFFER with specified buffer format to location
|
|
98
98
|
this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
|
|
@@ -101,13 +101,13 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
101
101
|
// Mark as non-constant
|
|
102
102
|
this.device.gl.enableVertexAttribArray(location);
|
|
103
103
|
// Set the step mode 0=vertex, 1=instance
|
|
104
|
-
this.device.
|
|
104
|
+
this.device.gl.vertexAttribDivisor(location, divisor || 0);
|
|
105
105
|
|
|
106
106
|
this.attributes[location] = buffer;
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
/** Set a location in vertex attributes array to a constant value, disables the location */
|
|
110
|
-
override
|
|
110
|
+
override setConstantWebGL(location: number, value: TypedArray): void {
|
|
111
111
|
this._enable(location, false);
|
|
112
112
|
this.attributes[location] = value;
|
|
113
113
|
}
|
|
@@ -115,12 +115,12 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
115
115
|
init = false;
|
|
116
116
|
|
|
117
117
|
override bindBeforeRender(): void {
|
|
118
|
-
this.device.
|
|
118
|
+
this.device.gl.bindVertexArray(this.handle);
|
|
119
119
|
// TODO - the initial bind does not seem to take effect.
|
|
120
120
|
if (!this.init) {
|
|
121
121
|
// log.log(1, `Binding vertex array ${this.id}`, this.indexBuffer?.id)();
|
|
122
122
|
const webglBuffer = this.indexBuffer as WEBGLBuffer;
|
|
123
|
-
this.device.
|
|
123
|
+
this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, webglBuffer?.handle || null);
|
|
124
124
|
this.init = true;
|
|
125
125
|
}
|
|
126
126
|
this._applyConstantAttributes();
|
|
@@ -130,8 +130,8 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
130
130
|
// log.log(1, `Unbinding vertex array ${this.id}`)();
|
|
131
131
|
// TODO technically this is not necessary, but we might be interfacing
|
|
132
132
|
// with code that does not use vertex array objects
|
|
133
|
-
this.device.
|
|
134
|
-
// this.device.
|
|
133
|
+
this.device.gl.bindVertexArray(null);
|
|
134
|
+
// this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
// Internal methods
|
|
@@ -147,7 +147,7 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
147
147
|
const constant = this.attributes[location];
|
|
148
148
|
// A typed array means this is a constant
|
|
149
149
|
if (ArrayBuffer.isView(constant)) {
|
|
150
|
-
this.device.
|
|
150
|
+
this.device.setConstantAttributeWebGL(location, constant);
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
}
|
|
@@ -161,13 +161,12 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
161
161
|
|
|
162
162
|
// // WebGL2 supports *integer* data formats, i.e. GPU will see integer values
|
|
163
163
|
// if (integer) {
|
|
164
|
-
// this.device.
|
|
165
|
-
// this.device.gl2.vertexAttribIPointer(location, size, type, stride, offset);
|
|
164
|
+
// this.device.gl.vertexAttribIPointer(location, size, type, stride, offset);
|
|
166
165
|
// } else {
|
|
167
166
|
// // Attaches ARRAY_BUFFER with specified buffer format to location
|
|
168
167
|
// this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
|
|
169
168
|
// }
|
|
170
|
-
// this.device.
|
|
169
|
+
// this.device.gl.vertexAttribDivisor(location, divisor || 0);
|
|
171
170
|
// }
|
|
172
171
|
|
|
173
172
|
/** Get an accessor from the */
|
|
@@ -206,13 +205,13 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
206
205
|
|
|
207
206
|
if (enable || canDisableAttribute) {
|
|
208
207
|
location = Number(location);
|
|
209
|
-
this.device.
|
|
208
|
+
this.device.gl.bindVertexArray(this.handle);
|
|
210
209
|
if (enable) {
|
|
211
210
|
this.device.gl.enableVertexAttribArray(location);
|
|
212
211
|
} else {
|
|
213
212
|
this.device.gl.disableVertexAttribArray(location);
|
|
214
213
|
}
|
|
215
|
-
this.device.
|
|
214
|
+
this.device.gl.bindVertexArray(null);
|
|
216
215
|
}
|
|
217
216
|
}
|
|
218
217
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// luma.gl
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
2
3
|
// Copyright (c) vis.gl contributors
|
|
3
4
|
|
|
4
5
|
import type {CanvasContextProps} from '@luma.gl/core';
|
|
@@ -6,8 +7,8 @@ import {CanvasContext} from '@luma.gl/core';
|
|
|
6
7
|
import {WebGLDevice} from './webgl-device';
|
|
7
8
|
import {WEBGLFramebuffer} from './resources/webgl-framebuffer';
|
|
8
9
|
|
|
9
|
-
/**
|
|
10
|
-
* A WebGL Canvas Context which manages the canvas and handles drawing buffer resizing etc
|
|
10
|
+
/**
|
|
11
|
+
* A WebGL Canvas Context which manages the canvas and handles drawing buffer resizing etc
|
|
11
12
|
*/
|
|
12
13
|
export class WebGLCanvasContext extends CanvasContext {
|
|
13
14
|
readonly device: WebGLDevice;
|
|
@@ -33,7 +34,8 @@ export class WebGLCanvasContext extends CanvasContext {
|
|
|
33
34
|
/** Resizes and updates render targets if necessary */
|
|
34
35
|
update() {
|
|
35
36
|
const size = this.getPixelSize();
|
|
36
|
-
const sizeChanged =
|
|
37
|
+
const sizeChanged =
|
|
38
|
+
size[0] !== this.presentationSize[0] || size[1] !== this.presentationSize[1];
|
|
37
39
|
if (sizeChanged) {
|
|
38
40
|
this.presentationSize = size;
|
|
39
41
|
this.resize();
|
|
@@ -61,18 +63,12 @@ export class WebGLCanvasContext extends CanvasContext {
|
|
|
61
63
|
this.setDevicePixelRatio(devicePixelRatio, options);
|
|
62
64
|
return;
|
|
63
65
|
}
|
|
64
|
-
|
|
65
|
-
// Resize headless gl context
|
|
66
|
-
const ext = this.device.gl.getExtension('STACKGL_resize_drawingbuffer');
|
|
67
|
-
if (ext && options && 'width' in options && 'height' in options) {
|
|
68
|
-
ext.resize(options.width, options.height);
|
|
69
|
-
}
|
|
70
66
|
}
|
|
71
67
|
|
|
72
68
|
commit() {
|
|
73
69
|
// gl.commit was ultimately removed from the WebGL standard??
|
|
74
70
|
// if (this.offScreen && this.gl.commit) {
|
|
75
|
-
// // @ts-expect-error gl.commit is not officially part of
|
|
71
|
+
// // @ts-expect-error gl.commit is not officially part of WebGL2RenderingContext
|
|
76
72
|
// this.gl.commit();
|
|
77
73
|
// }
|
|
78
74
|
}
|