@genome-spy/core 0.74.0 → 0.76.0
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/bundle/{esm-CgfVIRJ-.js → esm-BimDEpBb.js} +1 -1
- package/dist/bundle/{esm-DtE8VqAv.js → esm-Bvlm1uVk.js} +1 -1
- package/dist/bundle/{esm-sIoQYZ21.js → esm-CngqBe45.js} +17 -17
- package/dist/bundle/{esm-DQiq2Zhd.js → esm-D_euN86T.js} +43 -43
- package/dist/bundle/index.es.js +6064 -5756
- package/dist/bundle/index.js +104 -103
- package/dist/schema.json +572 -12
- package/dist/src/config/defaults/markDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/markDefaults.js +1 -12
- package/dist/src/config/defaults/scaleDefaults.d.ts.map +1 -1
- package/dist/src/config/defaults/scaleDefaults.js +1 -0
- package/dist/src/config/markConfig.d.ts.map +1 -1
- package/dist/src/config/markConfig.js +16 -8
- package/dist/src/config/themes.d.ts.map +1 -1
- package/dist/src/config/themes.js +15 -2
- package/dist/src/data/sources/dataUtils.d.ts +25 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +23 -0
- package/dist/src/data/sources/inlineSource.js +2 -2
- package/dist/src/data/sources/lazy/registerBuiltInLazySources.js +2 -2
- package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts +2 -0
- package/dist/src/data/sources/lazy/registerCoreLazySources.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts +7 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/tabixSource.js +18 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +37 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/tabixTsvSource.js +163 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +8 -3
- package/dist/src/encoder/encoder.d.ts +2 -2
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.d.ts.map +1 -1
- package/dist/src/genome/scaleLocus.js +8 -3
- package/dist/src/genomeSpy/interactionController.d.ts.map +1 -1
- package/dist/src/genomeSpy/interactionController.js +91 -51
- package/dist/src/genomeSpyBase.d.ts.map +1 -1
- package/dist/src/genomeSpyBase.js +4 -1
- package/dist/src/gl/dataToVertices.d.ts +12 -14
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +116 -95
- package/dist/src/gl/glslScaleGenerator.d.ts +3 -0
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +10 -8
- package/dist/src/gl/vertexRangeIndex.d.ts +23 -0
- package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -0
- package/dist/src/gl/vertexRangeIndex.js +150 -0
- package/dist/src/gl/webGLHelper.d.ts +5 -2
- package/dist/src/gl/webGLHelper.d.ts.map +1 -1
- package/dist/src/gl/webGLHelper.js +20 -3
- package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +1082 -0
- package/dist/src/marks/link.vertex.glsl.js +1 -1
- package/dist/src/marks/mark.d.ts +1 -1
- package/dist/src/minimal.d.ts.map +1 -1
- package/dist/src/minimal.js +5 -4
- package/dist/src/paramRuntime/expressionCompiler.d.ts +2 -1
- package/dist/src/paramRuntime/expressionCompiler.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionCompiler.js +3 -2
- package/dist/src/paramRuntime/expressionRef.d.ts +4 -1
- package/dist/src/paramRuntime/expressionRef.d.ts.map +1 -1
- package/dist/src/paramRuntime/expressionRef.js +10 -3
- package/dist/src/paramRuntime/graphRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/graphRuntime.js +15 -6
- package/dist/src/paramRuntime/paramRuntime.d.ts +8 -2
- package/dist/src/paramRuntime/paramRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/paramRuntime.js +10 -5
- package/dist/src/paramRuntime/types.d.ts +1 -0
- package/dist/src/paramRuntime/types.d.ts.map +1 -1
- package/dist/src/paramRuntime/types.js +1 -0
- package/dist/src/paramRuntime/viewParamRuntime.d.ts +5 -4
- package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
- package/dist/src/paramRuntime/viewParamRuntime.js +17 -6
- package/dist/src/scale/scale.d.ts.map +1 -1
- package/dist/src/scale/scale.js +11 -2
- package/dist/src/scales/domainPlanner.d.ts +57 -11
- package/dist/src/scales/domainPlanner.d.ts.map +1 -1
- package/dist/src/scales/domainPlanner.js +183 -84
- package/dist/src/scales/scaleInstanceManager.d.ts.map +1 -1
- package/dist/src/scales/scaleInstanceManager.js +7 -2
- package/dist/src/scales/scalePropsResolver.d.ts +3 -3
- package/dist/src/scales/scalePropsResolver.d.ts.map +1 -1
- package/dist/src/scales/scalePropsResolver.js +28 -5
- package/dist/src/scales/scaleResolution.d.ts +12 -1
- package/dist/src/scales/scaleResolution.d.ts.map +1 -1
- package/dist/src/scales/scaleResolution.js +180 -21
- package/dist/src/scales/selectionDomainUtils.d.ts +10 -0
- package/dist/src/scales/selectionDomainUtils.d.ts.map +1 -1
- package/dist/src/scales/selectionDomainUtils.js +32 -3
- package/dist/src/screenshotExport.d.ts +23 -0
- package/dist/src/screenshotExport.d.ts.map +1 -0
- package/dist/src/screenshotExport.js +44 -0
- package/dist/src/screenshotHarness.d.ts.map +1 -1
- package/dist/src/screenshotHarness.js +26 -24
- package/dist/src/spec/axis.d.ts +2 -2
- package/dist/src/spec/channel.d.ts +34 -4
- package/dist/src/spec/data.d.ts +52 -0
- package/dist/src/spec/parameter.d.ts +6 -0
- package/dist/src/spec/scale.d.ts +13 -1
- package/dist/src/spec/transform.d.ts +6 -0
- package/dist/src/utils/expression.d.ts +16 -8
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +291 -11
- package/dist/src/view/axisGridView.d.ts.map +1 -1
- package/dist/src/view/axisGridView.js +2 -1
- package/dist/src/view/axisView.d.ts.map +1 -1
- package/dist/src/view/axisView.js +2 -1
- package/dist/src/view/facetView.d.ts.map +1 -1
- package/dist/src/view/facetView.js +2 -1
- package/dist/src/view/flowBuilder.d.ts +1 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +11 -7
- package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
- package/dist/src/view/gridView/gridChild.js +9 -1
- package/dist/src/view/gridView/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView/gridView.js +198 -32
- package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
- package/dist/src/view/gridView/scrollbar.js +5 -1
- package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
- package/dist/src/view/gridView/selectionRect.js +5 -1
- package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
- package/dist/src/view/gridView/separatorView.js +5 -1
- package/dist/src/view/resolutionPlanner.d.ts +9 -0
- package/dist/src/view/resolutionPlanner.d.ts.map +1 -0
- package/dist/src/view/resolutionPlanner.js +302 -0
- package/dist/src/view/testUtils.d.ts +30 -3
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +51 -2
- package/dist/src/view/unitView.d.ts +1 -1
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +5 -152
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +2 -1
- package/dist/src/view/viewSelectors.d.ts +38 -10
- package/dist/src/view/viewSelectors.d.ts.map +1 -1
- package/dist/src/view/viewSelectors.js +67 -2
- package/dist/src/view/viewUtilTypes.d.ts +15 -0
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +10 -0
- package/package.json +2 -2
- package/LICENSE +0 -21
- /package/dist/bundle/{esm-BDFRLEuD.js → esm-C49STiCR.js} +0 -0
- /package/dist/bundle/{esm-CGX-qz1d.js → esm-CuVa5T98.js} +0 -0
|
@@ -676,7 +676,9 @@ export function getAttributeAndArrayTypes(scale, channel) {
|
|
|
676
676
|
: { attributeType: "float", arrayConstructor: Float32Array };
|
|
677
677
|
|
|
678
678
|
return Object.assign(props, {
|
|
679
|
-
numComponents: +(
|
|
679
|
+
numComponents: +(
|
|
680
|
+
props.attributeType.match(/^(?:u)?vec([234])$/)?.[1] ?? 1
|
|
681
|
+
),
|
|
680
682
|
discrete,
|
|
681
683
|
hp,
|
|
682
684
|
largeHp,
|
|
@@ -701,9 +703,9 @@ export function isLargeGenome(domain) {
|
|
|
701
703
|
return domain[1] > 2 ** 32;
|
|
702
704
|
}
|
|
703
705
|
|
|
704
|
-
const
|
|
705
|
-
const
|
|
706
|
-
const
|
|
706
|
+
export const HIGH_PRECISION_SPLIT_BITS = 12;
|
|
707
|
+
export const HIGH_PRECISION_SPLIT_BASE = 2 ** HIGH_PRECISION_SPLIT_BITS;
|
|
708
|
+
export const HIGH_PRECISION_SPLIT_MASK = HIGH_PRECISION_SPLIT_BASE - 1;
|
|
707
709
|
|
|
708
710
|
/**
|
|
709
711
|
* @param {number} x Must be an integer
|
|
@@ -712,7 +714,7 @@ const BM = BS - 1;
|
|
|
712
714
|
export function splitHighPrecision(x, arr = []) {
|
|
713
715
|
// Using a bitmask is MUCH faster than using modulo (at least on Chrome 112)
|
|
714
716
|
// https://www.wikiwand.com/en/Modulo#Performance_issues
|
|
715
|
-
const lo = x &
|
|
717
|
+
const lo = x & HIGH_PRECISION_SPLIT_MASK;
|
|
716
718
|
const hi = x - lo;
|
|
717
719
|
|
|
718
720
|
arr[0] = hi;
|
|
@@ -726,8 +728,8 @@ export function splitHighPrecision(x, arr = []) {
|
|
|
726
728
|
* @param {number[]} [arr]
|
|
727
729
|
*/
|
|
728
730
|
export function splitLargeHighPrecision(x, arr = []) {
|
|
729
|
-
const lo = x %
|
|
730
|
-
const hi = (x - lo) /
|
|
731
|
+
const lo = x % HIGH_PRECISION_SPLIT_BASE;
|
|
732
|
+
const hi = (x - lo) / HIGH_PRECISION_SPLIT_BASE;
|
|
731
733
|
|
|
732
734
|
arr[0] = hi;
|
|
733
735
|
arr[1] = lo;
|
|
@@ -739,7 +741,7 @@ export function splitLargeHighPrecision(x, arr = []) {
|
|
|
739
741
|
* @param {number} x
|
|
740
742
|
*/
|
|
741
743
|
function exactSplitHighPrecision(x) {
|
|
742
|
-
const lo = x %
|
|
744
|
+
const lo = x % HIGH_PRECISION_SPLIT_BASE;
|
|
743
745
|
const hi = x - lo;
|
|
744
746
|
|
|
745
747
|
return [hi, lo];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @callback VertexReader
|
|
3
|
+
* @param {number} vertexIndex
|
|
4
|
+
* @returns {number}
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* A binned index for vertex ranges that are already emitted into typed arrays.
|
|
8
|
+
* The readers operate on vertices, not source datums.
|
|
9
|
+
*
|
|
10
|
+
* The scan is run-based: consecutive vertices with the same effective x
|
|
11
|
+
* interval are collapsed into one range before binning.
|
|
12
|
+
*
|
|
13
|
+
* @param {number} size Number of bins
|
|
14
|
+
* @param {[number, number]} domain Domain of positions
|
|
15
|
+
* @param {VertexReader} readStart Reader for the start x value at a vertex
|
|
16
|
+
* @param {VertexReader} [readEnd=readStart] Reader for the end x value at a vertex
|
|
17
|
+
* @param {number} [startVertexIndex=0] First vertex index in the scanned range
|
|
18
|
+
* @param {number} [endVertexIndex=startVertexIndex] One past the last vertex index
|
|
19
|
+
* @returns {import("../utils/binnedIndex.js").Lookup | undefined}
|
|
20
|
+
*/
|
|
21
|
+
export function createVertexRangeIndexer(size: number, domain: [number, number], readStart: VertexReader, readEnd?: VertexReader, startVertexIndex?: number, endVertexIndex?: number): import("../utils/binnedIndex.js").Lookup | undefined;
|
|
22
|
+
export type VertexReader = (vertexIndex: number) => number;
|
|
23
|
+
//# sourceMappingURL=vertexRangeIndex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertexRangeIndex.d.ts","sourceRoot":"","sources":["../../../src/gl/vertexRangeIndex.js"],"names":[],"mappings":"AAKA;;;;GAIG;AAEH;;;;;;;;;;;;;;GAcG;AACH,+CARW,MAAM,UACN,CAAC,MAAM,EAAE,MAAM,CAAC,aAChB,YAAY,YACZ,YAAY,qBACZ,MAAM,mBACN,MAAM,GACJ,OAAO,yBAAyB,EAAE,MAAM,GAAG,SAAS,CA6HhE;yCA9IU,MAAM,KACJ,MAAM"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import clamp from "../utils/clamp.js";
|
|
2
|
+
|
|
3
|
+
const MAX_INTEGER = 2 ** 31 - 1;
|
|
4
|
+
const MIN_INTEGER = -(2 ** 31);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @callback VertexReader
|
|
8
|
+
* @param {number} vertexIndex
|
|
9
|
+
* @returns {number}
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A binned index for vertex ranges that are already emitted into typed arrays.
|
|
14
|
+
* The readers operate on vertices, not source datums.
|
|
15
|
+
*
|
|
16
|
+
* The scan is run-based: consecutive vertices with the same effective x
|
|
17
|
+
* interval are collapsed into one range before binning.
|
|
18
|
+
*
|
|
19
|
+
* @param {number} size Number of bins
|
|
20
|
+
* @param {[number, number]} domain Domain of positions
|
|
21
|
+
* @param {VertexReader} readStart Reader for the start x value at a vertex
|
|
22
|
+
* @param {VertexReader} [readEnd=readStart] Reader for the end x value at a vertex
|
|
23
|
+
* @param {number} [startVertexIndex=0] First vertex index in the scanned range
|
|
24
|
+
* @param {number} [endVertexIndex=startVertexIndex] One past the last vertex index
|
|
25
|
+
* @returns {import("../utils/binnedIndex.js").Lookup | undefined}
|
|
26
|
+
*/
|
|
27
|
+
export function createVertexRangeIndexer(
|
|
28
|
+
size,
|
|
29
|
+
domain,
|
|
30
|
+
readStart,
|
|
31
|
+
readEnd = readStart,
|
|
32
|
+
startVertexIndex = 0,
|
|
33
|
+
endVertexIndex = startVertexIndex
|
|
34
|
+
) {
|
|
35
|
+
if (endVertexIndex <= startVertexIndex) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (domain[1] <= domain[0]) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const startIndices = new Array(size);
|
|
44
|
+
startIndices.fill(MAX_INTEGER);
|
|
45
|
+
|
|
46
|
+
const endIndices = new Array(size);
|
|
47
|
+
endIndices.fill(0);
|
|
48
|
+
|
|
49
|
+
const start = domain[0];
|
|
50
|
+
const domainLength = domain[1] - domain[0];
|
|
51
|
+
const divisor = domainLength / size;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @param {number} pos
|
|
55
|
+
* @param {boolean} end
|
|
56
|
+
*/
|
|
57
|
+
const getBin = (pos, end) => {
|
|
58
|
+
const unfloored = (pos - start) / divisor;
|
|
59
|
+
const floored = Math.floor(unfloored);
|
|
60
|
+
|
|
61
|
+
// Special handling for the end coordinate because we are using half-open ranges.
|
|
62
|
+
return clamp(
|
|
63
|
+
end && floored == unfloored ? floored - 1 : floored,
|
|
64
|
+
0,
|
|
65
|
+
size - 1
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
let lastIndex = MIN_INTEGER;
|
|
70
|
+
let lastStart = -Infinity;
|
|
71
|
+
let unordered = false;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @type {import("../utils/binnedIndex.js").Lookup}
|
|
75
|
+
*/
|
|
76
|
+
const lookup = (queryStart, queryEnd, arr = [0, 0]) => {
|
|
77
|
+
const startBin = getBin(queryStart, false);
|
|
78
|
+
const endBin = getBin(queryEnd, true);
|
|
79
|
+
const startIndex = startIndices[startBin];
|
|
80
|
+
const endIndex = Math.max(endIndices[endBin], startIndex);
|
|
81
|
+
|
|
82
|
+
arr[0] = startIndex;
|
|
83
|
+
arr[1] = endIndex;
|
|
84
|
+
return arr;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
for (let i = startVertexIndex; i < endVertexIndex; ) {
|
|
88
|
+
const runStart = i;
|
|
89
|
+
const runX = readStart(i);
|
|
90
|
+
const runX2 = readEnd(i);
|
|
91
|
+
|
|
92
|
+
i += 1;
|
|
93
|
+
while (
|
|
94
|
+
i < endVertexIndex &&
|
|
95
|
+
readStart(i) === runX &&
|
|
96
|
+
readEnd(i) === runX2
|
|
97
|
+
) {
|
|
98
|
+
i += 1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (runStart > lastIndex) {
|
|
102
|
+
lastIndex = runStart;
|
|
103
|
+
} else {
|
|
104
|
+
unordered = true;
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (runX < lastStart || runX2 < runX) {
|
|
109
|
+
unordered = true;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
lastStart = runX;
|
|
113
|
+
|
|
114
|
+
const startBin = getBin(runX, false);
|
|
115
|
+
const endBin = getBin(runX2, true);
|
|
116
|
+
|
|
117
|
+
for (let bin = startBin; bin <= endBin; bin++) {
|
|
118
|
+
if (startIndices[bin] > runStart) {
|
|
119
|
+
startIndices[bin] = runStart;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (endIndices[bin] < i) {
|
|
123
|
+
endIndices[bin] = i;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (unordered) {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
for (let i = 1; i < endIndices.length; i++) {
|
|
133
|
+
if (endIndices[i] < endIndices[i - 1]) {
|
|
134
|
+
endIndices[i] = endIndices[i - 1];
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
let tail = true;
|
|
139
|
+
|
|
140
|
+
for (let i = startIndices.length - 1; i > 0; i--) {
|
|
141
|
+
if (tail && startIndices[i] == MAX_INTEGER) {
|
|
142
|
+
startIndices[i] = endIndices[i];
|
|
143
|
+
tail = false;
|
|
144
|
+
} else if (startIndices[i - 1] > startIndices[i]) {
|
|
145
|
+
startIndices[i - 1] = startIndices[i];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return lookup;
|
|
150
|
+
}
|
|
@@ -40,11 +40,12 @@ export default class WebGLHelper {
|
|
|
40
40
|
* A function that returns the content size. If a dimension is undefined,
|
|
41
41
|
* the canvas fills the container, otherwise the canvas is adjusted to the content size.
|
|
42
42
|
* @param {WebGLContextAttributes} [webglContextAttributes]
|
|
43
|
+
* @param {() => void} [onCanvasResize]
|
|
43
44
|
*/
|
|
44
45
|
constructor(container: HTMLElement, sizeSource?: () => {
|
|
45
46
|
width: number;
|
|
46
47
|
height: number;
|
|
47
|
-
}, webglContextAttributes?: WebGLContextAttributes);
|
|
48
|
+
}, webglContextAttributes?: WebGLContextAttributes, onCanvasResize?: () => void);
|
|
48
49
|
/**
|
|
49
50
|
* @type {CanvasSizeHelper}
|
|
50
51
|
*/
|
|
@@ -58,6 +59,8 @@ export default class WebGLHelper {
|
|
|
58
59
|
physicalWidth: number;
|
|
59
60
|
physicalHeight: number;
|
|
60
61
|
} | undefined;
|
|
62
|
+
/** @type {() => void} */
|
|
63
|
+
_onCanvasResize: () => void;
|
|
61
64
|
/** @type {Map<string, WebGLShader>} */
|
|
62
65
|
_shaderCache: Map<string, WebGLShader>;
|
|
63
66
|
/** @type {WeakMap<import("../types/encoder.js").VegaScale, WebGLTexture>} */
|
|
@@ -79,7 +82,7 @@ export default class WebGLHelper {
|
|
|
79
82
|
* @param {string | string[]} glsl
|
|
80
83
|
*/
|
|
81
84
|
compileShader(type: number, glsl: string | string[]): WebGLShader;
|
|
82
|
-
adjustGl():
|
|
85
|
+
adjustGl(): boolean;
|
|
83
86
|
finalize(): void;
|
|
84
87
|
/**
|
|
85
88
|
* Returns the canvas size in true display pixels
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webGLHelper.d.ts","sourceRoot":"","sources":["../../../src/gl/webGLHelper.js"],"names":[],"mappings":"AA0cA;;;;GAIG;AACH,kCAJW,sBAAsB,gBACtB,WAAW,kBACX,WAAW;;;;;;EA8CrB;AAED;;;;;GAKG;AACH,0CALW,qBAAqB,WACrB,IAAI,CAAC,OAAO,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,OAC7C,MAAM,EAAE,GAAG,eAAe,YAC1B,YAAY,gBAYtB;AAED;;;;;;GAMG;AACH,qCALW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,KACjC,MAAM,KACN,MAAM,2BAWhB;AAED;;;;;GAKG;AACH,yCAJW,sBAAsB,mBACtB,OAAO,SAAS,EAAE,eAAe,SACjC,MAAM,UA4BhB;AA9hBD;IACI;;;;;;;;OAQG;IACH,uBAPW,WAAW,eACX,MAAM;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,2BAGrC,sBAAsB,mBACtB,MAAM,IAAI,EAoHpB;IArGG;;OAEG;IACH,mBAFU,gBAAgB,CAEQ;IAElC;;OAEG;IACH,oBAFU;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAEjF;IAEnC,yBAAyB;IACzB,iBADW,MAAM,IAAI,CAC8B;IAEnD,uCAAuC;IACvC,cADW,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CACN;IAE7B,6EAA6E;IAC7E,eADW,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,EAAE,YAAY,CAAC,CACvC;IAElC;;OAEG;IACH,mBAFU,OAAO,CAAC,OAAO,4BAA4B,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAEnD;IA8CtC,0BAAoB;IACpB,2BAAY;IAGZ,oDAAoD;IACpD,2BADW,OAAO,SAAS,EAAE,iBAAiB,EAAE,CAQ/C;IACD,sDAGC;IAmBL,uBAGC;IAED;;;;;OAKG;IACH,oBAHW,MAAM,QACN,MAAM,GAAG,MAAM,EAAE,eA2B3B;IAED,oBAkCC;IAED,iBAGC;IAED;;;;OAIG;IACH,oCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;;;MAI3C;IAED;;;;OAIG;IACH,kCAFW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,UAI3C;IAED;;;OAGG;IACH;;;MAEC;IAED;;;;;;;;;OASG;IACH,+BAHW,OAAO,8BAA8B,EAAE,OAAO,WAC9C,OAAO,QA2GjB;IAED;;OAEG;IACH,kCAFW,OAAO,4BAA4B,EAAE,mBAAmB,0BAwClE;CACJ;6BAxY4B,uBAAuB"}
|
|
@@ -41,8 +41,14 @@ export default class WebGLHelper {
|
|
|
41
41
|
* A function that returns the content size. If a dimension is undefined,
|
|
42
42
|
* the canvas fills the container, otherwise the canvas is adjusted to the content size.
|
|
43
43
|
* @param {WebGLContextAttributes} [webglContextAttributes]
|
|
44
|
+
* @param {() => void} [onCanvasResize]
|
|
44
45
|
*/
|
|
45
|
-
constructor(
|
|
46
|
+
constructor(
|
|
47
|
+
container,
|
|
48
|
+
sizeSource,
|
|
49
|
+
webglContextAttributes = {},
|
|
50
|
+
onCanvasResize
|
|
51
|
+
) {
|
|
46
52
|
const resolvedSizeSource =
|
|
47
53
|
sizeSource ??
|
|
48
54
|
(() => ({
|
|
@@ -60,6 +66,9 @@ export default class WebGLHelper {
|
|
|
60
66
|
*/
|
|
61
67
|
this._appliedCanvasSize = undefined;
|
|
62
68
|
|
|
69
|
+
/** @type {() => void} */
|
|
70
|
+
this._onCanvasResize = onCanvasResize ?? (() => {});
|
|
71
|
+
|
|
63
72
|
/** @type {Map<string, WebGLShader>} */
|
|
64
73
|
this._shaderCache = new Map();
|
|
65
74
|
|
|
@@ -138,7 +147,13 @@ export default class WebGLHelper {
|
|
|
138
147
|
container,
|
|
139
148
|
canvas,
|
|
140
149
|
resolvedSizeSource,
|
|
141
|
-
() =>
|
|
150
|
+
() => {
|
|
151
|
+
// Assigning canvas.width/height clears the WebGL drawing buffer.
|
|
152
|
+
// The observer may fire after layout/render, so repaint immediately.
|
|
153
|
+
if (this.adjustGl()) {
|
|
154
|
+
this._onCanvasResize();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
142
157
|
);
|
|
143
158
|
|
|
144
159
|
this.adjustGl();
|
|
@@ -193,7 +208,7 @@ export default class WebGLHelper {
|
|
|
193
208
|
this._appliedCanvasSize.physicalWidth == physicalSize.width &&
|
|
194
209
|
this._appliedCanvasSize.physicalHeight == physicalSize.height
|
|
195
210
|
) {
|
|
196
|
-
return;
|
|
211
|
+
return false;
|
|
197
212
|
}
|
|
198
213
|
|
|
199
214
|
this.canvas.style.width = `${logicalSize.width}px`;
|
|
@@ -214,6 +229,8 @@ export default class WebGLHelper {
|
|
|
214
229
|
physicalWidth: physicalSize.width,
|
|
215
230
|
physicalHeight: physicalSize.height,
|
|
216
231
|
};
|
|
232
|
+
|
|
233
|
+
return true;
|
|
217
234
|
}
|
|
218
235
|
|
|
219
236
|
finalize() {
|