@flighthq/render-gl 0.2.1-next.841.373388f → 0.3.0-next.1032.e2b99fc
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/contract.d.ts +25 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +25 -0
- package/dist/contract.js.map +1 -0
- package/dist/enableGlRenderTextureGuards.d.ts +4 -0
- package/dist/enableGlRenderTextureGuards.d.ts.map +1 -0
- package/dist/enableGlRenderTextureGuards.js +34 -0
- package/dist/enableGlRenderTextureGuards.js.map +1 -0
- package/dist/glBackground.d.ts +1 -1
- package/dist/glBackground.d.ts.map +1 -1
- package/dist/glBackground.js +2 -2
- package/dist/glBackground.js.map +1 -1
- package/dist/glCompressedTexture.d.ts +1 -1
- package/dist/glCompressedTexture.d.ts.map +1 -1
- package/dist/glCompressedTexture.js +8 -13
- package/dist/glCompressedTexture.js.map +1 -1
- package/dist/glDraw.d.ts +6 -3
- package/dist/glDraw.d.ts.map +1 -1
- package/dist/glDraw.js +94 -107
- package/dist/glDraw.js.map +1 -1
- package/dist/glExternalTexture.d.ts +4 -0
- package/dist/glExternalTexture.d.ts.map +1 -0
- package/dist/glExternalTexture.js +41 -0
- package/dist/glExternalTexture.js.map +1 -0
- package/dist/glFullscreenPass.d.ts +1 -1
- package/dist/glFullscreenPass.d.ts.map +1 -1
- package/dist/glFullscreenPass.js +2 -2
- package/dist/glFullscreenPass.js.map +1 -1
- package/dist/glLinearToSrgbPass.d.ts +1 -1
- package/dist/glLinearToSrgbPass.d.ts.map +1 -1
- package/dist/glMaterialRegistry.d.ts +1 -1
- package/dist/glMaterialRegistry.d.ts.map +1 -1
- package/dist/glMaterialRegistry.js +3 -3
- package/dist/glMaterialRegistry.js.map +1 -1
- package/dist/glPresentRenderTarget.d.ts +1 -1
- package/dist/glPresentRenderTarget.d.ts.map +1 -1
- package/dist/glReadback.d.ts +1 -1
- package/dist/glReadback.d.ts.map +1 -1
- package/dist/glRenderPass.d.ts +2 -2
- package/dist/glRenderPass.d.ts.map +1 -1
- package/dist/glRenderPass.js +136 -22
- package/dist/glRenderPass.js.map +1 -1
- package/dist/glRenderState.d.ts +1 -1
- package/dist/glRenderState.d.ts.map +1 -1
- package/dist/glRenderState.js +30 -27
- package/dist/glRenderState.js.map +1 -1
- package/dist/glRenderStateBracket.d.ts +5 -0
- package/dist/glRenderStateBracket.d.ts.map +1 -0
- package/dist/glRenderStateBracket.js +111 -0
- package/dist/glRenderStateBracket.js.map +1 -0
- package/dist/glRenderTarget.d.ts +1 -1
- package/dist/glRenderTarget.d.ts.map +1 -1
- package/dist/glRenderTarget.js +26 -10
- package/dist/glRenderTarget.js.map +1 -1
- package/dist/glRenderTargetPool.d.ts +1 -1
- package/dist/glRenderTargetPool.d.ts.map +1 -1
- package/dist/glRenderTargetPool.js.map +1 -1
- package/dist/glRenderTexture.d.ts +13 -0
- package/dist/glRenderTexture.d.ts.map +1 -0
- package/dist/glRenderTexture.js +109 -0
- package/dist/glRenderTexture.js.map +1 -0
- package/dist/glShader.d.ts +2 -2
- package/dist/glShader.d.ts.map +1 -1
- package/dist/glShaderBinding.d.ts +2 -2
- package/dist/glShaderBinding.d.ts.map +1 -1
- package/dist/glShaderBinding.js +2 -2
- package/dist/glShaderBinding.js.map +1 -1
- package/dist/glShaderRegistry.d.ts +2 -2
- package/dist/glShaderRegistry.d.ts.map +1 -1
- package/dist/glSkinPaletteTexture.d.ts +1 -1
- package/dist/glSkinPaletteTexture.d.ts.map +1 -1
- package/dist/glTestHelper.d.ts +2 -2
- package/dist/glTestHelper.d.ts.map +1 -1
- package/dist/glTestHelper.js +16 -13
- package/dist/glTestHelper.js.map +1 -1
- package/dist/glTextureResolver.d.ts +9 -0
- package/dist/glTextureResolver.d.ts.map +1 -0
- package/dist/glTextureResolver.js +68 -0
- package/dist/glTextureResolver.js.map +1 -0
- package/dist/glTextureUpload.d.ts +1 -1
- package/dist/glTextureUpload.d.ts.map +1 -1
- package/dist/glTextureUpload.js +3 -9
- package/dist/glTextureUpload.js.map +1 -1
- package/dist/glTextureVideoUpload.d.ts +2 -2
- package/dist/glTextureVideoUpload.d.ts.map +1 -1
- package/dist/glTextureVideoUpload.js +10 -10
- package/dist/glTextureVideoUpload.js.map +1 -1
- package/dist/index.d.ts +1 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -19
- package/dist/index.js.map +1 -1
- package/package.json +11 -5
- package/src/enableGlRenderTextureGuards.test.ts +22 -0
- package/src/glBackground.test.ts +10 -1
- package/src/glCompressedTexture.test.ts +7 -17
- package/src/glDraw.test.ts +130 -79
- package/src/glExternalTexture.test.ts +30 -0
- package/src/glFullscreenPass.test.ts +4 -4
- package/src/glLinearToSrgbPass.test.ts +1 -1
- package/src/glMaterialRegistry.test.ts +4 -4
- package/src/glPresentRenderTarget.test.ts +1 -1
- package/src/glReadback.test.ts +1 -1
- package/src/glRenderPass.test.ts +145 -6
- package/src/glRenderState.test.ts +2 -2
- package/src/glRenderStateBracket.test.ts +319 -0
- package/src/glRenderTarget.test.ts +61 -3
- package/src/glRenderTexture.test.ts +252 -0
- package/src/glShader.test.ts +25 -25
- package/src/glShaderBinding.test.ts +2 -2
- package/src/glSkinPaletteTexture.test.ts +1 -1
- package/src/glTextureResolver.test.ts +182 -0
- package/src/glTextureUpload.test.ts +2 -10
- package/src/glTextureVideoUpload.test.ts +15 -15
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export * from './glBackground';
|
|
2
|
+
export * from './glCompressedTexture';
|
|
3
|
+
export * from './glDraw';
|
|
4
|
+
export * from './glExternalTexture';
|
|
5
|
+
export * from './glElement';
|
|
6
|
+
export * from './enableGlRenderTextureGuards';
|
|
7
|
+
export * from './glFullscreenPass';
|
|
8
|
+
export * from './glLinearToSrgbPass';
|
|
9
|
+
export * from './glMaterialRegistry';
|
|
10
|
+
export * from './glPresentRenderTarget';
|
|
11
|
+
export * from './glProgram';
|
|
12
|
+
export * from './glReadback';
|
|
13
|
+
export * from './glRenderPass';
|
|
14
|
+
export * from './glRenderState';
|
|
15
|
+
export * from './glRenderStateBracket';
|
|
16
|
+
export * from './glRenderTarget';
|
|
17
|
+
export * from './glRenderTexture';
|
|
18
|
+
export * from './glRenderTargetPool';
|
|
19
|
+
export * from './glShader';
|
|
20
|
+
export * from './glShaderBinding';
|
|
21
|
+
export * from './glSkinPaletteTexture';
|
|
22
|
+
export * from './glTextureUpload';
|
|
23
|
+
export * from './glTextureResolver';
|
|
24
|
+
export * from './glTextureVideoUpload';
|
|
25
|
+
//# sourceMappingURL=contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
|
package/dist/contract.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export * from './glBackground';
|
|
2
|
+
export * from './glCompressedTexture';
|
|
3
|
+
export * from './glDraw';
|
|
4
|
+
export * from './glExternalTexture';
|
|
5
|
+
export * from './glElement';
|
|
6
|
+
export * from './enableGlRenderTextureGuards';
|
|
7
|
+
export * from './glFullscreenPass';
|
|
8
|
+
export * from './glLinearToSrgbPass';
|
|
9
|
+
export * from './glMaterialRegistry';
|
|
10
|
+
export * from './glPresentRenderTarget';
|
|
11
|
+
export * from './glProgram';
|
|
12
|
+
export * from './glReadback';
|
|
13
|
+
export * from './glRenderPass';
|
|
14
|
+
export * from './glRenderState';
|
|
15
|
+
export * from './glRenderStateBracket';
|
|
16
|
+
export * from './glRenderTarget';
|
|
17
|
+
export * from './glRenderTexture';
|
|
18
|
+
export * from './glRenderTargetPool';
|
|
19
|
+
export * from './glShader';
|
|
20
|
+
export * from './glShaderBinding';
|
|
21
|
+
export * from './glSkinPaletteTexture';
|
|
22
|
+
export * from './glTextureUpload';
|
|
23
|
+
export * from './glTextureResolver';
|
|
24
|
+
export * from './glTextureVideoUpload';
|
|
25
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GlRenderState } from '@flighthq/types/contract';
|
|
2
|
+
export declare function areGlRenderTextureGuardsEnabled(state: GlRenderState): boolean;
|
|
3
|
+
export declare function enableGlRenderTextureGuards(state: GlRenderState): void;
|
|
4
|
+
//# sourceMappingURL=enableGlRenderTextureGuards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableGlRenderTextureGuards.d.ts","sourceRoot":"","sources":["../src/enableGlRenderTextureGuards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAA6C,MAAM,0BAA0B,CAAC;AAKzG,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAM7E;AAID,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGtE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { logOnce } from '@flighthq/log/contract';
|
|
2
|
+
import { LogLevel } from '@flighthq/types/contract';
|
|
3
|
+
import { setGlRenderTextureGuard } from './glRenderTexture';
|
|
4
|
+
export function areGlRenderTextureGuardsEnabled(state) {
|
|
5
|
+
let enabled = false;
|
|
6
|
+
setGlRenderTextureGuardProbe(state, () => {
|
|
7
|
+
enabled = true;
|
|
8
|
+
});
|
|
9
|
+
return enabled;
|
|
10
|
+
}
|
|
11
|
+
// Installs diagnostics for the two silent sentinel cases: sampling before the first completed
|
|
12
|
+
// renderInto, and sampling the same attachment while it is bound for writing.
|
|
13
|
+
export function enableGlRenderTextureGuards(state) {
|
|
14
|
+
setGlRenderTextureGuard(state, warnGlRenderTextureUnavailable);
|
|
15
|
+
_guardedContexts.add(state.gl);
|
|
16
|
+
}
|
|
17
|
+
function setGlRenderTextureGuardProbe(state, onEnabled) {
|
|
18
|
+
if (_guardedContexts.has(state.gl))
|
|
19
|
+
onEnabled();
|
|
20
|
+
}
|
|
21
|
+
function warnGlRenderTextureUnavailable(_state, renderTexture, explanation) {
|
|
22
|
+
const writing = explanation.status === 'writing';
|
|
23
|
+
logOnce(`render-gl:render-texture-${explanation.status}`, LogLevel.Warn, {
|
|
24
|
+
height: explanation.height,
|
|
25
|
+
message: writing
|
|
26
|
+
? 'bindGlRenderTexture: the render Texture is still bound for writing; sampling it would be a read-after-write feedback hazard.'
|
|
27
|
+
: 'bindGlRenderTexture: the render Texture has not completed renderIntoGlRenderTexture; sampling uses the empty sentinel.',
|
|
28
|
+
renderTexture,
|
|
29
|
+
status: explanation.status,
|
|
30
|
+
width: explanation.width,
|
|
31
|
+
}, 'render-gl');
|
|
32
|
+
}
|
|
33
|
+
const _guardedContexts = new WeakSet();
|
|
34
|
+
//# sourceMappingURL=enableGlRenderTextureGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableGlRenderTextureGuards.js","sourceRoot":"","sources":["../src/enableGlRenderTextureGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,UAAU,+BAA+B,CAAC,KAAoB;IAClE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE;QACvC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8FAA8F;AAC9F,8EAA8E;AAC9E,MAAM,UAAU,2BAA2B,CAAC,KAAoB;IAC9D,uBAAuB,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;IAC/D,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAoB,EAAE,SAAqB;IAC/E,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,SAAS,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,8BAA8B,CACrC,MAAqB,EACrB,aAAsC,EACtC,WAAiD;IAEjD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC;IACjD,OAAO,CACL,4BAA4B,WAAW,CAAC,MAAM,EAAE,EAChD,QAAQ,CAAC,IAAI,EACb;QACE,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,OAAO,EAAE,OAAO;YACd,CAAC,CAAC,8HAA8H;YAChI,CAAC,CAAC,wHAAwH;QAC5H,aAAa;QACb,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,KAAK,EAAE,WAAW,CAAC,KAAK;KACzB,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAA0B,CAAC"}
|
package/dist/glBackground.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBackground.d.ts","sourceRoot":"","sources":["../src/glBackground.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"glBackground.d.ts","sourceRoot":"","sources":["../src/glBackground.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI9D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAkB7D"}
|
package/dist/glBackground.js
CHANGED
|
@@ -2,8 +2,8 @@ import { getGlRenderStateRuntime } from './glRenderState';
|
|
|
2
2
|
export function renderGlBackground(state) {
|
|
3
3
|
const runtime = getGlRenderStateRuntime(state);
|
|
4
4
|
const gl = state.gl;
|
|
5
|
-
const viewport = runtime.renderTargetViewport
|
|
6
|
-
gl.viewport(0, 0, viewport.width, viewport.height);
|
|
5
|
+
const viewport = runtime.renderTargetViewport;
|
|
6
|
+
gl.viewport(viewport?.x ?? 0, viewport?.y ?? 0, viewport?.width ?? state.canvas.width, viewport?.height ?? state.canvas.height);
|
|
7
7
|
const rgba = state.backgroundColorRgba;
|
|
8
8
|
if (rgba.length >= 4 && rgba[3] > 0) {
|
|
9
9
|
gl.clearColor(rgba[0], rgba[1], rgba[2], rgba[3]);
|
package/dist/glBackground.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glBackground.js","sourceRoot":"","sources":["../src/glBackground.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"glBackground.js","sourceRoot":"","sources":["../src/glBackground.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,MAAM,OAAO,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAC9C,EAAE,CAAC,QAAQ,CACT,QAAQ,EAAE,CAAC,IAAI,CAAC,EAChB,QAAQ,EAAE,CAAC,IAAI,CAAC,EAChB,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,EACrC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CACxC,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAClC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GlCompressedTextureDecoder, GlCompressedTextureSupport, GlRenderState, TextureContainer, TextureContainerFormat } from '@flighthq/types';
|
|
1
|
+
import type { GlCompressedTextureDecoder, GlCompressedTextureSupport, GlRenderState, TextureContainer, TextureContainerFormat } from '@flighthq/types/contract';
|
|
2
2
|
export declare function detectGlCompressedTextureSupport(gl: WebGL2RenderingContext): GlCompressedTextureSupport;
|
|
3
3
|
export declare function getGlCompressedTextureFormat(gl: WebGL2RenderingContext, format: TextureContainerFormat): number;
|
|
4
4
|
export declare function hasGlCompressedTextureFormat(support: Readonly<GlCompressedTextureSupport>, format: TextureContainerFormat): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glCompressedTexture.d.ts","sourceRoot":"","sources":["../src/glCompressedTexture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"glCompressedTexture.d.ts","sourceRoot":"","sources":["../src/glCompressedTexture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAmBlC,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,sBAAsB,GAAG,0BAA0B,CAWvG;AAQD,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAqG/G;AAKD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,QAAQ,CAAC,0BAA0B,CAAC,EAC7C,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAuCT;AAOD,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,0BAA0B,GAAG,IAAI,GACxC,IAAI,CAEN;AAOD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAE7F;AAmBD,wBAAgB,kCAAkC,CAChD,EAAE,EAAE,sBAAsB,EAC1B,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EACrC,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,EAC7B,MAAM,CAAC,EAAE,0BAA0B,GAClC,OAAO,CA8DT"}
|
|
@@ -183,13 +183,11 @@ export function registerGlCompressedTextureDecoder(state, decode) {
|
|
|
183
183
|
}
|
|
184
184
|
// Installs the block-compressed upload seam on a render state, opting the ~40-format
|
|
185
185
|
// uploadGlCompressedTextureContainer path into the bundle only for a state that actually draws a
|
|
186
|
-
//
|
|
187
|
-
//
|
|
188
|
-
//
|
|
189
|
-
// previously installed uploader. The installed handler bridges a compressed ImageResource to
|
|
190
|
-
// uploadGlCompressedTextureContainer, threading through any registered RGBA decode fallback.
|
|
186
|
+
// CompressedImage. The 2D display draw path reads the installed handler off the runtime and skips the
|
|
187
|
+
// backing when none is registered, so ImageResource/Bitmap bundles do not carry the compression enum
|
|
188
|
+
// table. Opt-in and last-write-wins; pass null to clear a previously installed uploader.
|
|
191
189
|
export function registerGlCompressedTextureUpload(state, uploader) {
|
|
192
|
-
getGlRenderStateRuntime(state).compressedTextureUpload = uploader === null ? null :
|
|
190
|
+
getGlRenderStateRuntime(state).compressedTextureUpload = uploader === null ? null : uploadGlCompressedImage;
|
|
193
191
|
}
|
|
194
192
|
// Uploads every stored sub-image of a compressed container to the texture the caller has bound. Takes
|
|
195
193
|
// the GPU-native `compressedTexImage2D`/`compressedTexImage3D` path when the device supports the
|
|
@@ -272,15 +270,12 @@ function isSupportedGlCompressedTextureContainerShape(container) {
|
|
|
272
270
|
return true;
|
|
273
271
|
return container.faces === 6 && container.layers === 1;
|
|
274
272
|
}
|
|
275
|
-
// The installed GlCompressedTextureUploader
|
|
276
|
-
// threading through any registered RGBA decode fallback.
|
|
277
|
-
|
|
278
|
-
function uploadGlCompressedImageResource(gl, image, decode) {
|
|
273
|
+
// The installed GlCompressedTextureUploader bridges a CompressedImage to the container upload while
|
|
274
|
+
// threading through any registered RGBA decode fallback.
|
|
275
|
+
function uploadGlCompressedImage(gl, image, decode) {
|
|
279
276
|
const compressed = image.compressed;
|
|
280
|
-
if (compressed === null)
|
|
281
|
-
return false;
|
|
282
277
|
const container = compressed.container;
|
|
283
|
-
//
|
|
278
|
+
// bindGlCompressedImageTexture calls this bridge while TEXTURE_2D is bound. Cube, array, and volume
|
|
284
279
|
// resources require their own entity/binder families; forwarding one here would address an unbound
|
|
285
280
|
// target even though the low-level container uploader supports caller-bound cube and 2D-array targets.
|
|
286
281
|
if (container.depth !== 1 || container.faces !== 1 || container.layers !== 1)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glCompressedTexture.js","sourceRoot":"","sources":["../src/glCompressedTexture.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"glCompressedTexture.js","sourceRoot":"","sources":["../src/glCompressedTexture.ts"],"names":[],"mappings":"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"}
|
package/dist/glDraw.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import type { GlBitmapShader, GlBlendRealization, GlRenderState, ImageResource, SamplerLike,
|
|
2
|
-
import { BlendMode } from '@flighthq/types';
|
|
1
|
+
import type { Bitmap, CompressedImage, GlBitmapShader, GlBlendRealization, GlRenderState, GlRenderStateRuntime, ImageResource, SamplerLike, TextureLike } from '@flighthq/types/contract';
|
|
2
|
+
import { BlendMode } from '@flighthq/types/contract';
|
|
3
3
|
export declare function applyGlBlendMode(state: GlRenderState, blendMode: BlendMode | null): void;
|
|
4
|
+
export declare function applyGlSamplerState(state: GlRenderState, runtime: GlRenderStateRuntime, texture: WebGLTexture, sampler: Readonly<SamplerLike> | null, smoothingOverride?: boolean | null): void;
|
|
5
|
+
export declare function bindGlBitmapTexture(state: GlRenderState, bitmap: Readonly<Bitmap>, sampler?: Readonly<SamplerLike> | null, smoothingOverride?: boolean | null, premultiply?: boolean): WebGLTexture;
|
|
6
|
+
export declare function bindGlCompressedImageTexture(state: GlRenderState, image: Readonly<CompressedImage>, sampler?: Readonly<SamplerLike> | null, smoothingOverride?: boolean | null): WebGLTexture;
|
|
4
7
|
export declare function bindGlImageResourceTexture(state: GlRenderState, image: Readonly<ImageResource>, sampler?: Readonly<SamplerLike> | null, smoothingOverride?: boolean | null, premultiply?: boolean): WebGLTexture;
|
|
5
8
|
export declare function bindGlTexture(state: GlRenderState, imageSource: CanvasImageSource, sampler?: Readonly<SamplerLike> | null): WebGLTexture;
|
|
6
|
-
export declare function bindGlVideoTexture(state: GlRenderState,
|
|
9
|
+
export declare function bindGlVideoTexture(state: GlRenderState, texture: Readonly<TextureLike>, sampler?: Readonly<SamplerLike> | null): WebGLTexture;
|
|
7
10
|
export declare function createGlTexture(state: GlRenderState): WebGLTexture;
|
|
8
11
|
export declare function drawGlQuad(state: GlRenderState, x0: number, y0: number, x1: number, y1: number, u0: number, v0: number, u1: number, v1: number): void;
|
|
9
12
|
export declare function enableGlBlendModeSupport(state: GlRenderState): void;
|
package/dist/glDraw.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glDraw.d.ts","sourceRoot":"","sources":["../src/glDraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,aAAa,
|
|
1
|
+
{"version":3,"file":"glDraw.d.ts","sourceRoot":"","sources":["../src/glDraw.ts"],"names":[],"mappings":"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"}
|
package/dist/glDraw.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BlendMode } from '@flighthq/types';
|
|
1
|
+
import { BlendMode } from '@flighthq/types/contract';
|
|
2
2
|
import { getGlRenderStateRuntime } from './glRenderState';
|
|
3
3
|
import { setGlAttributes, setGlMatrixFromValues } from './glShader';
|
|
4
4
|
import { uploadGlTextureData, uploadGlTextureElement } from './glTextureUpload';
|
|
@@ -18,31 +18,69 @@ export function applyGlBlendMode(state, blendMode) {
|
|
|
18
18
|
gl.blendEquation(gl[realization.equation ?? 'FUNC_ADD']);
|
|
19
19
|
gl.blendFunc(gl[realization.src], gl[realization.dst]);
|
|
20
20
|
}
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
//
|
|
21
|
+
// Applies a sampler's wrap, filtering, anisotropy, and mip chain to the currently-bound TEXTURE_2D.
|
|
22
|
+
// Without a sampler it falls back to the clamp-to-edge, no-mips 2D bitmap/sprite default, filtered by
|
|
23
|
+
// `smoothingOverride` when the caller supplies one (a per-bitmap `smoothing` flag) and otherwise by the
|
|
24
|
+
// state's global `allowSmoothing`. With a sampler, every field comes from the descriptor. The mip chain
|
|
25
|
+
// is generated once per texture (tracked in runtime.mipmappedTextures) the first time a mip-sampling
|
|
26
|
+
// filter asks for it, so a shared texture first bound without mips and later with them still generates
|
|
27
|
+
// its chain. Filtering and wrap are set every bind (cheap) so a texture shared across samplers follows
|
|
28
|
+
// the current draw; only the one-time mip generation is gated.
|
|
29
|
+
export function applyGlSamplerState(state, runtime, texture, sampler, smoothingOverride = null) {
|
|
30
|
+
const gl = state.gl;
|
|
31
|
+
if (!sampler) {
|
|
32
|
+
const smooth = smoothingOverride ?? state.allowSmoothing;
|
|
33
|
+
const filter = smooth ? gl.LINEAR : gl.NEAREST;
|
|
34
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
|
|
35
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
|
|
36
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
37
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const useMips = sampler.mipmaps && isGlMipmapFilter(sampler.minFilter);
|
|
41
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, glMinFilterValue(gl, sampler.minFilter, useMips));
|
|
42
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, glMagFilterValue(gl, sampler.magFilter));
|
|
43
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, glTextureWrapValue(gl, sampler.wrapU));
|
|
44
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, glTextureWrapValue(gl, sampler.wrapV));
|
|
45
|
+
const ext = ensureGlAnisotropyExt(state, runtime);
|
|
46
|
+
if (ext) {
|
|
47
|
+
// Clamp the requested level to [1, hardware max]; 1 disables anisotropy and also resets a texture
|
|
48
|
+
// that a previous anisotropic sampler left elevated.
|
|
49
|
+
const level = Math.max(1, Math.min(sampler.anisotropy, runtime.maxAnisotropy ?? 1));
|
|
50
|
+
gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, level);
|
|
51
|
+
}
|
|
52
|
+
if (useMips) {
|
|
53
|
+
const mipped = (runtime.mipmappedTextures ??= new WeakSet());
|
|
54
|
+
if (!mipped.has(texture)) {
|
|
55
|
+
gl.generateMipmap(gl.TEXTURE_2D);
|
|
56
|
+
mipped.add(texture);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export function bindGlBitmapTexture(state, bitmap, sampler, smoothingOverride, premultiply = false) {
|
|
61
|
+
return bindGlImageBackingTexture(state, bitmap, sampler, smoothingOverride, premultiply, false, uploadGlBitmap);
|
|
62
|
+
}
|
|
63
|
+
export function bindGlCompressedImageTexture(state, image, sampler, smoothingOverride) {
|
|
64
|
+
return bindGlImageBackingTexture(state, image, sampler, smoothingOverride, false, true, uploadGlCompressedImage);
|
|
65
|
+
}
|
|
66
|
+
// Binds (uploading + caching on first use, re-uploading when the host image changes) the GL texture for
|
|
67
|
+
// an ImageResource and applies the sampler's full state. The Bitmap and CompressedImage siblings below
|
|
68
|
+
// share only the identity/version cache bracket; each backing keeps a representation-specific uploader.
|
|
69
|
+
// Sampler state is re-applied every bind so a resource reused by two materials with different samplers
|
|
70
|
+
// follows the current draw.
|
|
28
71
|
//
|
|
29
72
|
// `premultiply` states whether the caller wants a premultiplied GPU texture — bind never premultiplies on
|
|
30
73
|
// its own. The 2D display and particle pipelines blend premultiplied (ONE, ONE_MINUS_SRC_ALPHA) and pass
|
|
31
|
-
// true; the 3D forward path blends straight (SRC_ALPHA) and
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
// (`premultiply && alphaType !== 'premultiplied'`), so an already-premultiplied resource uploads as-is
|
|
35
|
-
// instead of double-premultiplying, and false never transforms. The two request modes cache separate GL
|
|
36
|
-
// textures (imageResourcePremultipliedTextureCache for premultiply, imageResourceStraightTextureCache otherwise), keyed
|
|
37
|
-
// by the request so one ImageResource bound by both a premultiplied 2D sprite and a straight 3D material
|
|
38
|
-
// keeps a correct texture for each — and the 2D teardown paths that reach imageResourcePremultipliedTextureCache
|
|
39
|
-
// directly always find their (premultiply-requested) texture there.
|
|
74
|
+
// true; the 3D forward path blends straight (SRC_ALPHA) and leaves the default false. The two request
|
|
75
|
+
// modes cache separate GL textures so one backing can be sampled by both paths without rewriting its
|
|
76
|
+
// other realization.
|
|
40
77
|
export function bindGlImageResourceTexture(state, image, sampler, smoothingOverride, premultiply = false) {
|
|
78
|
+
return bindGlImageBackingTexture(state, image, sampler, smoothingOverride, premultiply, false, uploadGlImageResource);
|
|
79
|
+
}
|
|
80
|
+
function bindGlImageBackingTexture(state, image, sampler, smoothingOverride, premultiply, straightAlpha, upload) {
|
|
41
81
|
const runtime = getGlRenderStateRuntime(state);
|
|
42
82
|
const gl = state.gl;
|
|
43
|
-
const cache = premultiply
|
|
44
|
-
? runtime.imageResourcePremultipliedTextureCache
|
|
45
|
-
: runtime.imageResourceStraightTextureCache;
|
|
83
|
+
const cache = premultiply ? runtime.imageBackingPremultipliedTextureCache : runtime.imageBackingStraightTextureCache;
|
|
46
84
|
let entry = cache.get(image);
|
|
47
85
|
if (entry === undefined) {
|
|
48
86
|
entry = { texture: gl.createTexture(), version: -1 };
|
|
@@ -50,9 +88,9 @@ export function bindGlImageResourceTexture(state, image, sampler, smoothingOverr
|
|
|
50
88
|
}
|
|
51
89
|
gl.bindTexture(gl.TEXTURE_2D, entry.texture);
|
|
52
90
|
runtime.currentTexture = entry.texture;
|
|
53
|
-
runtime.currentTextureStraightAlpha =
|
|
91
|
+
runtime.currentTextureStraightAlpha = straightAlpha;
|
|
54
92
|
if (entry.version !== image.version) {
|
|
55
|
-
|
|
93
|
+
upload(state, image, premultiply);
|
|
56
94
|
entry.version = image.version;
|
|
57
95
|
}
|
|
58
96
|
applyGlSamplerState(state, runtime, entry.texture, sampler ?? null, smoothingOverride ?? null);
|
|
@@ -91,7 +129,7 @@ export function bindGlTexture(state, imageSource, sampler) {
|
|
|
91
129
|
// texture bound to whatever unit was active THEN, but callers change the active unit between binds
|
|
92
130
|
// (a material binds its maps to units 0..4 via gl.activeTexture). Binding one image source to two
|
|
93
131
|
// units — e.g. a map reused as both normal and metallic-roughness — would otherwise leave the
|
|
94
|
-
// second unit unbound. A rebind is one cheap GL call; the
|
|
132
|
+
// second unit unbound. A rebind is one cheap GL call; the quad-batch writer binds once per batch, so the
|
|
95
133
|
// dropped skip costs nothing meaningful.
|
|
96
134
|
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
97
135
|
runtime.currentTexture = texture;
|
|
@@ -102,31 +140,31 @@ export function bindGlTexture(state, imageSource, sampler) {
|
|
|
102
140
|
applyGlSamplerState(state, runtime, texture, sampler ?? null);
|
|
103
141
|
return texture;
|
|
104
142
|
}
|
|
105
|
-
// Binds the GL texture for a
|
|
106
|
-
// its `
|
|
143
|
+
// Binds the GL texture for a video-backed Texture and re-uploads the backing element's current frame
|
|
144
|
+
// only when its ImageResource `version` has advanced — the dynamic, per-frame sibling of
|
|
107
145
|
// bindGlImageResourceTexture (settled ImageResource) and bindGlTexture (raw element). The GL texture is
|
|
108
|
-
// cached by the
|
|
109
|
-
//
|
|
110
|
-
// the
|
|
111
|
-
//
|
|
112
|
-
// advanceVideoTexture when the element reports a fresh decoded frame; this reads the current frame
|
|
146
|
+
// cached by the ImageResource backing in the runtime's videoTextureCache (lazily created), so two
|
|
147
|
+
// sampled Textures share one upload while their samplers remain draw-local.
|
|
148
|
+
// Leaves the texture bound at the active unit for the caller to sample. Callers advance the backing
|
|
149
|
+
// version via advanceVideoTexture when the element reports a fresh decoded frame; this reads the current frame
|
|
113
150
|
// through uploadGlTextureElement's zero-copy element fast-path.
|
|
114
|
-
export function bindGlVideoTexture(state,
|
|
151
|
+
export function bindGlVideoTexture(state, texture, sampler) {
|
|
152
|
+
const image = texture.storage.image;
|
|
115
153
|
const runtime = getGlRenderStateRuntime(state);
|
|
116
154
|
const gl = state.gl;
|
|
117
155
|
const cache = (runtime.videoTextureCache ??= new WeakMap());
|
|
118
|
-
let entry = cache.get(
|
|
156
|
+
let entry = cache.get(image);
|
|
119
157
|
if (entry === undefined) {
|
|
120
|
-
entry = { texture: gl.createTexture(),
|
|
121
|
-
cache.set(
|
|
158
|
+
entry = { texture: gl.createTexture(), uploadedVersion: -1 };
|
|
159
|
+
cache.set(image, entry);
|
|
122
160
|
}
|
|
123
161
|
gl.bindTexture(gl.TEXTURE_2D, entry.texture);
|
|
124
162
|
runtime.currentTexture = entry.texture;
|
|
125
163
|
runtime.currentTextureStraightAlpha = false;
|
|
126
164
|
// Straight-alpha element under premultiplied blend would blow out RGB; match the bitmap/element path.
|
|
127
165
|
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
|
|
128
|
-
entry.
|
|
129
|
-
applyGlSamplerState(state, runtime, entry.texture, sampler ??
|
|
166
|
+
entry.uploadedVersion = uploadGlTextureVideoFrame(gl, image, entry.uploadedVersion);
|
|
167
|
+
applyGlSamplerState(state, runtime, entry.texture, sampler ?? texture.sampler);
|
|
130
168
|
return entry.texture;
|
|
131
169
|
}
|
|
132
170
|
export function createGlTexture(state) {
|
|
@@ -216,43 +254,21 @@ export function updateGlTexture(state, texture, canvas) {
|
|
|
216
254
|
if (runtime.mipmappedTextures?.has(texture))
|
|
217
255
|
gl.generateMipmap(gl.TEXTURE_2D);
|
|
218
256
|
}
|
|
219
|
-
|
|
257
|
+
function uploadGlBitmap(state, image, premultiply) {
|
|
258
|
+
const bitmap = image;
|
|
259
|
+
const gl = state.gl;
|
|
260
|
+
const transform = premultiply && bitmap.alphaType !== 'premultiplied';
|
|
261
|
+
const data = transform ? premultiplyStraightRgba8(bitmap.data) : bitmap.data;
|
|
262
|
+
uploadGlTextureData(gl, gl.TEXTURE_2D, bitmap.width, bitmap.height, data);
|
|
263
|
+
}
|
|
264
|
+
function uploadGlCompressedImage(state, image) {
|
|
220
265
|
const runtime = getGlRenderStateRuntime(state);
|
|
221
|
-
|
|
222
|
-
runtime.shaderLoc = resolved.locations;
|
|
223
|
-
const program = resolved.program;
|
|
224
|
-
if (runtime.currentProgram !== program) {
|
|
225
|
-
state.gl.useProgram(program);
|
|
226
|
-
runtime.currentProgram = program;
|
|
227
|
-
}
|
|
266
|
+
runtime.compressedTextureUpload?.(state.gl, image, runtime.compressedTextureDecoder ?? null);
|
|
228
267
|
}
|
|
229
|
-
|
|
230
|
-
// alphaType-resolved decision (see bindGlImageResourceTexture) to produce a premultiplied GPU texture:
|
|
231
|
-
// when set, the element fast-path premultiplies via UNPACK_PREMULTIPLY_ALPHA_WEBGL and raw `data` (for
|
|
232
|
-
// which that flag is ignored) is premultiplied on the CPU. When clear, both upload the pixels as-is, so
|
|
233
|
-
// the straight-blend 3D forward path gets its albedo untouched and no data map (normal/roughness) is
|
|
234
|
-
// corrupted. The data path is what makes a memory-generated Surface a first-class texture. A resource
|
|
235
|
-
// that carries only a block-`compressed` payload (no element or data) uploads through the GPU-native
|
|
236
|
-
// compressed path — falling back to the state's registered RGBA decoder when the device lacks the block
|
|
237
|
-
// format; compressed blocks are never premultiplied here (the display shader premultiplies a straight
|
|
238
|
-
// sample at draw time instead).
|
|
239
|
-
function uploadGlBoundImageResource(state, image, premultiply) {
|
|
268
|
+
function uploadGlImageResource(state, image, premultiply) {
|
|
240
269
|
const gl = state.gl;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
uploadGlTextureElement(gl, gl.TEXTURE_2D, image.source);
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
if (image.data === null && image.compressed !== null) {
|
|
247
|
-
// The compressed-container upload path is an opt-in seam (registerGlCompressedTextureUpload), so a
|
|
248
|
-
// state that only draws element/data bitmaps never carries its ~40-format enum table. When unset,
|
|
249
|
-
// skip rather than upload garbage — the texture stays empty until an uploader is registered.
|
|
250
|
-
const runtime = getGlRenderStateRuntime(state);
|
|
251
|
-
runtime.compressedTextureUpload?.(gl, image, runtime.compressedTextureDecoder ?? null);
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
const data = premultiply ? premultiplyStraightRgba8(image.data) : image.data;
|
|
255
|
-
uploadGlTextureData(gl, gl.TEXTURE_2D, image.width, image.height, data);
|
|
270
|
+
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiply);
|
|
271
|
+
uploadGlTextureElement(gl, gl.TEXTURE_2D, image.source);
|
|
256
272
|
}
|
|
257
273
|
// Returns a new premultiplied rgba8 buffer from a straight-alpha one (rgb *= a/255). Allocates, but runs
|
|
258
274
|
// only on a texture upload (cache miss or content change), never in the per-frame draw path.
|
|
@@ -267,43 +283,14 @@ function premultiplyStraightRgba8(data) {
|
|
|
267
283
|
}
|
|
268
284
|
return out;
|
|
269
285
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
function applyGlSamplerState(state, runtime, texture, sampler, smoothingOverride = null) {
|
|
279
|
-
const gl = state.gl;
|
|
280
|
-
if (!sampler) {
|
|
281
|
-
const smooth = smoothingOverride ?? state.allowSmoothing;
|
|
282
|
-
const filter = smooth ? gl.LINEAR : gl.NEAREST;
|
|
283
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filter);
|
|
284
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filter);
|
|
285
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
286
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
287
|
-
return;
|
|
288
|
-
}
|
|
289
|
-
const useMips = sampler.mipmaps && isGlMipmapFilter(sampler.minFilter);
|
|
290
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, glMinFilterValue(gl, sampler.minFilter, useMips));
|
|
291
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, glMagFilterValue(gl, sampler.magFilter));
|
|
292
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, glTextureWrapValue(gl, sampler.wrapU));
|
|
293
|
-
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, glTextureWrapValue(gl, sampler.wrapV));
|
|
294
|
-
const ext = ensureGlAnisotropyExt(state, runtime);
|
|
295
|
-
if (ext) {
|
|
296
|
-
// Clamp the requested level to [1, hardware max]; 1 disables anisotropy and also resets a texture
|
|
297
|
-
// that a previous anisotropic sampler left elevated.
|
|
298
|
-
const level = Math.max(1, Math.min(sampler.anisotropy, runtime.maxAnisotropy ?? 1));
|
|
299
|
-
gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, level);
|
|
300
|
-
}
|
|
301
|
-
if (useMips) {
|
|
302
|
-
const mipped = (runtime.mipmappedTextures ??= new WeakSet());
|
|
303
|
-
if (!mipped.has(texture)) {
|
|
304
|
-
gl.generateMipmap(gl.TEXTURE_2D);
|
|
305
|
-
mipped.add(texture);
|
|
306
|
-
}
|
|
286
|
+
export function useGlProgram(state, shader) {
|
|
287
|
+
const runtime = getGlRenderStateRuntime(state);
|
|
288
|
+
const resolved = shader ?? runtime.defaultBitmapShader;
|
|
289
|
+
runtime.shaderLoc = resolved.locations;
|
|
290
|
+
const program = resolved.program;
|
|
291
|
+
if (runtime.currentProgram !== program) {
|
|
292
|
+
state.gl.useProgram(program);
|
|
293
|
+
runtime.currentProgram = program;
|
|
307
294
|
}
|
|
308
295
|
}
|
|
309
296
|
// Resolves and caches EXT_texture_filter_anisotropic on the runtime: anisotropyExt is undefined until
|