@luma.gl/webgl 9.0.0-beta.4 → 9.0.0-beta.6
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 +297 -155
- 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 +13 -19
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +474 -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/device-features.d.ts +2 -5
- package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-features.js +56 -87
- package/dist/adapter/device-helpers/device-limits.d.ts +2 -4
- package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
- package/dist/adapter/device-helpers/device-limits.js +88 -83
- package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
- package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
- package/dist/adapter/device-helpers/get-device-info.js +79 -63
- package/dist/adapter/device-helpers/webgl-device-features.d.ts +19 -0
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-features.js +86 -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 -146
- 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 +161 -119
- 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 -10
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +167 -137
- 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 +356 -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 +6 -9
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +615 -695
- 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 +34 -40
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +418 -363
- 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 +175 -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/context/context-data.d.ts +14 -0
- package/dist/context/context/context-data.d.ts.map +1 -0
- package/dist/context/context/context-data.js +33 -0
- package/dist/context/context/create-browser-context.d.ts +1 -6
- package/dist/context/context/create-browser-context.d.ts.map +1 -1
- package/dist/context/context/create-browser-context.js +62 -49
- 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/helpers/create-browser-context.d.ts +35 -0
- 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 -3
- package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
- package/dist/context/parameters/unified-parameter-api.js +94 -44
- package/dist/context/parameters/webgl-parameter-tables.d.ts +120 -99
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +469 -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 -2
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +43 -26
- package/dist/dist.dev.js +3135 -4142
- package/dist/index.cjs +1766 -2717
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +25 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist.min.js +9 -42
- package/package.json +11 -15
- package/src/adapter/converters/device-parameters.ts +105 -17
- 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 +138 -185
- package/src/adapter/converters/vertex-formats.ts +3 -3
- package/src/adapter/device-helpers/webgl-device-features.ts +101 -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 +7 -140
- 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 +5 -5
- package/src/adapter/resources/webgl-framebuffer.ts +38 -34
- package/src/adapter/resources/webgl-query-set.ts +171 -0
- package/src/adapter/resources/webgl-render-pass.ts +24 -15
- package/src/adapter/resources/webgl-render-pipeline.ts +138 -70
- 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 +38 -105
- 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 +106 -151
- 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 +5 -4
- 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 +7 -2
- package/src/index.ts +4 -18
- 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.js.map +0 -1
- package/dist/adapter/device-helpers/device-limits.js.map +0 -1
- 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.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.
|
|
@@ -14,7 +15,7 @@ import {
|
|
|
14
15
|
SamplerParameters,
|
|
15
16
|
TypedArray
|
|
16
17
|
} from '@luma.gl/core';
|
|
17
|
-
import {Texture, log, assert,
|
|
18
|
+
import {Texture, log, assert, loadImage, isObjectEmpty} from '@luma.gl/core';
|
|
18
19
|
import {GL, GLSamplerParameters} from '@luma.gl/constants';
|
|
19
20
|
import {withGLParameters} from '../../context/state-tracker/with-parameters';
|
|
20
21
|
import {
|
|
@@ -22,13 +23,11 @@ import {
|
|
|
22
23
|
getWebGLTextureParameters,
|
|
23
24
|
getTextureFormatBytesPerPixel
|
|
24
25
|
} from '../converters/texture-formats';
|
|
25
|
-
import {
|
|
26
|
-
convertSamplerParametersToWebGL,
|
|
27
|
-
updateSamplerParametersForNPOT
|
|
28
|
-
} from '../converters/sampler-parameters';
|
|
26
|
+
import {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';
|
|
29
27
|
import {WebGLDevice} from '../webgl-device';
|
|
30
28
|
import {WEBGLBuffer} from './webgl-buffer';
|
|
31
29
|
import {WEBGLSampler} from './webgl-sampler';
|
|
30
|
+
import {WEBGLTextureView} from './webgl-texture-view';
|
|
32
31
|
|
|
33
32
|
export type WEBGLTextureProps = TextureProps & {
|
|
34
33
|
/** @deprecated use props.sampler */
|
|
@@ -151,13 +150,14 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
151
150
|
|
|
152
151
|
readonly MAX_ATTRIBUTES: number;
|
|
153
152
|
readonly device: WebGLDevice;
|
|
154
|
-
readonly gl:
|
|
155
|
-
readonly gl2: WebGL2RenderingContext | null;
|
|
153
|
+
readonly gl: WebGL2RenderingContext;
|
|
156
154
|
readonly handle: WebGLTexture;
|
|
157
155
|
|
|
158
|
-
|
|
156
|
+
// (TODO - currently unused in WebGL, but WebGL 2 does support sampler objects) */
|
|
159
157
|
sampler: WEBGLSampler = undefined;
|
|
160
158
|
|
|
159
|
+
view: WEBGLTextureView = undefined;
|
|
160
|
+
|
|
161
161
|
// data;
|
|
162
162
|
|
|
163
163
|
glFormat: GL = undefined;
|
|
@@ -194,7 +194,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
194
194
|
|
|
195
195
|
this.device = device as WebGLDevice;
|
|
196
196
|
this.gl = this.device.gl;
|
|
197
|
-
this.gl2 = this.device.gl2;
|
|
198
197
|
this.handle = this.props.handle || this.gl.createTexture();
|
|
199
198
|
this.device.setSpectorMetadata(this.handle, {...this.props, data: typeof this.props.data}); // {name: this.props.id};
|
|
200
199
|
|
|
@@ -260,7 +259,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
260
259
|
|
|
261
260
|
const {parameters = {} as Record<GL, any>} = props;
|
|
262
261
|
|
|
263
|
-
const {pixels = null, pixelStore = {}, textureUnit = undefined} = props;
|
|
262
|
+
const {pixels = null, pixelStore = {}, textureUnit = undefined, mipmaps = true} = props;
|
|
264
263
|
|
|
265
264
|
// pixels variable is for API compatibility purpose
|
|
266
265
|
if (!data) {
|
|
@@ -270,10 +269,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
270
269
|
data = pixels;
|
|
271
270
|
}
|
|
272
271
|
|
|
273
|
-
let {width, height, dataFormat, type, compressed = false
|
|
272
|
+
let {width, height, dataFormat, type, compressed = false} = props;
|
|
274
273
|
const {depth = 0} = props;
|
|
275
274
|
|
|
276
|
-
const glFormat = convertTextureFormatToGL(props.format
|
|
275
|
+
const glFormat = convertTextureFormatToGL(props.format);
|
|
277
276
|
|
|
278
277
|
// Deduce width and height
|
|
279
278
|
({width, height, compressed, dataFormat, type} = this._deduceParameters({
|
|
@@ -300,11 +299,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
300
299
|
this.gl.bindTexture(this.target, this.handle);
|
|
301
300
|
}
|
|
302
301
|
|
|
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
302
|
this.mipmaps = mipmaps;
|
|
309
303
|
|
|
310
304
|
this.setImageData({
|
|
@@ -324,6 +318,9 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
324
318
|
this.setSampler(props.sampler);
|
|
325
319
|
this._setSamplerParameters(parameters);
|
|
326
320
|
|
|
321
|
+
// @ts-ignore
|
|
322
|
+
this.view = new WEBGLTextureView(this.device, {...this.props, texture: this});
|
|
323
|
+
|
|
327
324
|
if (mipmaps) {
|
|
328
325
|
this.generateMipmap();
|
|
329
326
|
}
|
|
@@ -372,7 +369,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
372
369
|
samplerProps = sampler as SamplerProps;
|
|
373
370
|
}
|
|
374
371
|
|
|
375
|
-
// TODO - technically, this is only needed in WebGL1. In WebGL2 we could always use the sampler.
|
|
376
372
|
const parameters = convertSamplerParametersToWebGL(samplerProps);
|
|
377
373
|
this._setSamplerParameters(parameters);
|
|
378
374
|
return this;
|
|
@@ -418,11 +414,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
418
414
|
|
|
419
415
|
// Call to regenerate mipmaps after modifying texture(s)
|
|
420
416
|
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
417
|
this.mipmaps = true;
|
|
427
418
|
|
|
428
419
|
this.gl.bindTexture(this.target, this.handle);
|
|
@@ -500,8 +491,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
500
491
|
let dataType = null;
|
|
501
492
|
({data, dataType} = this._getDataType({data, compressed}));
|
|
502
493
|
|
|
503
|
-
let gl2;
|
|
504
|
-
|
|
505
494
|
withGLParameters(this.gl, parameters, () => {
|
|
506
495
|
switch (dataType) {
|
|
507
496
|
case 'null':
|
|
@@ -518,8 +507,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
518
507
|
);
|
|
519
508
|
break;
|
|
520
509
|
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
510
|
gl.texImage2D(
|
|
524
511
|
target,
|
|
525
512
|
level,
|
|
@@ -530,15 +517,13 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
530
517
|
dataFormat,
|
|
531
518
|
type,
|
|
532
519
|
data,
|
|
533
|
-
// @ts-expect-error
|
|
534
520
|
offset
|
|
535
521
|
);
|
|
536
522
|
break;
|
|
537
523
|
case 'buffer':
|
|
538
524
|
// WebGL2 enables creating textures directly from a WebGL buffer
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
gl2.texImage2D(
|
|
525
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);
|
|
526
|
+
this.device.gl.texImage2D(
|
|
542
527
|
target,
|
|
543
528
|
level,
|
|
544
529
|
glFormat,
|
|
@@ -549,24 +534,20 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
549
534
|
type,
|
|
550
535
|
offset
|
|
551
536
|
);
|
|
552
|
-
|
|
537
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
|
|
553
538
|
break;
|
|
554
539
|
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
|
-
}
|
|
540
|
+
gl.texImage2D(
|
|
541
|
+
target,
|
|
542
|
+
level,
|
|
543
|
+
glFormat,
|
|
544
|
+
width,
|
|
545
|
+
height,
|
|
546
|
+
0 /* border*/,
|
|
547
|
+
dataFormat,
|
|
548
|
+
type,
|
|
549
|
+
data
|
|
550
|
+
);
|
|
570
551
|
break;
|
|
571
552
|
case 'compressed':
|
|
572
553
|
for (const [levelIndex, levelData] of data.entries()) {
|
|
@@ -590,7 +571,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
590
571
|
if (data && data.byteLength) {
|
|
591
572
|
this.trackAllocatedMemory(data.byteLength, 'Texture');
|
|
592
573
|
} else {
|
|
593
|
-
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format
|
|
574
|
+
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);
|
|
594
575
|
this.trackAllocatedMemory(this.width * this.height * bytesPerPixel, 'Texture');
|
|
595
576
|
}
|
|
596
577
|
|
|
@@ -659,22 +640,16 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
659
640
|
} else if (data === null) {
|
|
660
641
|
this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);
|
|
661
642
|
} else if (ArrayBuffer.isView(data)) {
|
|
662
|
-
// const gl2 = this.device.assertWebGL2();
|
|
663
|
-
// @ts-expect-error last offset parameter is ignored under WebGL1
|
|
664
643
|
this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);
|
|
665
644
|
} else if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {
|
|
666
645
|
// WebGL2 allows us to create texture directly from a WebGL buffer
|
|
667
|
-
const gl2 = this.device.assertWebGL2();
|
|
668
646
|
// 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);
|
|
647
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);
|
|
648
|
+
this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);
|
|
649
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
|
|
676
650
|
} else {
|
|
677
|
-
|
|
651
|
+
// Assume data is a browser supported object (ImageData, Canvas, ...)
|
|
652
|
+
this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);
|
|
678
653
|
}
|
|
679
654
|
});
|
|
680
655
|
|
|
@@ -754,7 +729,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
754
729
|
let {width, height, dataFormat, type, compressed} = opts;
|
|
755
730
|
|
|
756
731
|
// Deduce format and type from format
|
|
757
|
-
const parameters = getWebGLTextureParameters(format
|
|
732
|
+
const parameters = getWebGLTextureParameters(format);
|
|
758
733
|
dataFormat = dataFormat || parameters.dataFormat;
|
|
759
734
|
type = type || parameters.type;
|
|
760
735
|
compressed = compressed || parameters.compressed;
|
|
@@ -910,11 +885,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
910
885
|
|
|
911
886
|
this.gl.bindTexture(this.target, this.handle);
|
|
912
887
|
|
|
913
|
-
const webglTextureFormat = getWebGLTextureParameters(format
|
|
888
|
+
const webglTextureFormat = getWebGLTextureParameters(format);
|
|
914
889
|
|
|
915
890
|
withGLParameters(this.gl, parameters, () => {
|
|
916
891
|
if (ArrayBuffer.isView(data)) {
|
|
917
|
-
// @ts-expect-error
|
|
918
892
|
this.gl.texImage3D(
|
|
919
893
|
this.target,
|
|
920
894
|
level,
|
|
@@ -931,7 +905,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
931
905
|
|
|
932
906
|
if (data instanceof WEBGLBuffer) {
|
|
933
907
|
this.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle);
|
|
934
|
-
// @ts-expect-error
|
|
935
908
|
this.gl.texImage3D(
|
|
936
909
|
this.target,
|
|
937
910
|
level,
|
|
@@ -950,7 +923,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
950
923
|
if (data && data.byteLength) {
|
|
951
924
|
this.trackAllocatedMemory(data.byteLength, 'Texture');
|
|
952
925
|
} else {
|
|
953
|
-
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format
|
|
926
|
+
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);
|
|
954
927
|
this.trackAllocatedMemory(this.width * this.height * this.depth * bytesPerPixel, 'Texture');
|
|
955
928
|
}
|
|
956
929
|
|
|
@@ -963,14 +936,8 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
963
936
|
|
|
964
937
|
/**
|
|
965
938
|
* Sets sampler parameters on texture
|
|
966
|
-
* @note: Applies NPOT workaround if appropriate
|
|
967
939
|
*/
|
|
968
940
|
_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
941
|
// NPOT parameters may populate an empty object
|
|
975
942
|
if (isObjectEmpty(parameters)) {
|
|
976
943
|
return;
|
|
@@ -999,32 +966,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
999
966
|
this.gl.bindTexture(this.target, null);
|
|
1000
967
|
return;
|
|
1001
968
|
}
|
|
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
969
|
}
|
|
1029
970
|
|
|
1030
971
|
// HELPERS
|
|
@@ -1049,14 +990,6 @@ function getWebGLTextureTarget(props: TextureProps) {
|
|
|
1049
990
|
}
|
|
1050
991
|
}
|
|
1051
992
|
|
|
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
993
|
function logParameters(parameters: Record<number, GL | number>) {
|
|
1061
994
|
log.log(1, 'texture sampler parameters', parameters)();
|
|
1062
995
|
}
|
|
@@ -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
|
}
|