@luma.gl/webgl 9.0.0-beta.4 → 9.0.0-beta.5
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.js +240 -158
- 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 -68
- package/dist/adapter/converters/shader-formats.js +33 -46
- package/dist/adapter/converters/texture-formats.d.ts +9 -18
- package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
- package/dist/adapter/converters/texture-formats.js +454 -871
- package/dist/adapter/converters/vertex-formats.js +52 -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 +6 -0
- package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-features.js +52 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts +4 -0
- package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-info.js +87 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts +50 -0
- package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
- package/dist/adapter/device-helpers/webgl-device-limits.js +92 -0
- package/dist/adapter/helpers/decode-webgl-types.js +87 -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 -226
- package/dist/adapter/helpers/parse-shader-compiler-log.js +46 -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 +67 -82
- package/dist/adapter/helpers/webgl-topology-utils.js +77 -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 +18 -12
- package/dist/adapter/objects/webgl-renderbuffer.js +76 -80
- package/dist/adapter/objects/webgl-resource.d.ts +1 -1
- package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
- package/dist/adapter/objects/webgl-resource.js +204 -154
- package/dist/adapter/resources/webgl-buffer.d.ts +2 -3
- package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-buffer.js +160 -119
- package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-command-buffer.js +268 -171
- package/dist/adapter/resources/webgl-command-encoder.js +32 -40
- package/dist/adapter/resources/webgl-external-texture.js +92 -1
- package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -2
- package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-framebuffer.js +167 -139
- package/dist/adapter/resources/webgl-render-pass.js +121 -95
- package/dist/adapter/resources/webgl-render-pipeline.d.ts +11 -1
- package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-render-pipeline.js +378 -228
- package/dist/adapter/resources/webgl-sampler.d.ts +0 -2
- package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-sampler.js +43 -34
- package/dist/adapter/resources/webgl-shader.d.ts +10 -1
- package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-shader.js +106 -45
- package/dist/adapter/resources/webgl-texture.d.ts +2 -6
- package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-texture.js +614 -699
- package/dist/adapter/resources/webgl-transform-feedback.d.ts +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-transform-feedback.js +143 -145
- package/dist/adapter/resources/webgl-vertex-array.d.ts +1 -1
- package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
- package/dist/adapter/resources/webgl-vertex-array.js +229 -158
- package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
- package/dist/adapter/webgl-canvas-context.js +58 -37
- package/dist/adapter/webgl-device.d.ts +7 -15
- package/dist/adapter/webgl-device.d.ts.map +1 -1
- package/dist/adapter/webgl-device.js +440 -381
- package/dist/classic/accessor.js +132 -102
- package/dist/classic/clear.d.ts +2 -2
- package/dist/classic/clear.d.ts.map +1 -1
- package/dist/classic/clear.js +73 -73
- package/dist/classic/copy-and-blit.d.ts.map +1 -1
- package/dist/classic/copy-and-blit.js +176 -177
- package/dist/classic/format-utils.d.ts +2 -2
- package/dist/classic/format-utils.js +38 -32
- package/dist/classic/typed-array-utils.js +95 -81
- package/dist/context/{polyfill → context}/context-data.d.ts +2 -1
- 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.js +54 -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 +102 -76
- 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 +95 -46
- package/dist/context/parameters/webgl-parameter-tables.d.ts +110 -99
- package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
- package/dist/context/parameters/webgl-parameter-tables.js +456 -404
- package/dist/context/state-tracker/deep-array-equal.js +18 -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 +190 -126
- package/dist/context/state-tracker/with-parameters.d.ts +1 -1
- package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
- package/dist/context/state-tracker/with-parameters.js +45 -29
- package/dist/dist.dev.js +2568 -3786
- package/dist/index.cjs +1346 -2464
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -26
- package/dist/types.js +2 -1
- package/dist.min.js +9 -42
- package/package.json +11 -15
- package/src/adapter/converters/device-parameters.ts +0 -1
- package/src/adapter/converters/sampler-parameters.ts +0 -17
- package/src/adapter/converters/texture-formats.ts +86 -154
- package/src/adapter/device-helpers/webgl-device-features.ts +69 -0
- package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +3 -4
- package/src/adapter/device-helpers/{device-limits.ts → webgl-device-limits.ts} +25 -23
- package/src/adapter/helpers/get-shader-layout.ts +17 -28
- package/src/adapter/helpers/set-uniform.ts +1 -3
- package/src/adapter/objects/constants-to-keys.ts +1 -1
- package/src/adapter/objects/webgl-renderbuffer.ts +4 -4
- package/src/adapter/objects/webgl-resource.ts +3 -18
- package/src/adapter/resources/webgl-buffer.ts +6 -11
- package/src/adapter/resources/webgl-command-buffer.ts +20 -30
- package/src/adapter/resources/webgl-external-texture.ts +2 -3
- package/src/adapter/resources/webgl-framebuffer.ts +4 -5
- package/src/adapter/resources/webgl-render-pass.ts +7 -7
- package/src/adapter/resources/webgl-render-pipeline.ts +106 -31
- package/src/adapter/resources/webgl-sampler.ts +5 -9
- package/src/adapter/resources/webgl-shader.ts +57 -10
- package/src/adapter/resources/webgl-texture.ts +29 -103
- package/src/adapter/resources/webgl-transform-feedback.ts +14 -15
- package/src/adapter/resources/webgl-vertex-array.ts +16 -18
- package/src/adapter/webgl-canvas-context.ts +1 -7
- package/src/adapter/webgl-device.ts +18 -67
- package/src/classic/clear.ts +13 -14
- package/src/classic/copy-and-blit.ts +1 -2
- package/src/context/context/context-data.ts +44 -0
- package/src/context/context/create-browser-context.ts +7 -32
- package/src/context/debug/webgl-developer-tools.ts +6 -8
- package/src/context/parameters/unified-parameter-api.ts +3 -3
- package/src/context/parameters/webgl-parameter-tables.ts +66 -75
- package/src/context/state-tracker/track-context-state.ts +18 -17
- package/src/context/state-tracker/with-parameters.ts +1 -1
- package/src/index.ts +2 -17
- 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/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/context-data.ts +0 -30
- 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
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
SamplerParameters,
|
|
15
15
|
TypedArray
|
|
16
16
|
} from '@luma.gl/core';
|
|
17
|
-
import {Texture, log, assert,
|
|
17
|
+
import {Texture, log, assert, loadImage, isObjectEmpty} from '@luma.gl/core';
|
|
18
18
|
import {GL, GLSamplerParameters} from '@luma.gl/constants';
|
|
19
19
|
import {withGLParameters} from '../../context/state-tracker/with-parameters';
|
|
20
20
|
import {
|
|
@@ -22,10 +22,7 @@ import {
|
|
|
22
22
|
getWebGLTextureParameters,
|
|
23
23
|
getTextureFormatBytesPerPixel
|
|
24
24
|
} from '../converters/texture-formats';
|
|
25
|
-
import {
|
|
26
|
-
convertSamplerParametersToWebGL,
|
|
27
|
-
updateSamplerParametersForNPOT
|
|
28
|
-
} from '../converters/sampler-parameters';
|
|
25
|
+
import {convertSamplerParametersToWebGL} from '../converters/sampler-parameters';
|
|
29
26
|
import {WebGLDevice} from '../webgl-device';
|
|
30
27
|
import {WEBGLBuffer} from './webgl-buffer';
|
|
31
28
|
import {WEBGLSampler} from './webgl-sampler';
|
|
@@ -151,8 +148,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
151
148
|
|
|
152
149
|
readonly MAX_ATTRIBUTES: number;
|
|
153
150
|
readonly device: WebGLDevice;
|
|
154
|
-
readonly gl:
|
|
155
|
-
readonly gl2: WebGL2RenderingContext | null;
|
|
151
|
+
readonly gl: WebGL2RenderingContext;
|
|
156
152
|
readonly handle: WebGLTexture;
|
|
157
153
|
|
|
158
154
|
/** Sampler object (currently unused) */
|
|
@@ -194,7 +190,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
194
190
|
|
|
195
191
|
this.device = device as WebGLDevice;
|
|
196
192
|
this.gl = this.device.gl;
|
|
197
|
-
this.gl2 = this.device.gl2;
|
|
198
193
|
this.handle = this.props.handle || this.gl.createTexture();
|
|
199
194
|
this.device.setSpectorMetadata(this.handle, {...this.props, data: typeof this.props.data}); // {name: this.props.id};
|
|
200
195
|
|
|
@@ -260,7 +255,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
260
255
|
|
|
261
256
|
const {parameters = {} as Record<GL, any>} = props;
|
|
262
257
|
|
|
263
|
-
const {pixels = null, pixelStore = {}, textureUnit = undefined} = props;
|
|
258
|
+
const {pixels = null, pixelStore = {}, textureUnit = undefined, mipmaps = true} = props;
|
|
264
259
|
|
|
265
260
|
// pixels variable is for API compatibility purpose
|
|
266
261
|
if (!data) {
|
|
@@ -270,10 +265,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
270
265
|
data = pixels;
|
|
271
266
|
}
|
|
272
267
|
|
|
273
|
-
let {width, height, dataFormat, type, compressed = false
|
|
268
|
+
let {width, height, dataFormat, type, compressed = false} = props;
|
|
274
269
|
const {depth = 0} = props;
|
|
275
270
|
|
|
276
|
-
const glFormat = convertTextureFormatToGL(props.format
|
|
271
|
+
const glFormat = convertTextureFormatToGL(props.format);
|
|
277
272
|
|
|
278
273
|
// Deduce width and height
|
|
279
274
|
({width, height, compressed, dataFormat, type} = this._deduceParameters({
|
|
@@ -300,11 +295,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
300
295
|
this.gl.bindTexture(this.target, this.handle);
|
|
301
296
|
}
|
|
302
297
|
|
|
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
298
|
this.mipmaps = mipmaps;
|
|
309
299
|
|
|
310
300
|
this.setImageData({
|
|
@@ -372,7 +362,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
372
362
|
samplerProps = sampler as SamplerProps;
|
|
373
363
|
}
|
|
374
364
|
|
|
375
|
-
// TODO - technically, this is only needed in WebGL1. In WebGL2 we could always use the sampler.
|
|
376
365
|
const parameters = convertSamplerParametersToWebGL(samplerProps);
|
|
377
366
|
this._setSamplerParameters(parameters);
|
|
378
367
|
return this;
|
|
@@ -418,11 +407,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
418
407
|
|
|
419
408
|
// Call to regenerate mipmaps after modifying texture(s)
|
|
420
409
|
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
410
|
this.mipmaps = true;
|
|
427
411
|
|
|
428
412
|
this.gl.bindTexture(this.target, this.handle);
|
|
@@ -500,8 +484,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
500
484
|
let dataType = null;
|
|
501
485
|
({data, dataType} = this._getDataType({data, compressed}));
|
|
502
486
|
|
|
503
|
-
let gl2;
|
|
504
|
-
|
|
505
487
|
withGLParameters(this.gl, parameters, () => {
|
|
506
488
|
switch (dataType) {
|
|
507
489
|
case 'null':
|
|
@@ -518,8 +500,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
518
500
|
);
|
|
519
501
|
break;
|
|
520
502
|
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
503
|
gl.texImage2D(
|
|
524
504
|
target,
|
|
525
505
|
level,
|
|
@@ -530,15 +510,13 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
530
510
|
dataFormat,
|
|
531
511
|
type,
|
|
532
512
|
data,
|
|
533
|
-
// @ts-expect-error
|
|
534
513
|
offset
|
|
535
514
|
);
|
|
536
515
|
break;
|
|
537
516
|
case 'buffer':
|
|
538
517
|
// WebGL2 enables creating textures directly from a WebGL buffer
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
gl2.texImage2D(
|
|
518
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle || data);
|
|
519
|
+
this.device.gl.texImage2D(
|
|
542
520
|
target,
|
|
543
521
|
level,
|
|
544
522
|
glFormat,
|
|
@@ -549,24 +527,20 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
549
527
|
type,
|
|
550
528
|
offset
|
|
551
529
|
);
|
|
552
|
-
|
|
530
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
|
|
553
531
|
break;
|
|
554
532
|
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
|
-
}
|
|
533
|
+
gl.texImage2D(
|
|
534
|
+
target,
|
|
535
|
+
level,
|
|
536
|
+
glFormat,
|
|
537
|
+
width,
|
|
538
|
+
height,
|
|
539
|
+
0 /* border*/,
|
|
540
|
+
dataFormat,
|
|
541
|
+
type,
|
|
542
|
+
data
|
|
543
|
+
);
|
|
570
544
|
break;
|
|
571
545
|
case 'compressed':
|
|
572
546
|
for (const [levelIndex, levelData] of data.entries()) {
|
|
@@ -590,7 +564,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
590
564
|
if (data && data.byteLength) {
|
|
591
565
|
this.trackAllocatedMemory(data.byteLength, 'Texture');
|
|
592
566
|
} else {
|
|
593
|
-
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format
|
|
567
|
+
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);
|
|
594
568
|
this.trackAllocatedMemory(this.width * this.height * bytesPerPixel, 'Texture');
|
|
595
569
|
}
|
|
596
570
|
|
|
@@ -659,22 +633,16 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
659
633
|
} else if (data === null) {
|
|
660
634
|
this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, null);
|
|
661
635
|
} else if (ArrayBuffer.isView(data)) {
|
|
662
|
-
// const gl2 = this.device.assertWebGL2();
|
|
663
|
-
// @ts-expect-error last offset parameter is ignored under WebGL1
|
|
664
636
|
this.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data, offset);
|
|
665
637
|
} else if (typeof WebGLBuffer !== 'undefined' && data instanceof WebGLBuffer) {
|
|
666
638
|
// WebGL2 allows us to create texture directly from a WebGL buffer
|
|
667
|
-
const gl2 = this.device.assertWebGL2();
|
|
668
639
|
// 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);
|
|
640
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data);
|
|
641
|
+
this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, offset);
|
|
642
|
+
this.device.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, null);
|
|
676
643
|
} else {
|
|
677
|
-
|
|
644
|
+
// Assume data is a browser supported object (ImageData, Canvas, ...)
|
|
645
|
+
this.device.gl.texSubImage2D(target, level, x, y, width, height, dataFormat, type, data);
|
|
678
646
|
}
|
|
679
647
|
});
|
|
680
648
|
|
|
@@ -754,7 +722,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
754
722
|
let {width, height, dataFormat, type, compressed} = opts;
|
|
755
723
|
|
|
756
724
|
// Deduce format and type from format
|
|
757
|
-
const parameters = getWebGLTextureParameters(format
|
|
725
|
+
const parameters = getWebGLTextureParameters(format);
|
|
758
726
|
dataFormat = dataFormat || parameters.dataFormat;
|
|
759
727
|
type = type || parameters.type;
|
|
760
728
|
compressed = compressed || parameters.compressed;
|
|
@@ -910,11 +878,10 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
910
878
|
|
|
911
879
|
this.gl.bindTexture(this.target, this.handle);
|
|
912
880
|
|
|
913
|
-
const webglTextureFormat = getWebGLTextureParameters(format
|
|
881
|
+
const webglTextureFormat = getWebGLTextureParameters(format);
|
|
914
882
|
|
|
915
883
|
withGLParameters(this.gl, parameters, () => {
|
|
916
884
|
if (ArrayBuffer.isView(data)) {
|
|
917
|
-
// @ts-expect-error
|
|
918
885
|
this.gl.texImage3D(
|
|
919
886
|
this.target,
|
|
920
887
|
level,
|
|
@@ -931,7 +898,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
931
898
|
|
|
932
899
|
if (data instanceof WEBGLBuffer) {
|
|
933
900
|
this.gl.bindBuffer(GL.PIXEL_UNPACK_BUFFER, data.handle);
|
|
934
|
-
// @ts-expect-error
|
|
935
901
|
this.gl.texImage3D(
|
|
936
902
|
this.target,
|
|
937
903
|
level,
|
|
@@ -950,7 +916,7 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
950
916
|
if (data && data.byteLength) {
|
|
951
917
|
this.trackAllocatedMemory(data.byteLength, 'Texture');
|
|
952
918
|
} else {
|
|
953
|
-
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format
|
|
919
|
+
const bytesPerPixel = getTextureFormatBytesPerPixel(this.props.format);
|
|
954
920
|
this.trackAllocatedMemory(this.width * this.height * this.depth * bytesPerPixel, 'Texture');
|
|
955
921
|
}
|
|
956
922
|
|
|
@@ -963,14 +929,8 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
963
929
|
|
|
964
930
|
/**
|
|
965
931
|
* Sets sampler parameters on texture
|
|
966
|
-
* @note: Applies NPOT workaround if appropriate
|
|
967
932
|
*/
|
|
968
933
|
_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
934
|
// NPOT parameters may populate an empty object
|
|
975
935
|
if (isObjectEmpty(parameters)) {
|
|
976
936
|
return;
|
|
@@ -999,32 +959,6 @@ export class WEBGLTexture extends Texture<WEBGLTextureProps> {
|
|
|
999
959
|
this.gl.bindTexture(this.target, null);
|
|
1000
960
|
return;
|
|
1001
961
|
}
|
|
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
962
|
}
|
|
1029
963
|
|
|
1030
964
|
// HELPERS
|
|
@@ -1049,14 +983,6 @@ function getWebGLTextureTarget(props: TextureProps) {
|
|
|
1049
983
|
}
|
|
1050
984
|
}
|
|
1051
985
|
|
|
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
986
|
function logParameters(parameters: Record<number, GL | number>) {
|
|
1061
987
|
log.log(1, 'texture sampler parameters', parameters)();
|
|
1062
988
|
}
|
|
@@ -7,7 +7,7 @@ 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,7 +170,7 @@ 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
|
|
|
@@ -183,9 +182,9 @@ export class WEBGLTransformFeedback extends TransformFeedback {
|
|
|
183
182
|
): void {
|
|
184
183
|
const handle = buffer && (buffer as WEBGLBuffer).handle;
|
|
185
184
|
if (!handle || byteLength === undefined) {
|
|
186
|
-
this.
|
|
185
|
+
this.gl.bindBufferBase(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle);
|
|
187
186
|
} else {
|
|
188
|
-
this.
|
|
187
|
+
this.gl.bindBufferRange(GL.TRANSFORM_FEEDBACK_BUFFER, index, handle, byteOffset, byteLength);
|
|
189
188
|
}
|
|
190
189
|
}
|
|
191
190
|
}
|
|
@@ -28,14 +28,14 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
28
28
|
|
|
29
29
|
/** * Attribute 0 can not be disable on most desktop OpenGL based browsers */
|
|
30
30
|
static isConstantAttributeZeroSupported(device: Device): boolean {
|
|
31
|
-
return
|
|
31
|
+
return getBrowser() === 'Chrome';
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
// Create a VertexArray
|
|
35
35
|
constructor(device: WebGLDevice, props?: VertexArrayProps) {
|
|
36
36
|
super(device, props);
|
|
37
37
|
this.device = device;
|
|
38
|
-
this.handle = this.device.
|
|
38
|
+
this.handle = this.device.gl.createVertexArray();
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
override destroy(): void {
|
|
@@ -44,7 +44,7 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
44
44
|
this.buffer?.destroy();
|
|
45
45
|
}
|
|
46
46
|
if (this.handle) {
|
|
47
|
-
this.device.
|
|
47
|
+
this.device.gl.deleteVertexArray(this.handle);
|
|
48
48
|
// @ts-expect-error read-only/undefined
|
|
49
49
|
this.handle = undefined!;
|
|
50
50
|
}
|
|
@@ -66,9 +66,9 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
66
66
|
throw new Error('Use .setBuffer()');
|
|
67
67
|
}
|
|
68
68
|
// In WebGL The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject
|
|
69
|
-
this.device.
|
|
69
|
+
this.device.gl.bindVertexArray(this.handle);
|
|
70
70
|
// TODO - this initial binding does not seem to take effect? see bindBeforeRender()
|
|
71
|
-
this.device.
|
|
71
|
+
this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, buffer ? buffer.handle : null);
|
|
72
72
|
// log.log(1, 'VertexArray.setIndexBuffer', indexBuffer)();
|
|
73
73
|
// log.log(1, `Binding vertex array ${this.id}`, buffer?.id)();
|
|
74
74
|
|
|
@@ -85,14 +85,13 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
85
85
|
|
|
86
86
|
const {size, type, stride, offset, normalized, integer, divisor} = this._getAccessor(location);
|
|
87
87
|
|
|
88
|
-
this.device.
|
|
88
|
+
this.device.gl.bindVertexArray(this.handle);
|
|
89
89
|
// A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target
|
|
90
90
|
this.device.gl.bindBuffer(GL.ARRAY_BUFFER, buffer.handle);
|
|
91
91
|
|
|
92
92
|
// WebGL2 supports *integer* data formats, i.e. GPU will see integer values
|
|
93
93
|
if (integer) {
|
|
94
|
-
this.device.
|
|
95
|
-
this.device.gl2.vertexAttribIPointer(location, size, type, stride, offset);
|
|
94
|
+
this.device.gl.vertexAttribIPointer(location, size, type, stride, offset);
|
|
96
95
|
} else {
|
|
97
96
|
// Attaches ARRAY_BUFFER with specified buffer format to location
|
|
98
97
|
this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
|
|
@@ -101,7 +100,7 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
101
100
|
// Mark as non-constant
|
|
102
101
|
this.device.gl.enableVertexAttribArray(location);
|
|
103
102
|
// Set the step mode 0=vertex, 1=instance
|
|
104
|
-
this.device.
|
|
103
|
+
this.device.gl.vertexAttribDivisor(location, divisor || 0);
|
|
105
104
|
|
|
106
105
|
this.attributes[location] = buffer;
|
|
107
106
|
}
|
|
@@ -115,12 +114,12 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
115
114
|
init = false;
|
|
116
115
|
|
|
117
116
|
override bindBeforeRender(): void {
|
|
118
|
-
this.device.
|
|
117
|
+
this.device.gl.bindVertexArray(this.handle);
|
|
119
118
|
// TODO - the initial bind does not seem to take effect.
|
|
120
119
|
if (!this.init) {
|
|
121
120
|
// log.log(1, `Binding vertex array ${this.id}`, this.indexBuffer?.id)();
|
|
122
121
|
const webglBuffer = this.indexBuffer as WEBGLBuffer;
|
|
123
|
-
this.device.
|
|
122
|
+
this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, webglBuffer?.handle || null);
|
|
124
123
|
this.init = true;
|
|
125
124
|
}
|
|
126
125
|
this._applyConstantAttributes();
|
|
@@ -130,8 +129,8 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
130
129
|
// log.log(1, `Unbinding vertex array ${this.id}`)();
|
|
131
130
|
// TODO technically this is not necessary, but we might be interfacing
|
|
132
131
|
// with code that does not use vertex array objects
|
|
133
|
-
this.device.
|
|
134
|
-
// this.device.
|
|
132
|
+
this.device.gl.bindVertexArray(null);
|
|
133
|
+
// this.device.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, null);
|
|
135
134
|
}
|
|
136
135
|
|
|
137
136
|
// Internal methods
|
|
@@ -161,13 +160,12 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
161
160
|
|
|
162
161
|
// // WebGL2 supports *integer* data formats, i.e. GPU will see integer values
|
|
163
162
|
// if (integer) {
|
|
164
|
-
// this.device.
|
|
165
|
-
// this.device.gl2.vertexAttribIPointer(location, size, type, stride, offset);
|
|
163
|
+
// this.device.gl.vertexAttribIPointer(location, size, type, stride, offset);
|
|
166
164
|
// } else {
|
|
167
165
|
// // Attaches ARRAY_BUFFER with specified buffer format to location
|
|
168
166
|
// this.device.gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
|
|
169
167
|
// }
|
|
170
|
-
// this.device.
|
|
168
|
+
// this.device.gl.vertexAttribDivisor(location, divisor || 0);
|
|
171
169
|
// }
|
|
172
170
|
|
|
173
171
|
/** Get an accessor from the */
|
|
@@ -206,13 +204,13 @@ export class WEBGLVertexArray extends VertexArray {
|
|
|
206
204
|
|
|
207
205
|
if (enable || canDisableAttribute) {
|
|
208
206
|
location = Number(location);
|
|
209
|
-
this.device.
|
|
207
|
+
this.device.gl.bindVertexArray(this.handle);
|
|
210
208
|
if (enable) {
|
|
211
209
|
this.device.gl.enableVertexAttribArray(location);
|
|
212
210
|
} else {
|
|
213
211
|
this.device.gl.disableVertexAttribArray(location);
|
|
214
212
|
}
|
|
215
|
-
this.device.
|
|
213
|
+
this.device.gl.bindVertexArray(null);
|
|
216
214
|
}
|
|
217
215
|
}
|
|
218
216
|
|
|
@@ -61,18 +61,12 @@ export class WebGLCanvasContext extends CanvasContext {
|
|
|
61
61
|
this.setDevicePixelRatio(devicePixelRatio, options);
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
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
64
|
}
|
|
71
65
|
|
|
72
66
|
commit() {
|
|
73
67
|
// gl.commit was ultimately removed from the WebGL standard??
|
|
74
68
|
// if (this.offScreen && this.gl.commit) {
|
|
75
|
-
// // @ts-expect-error gl.commit is not officially part of
|
|
69
|
+
// // @ts-expect-error gl.commit is not officially part of WebGL2RenderingContext
|
|
76
70
|
// this.gl.commit();
|
|
77
71
|
// }
|
|
78
72
|
}
|