@mui/x-charts-premium 9.0.4 → 9.2.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/BarChartPremium/BarChartPremium.d.mts +4 -1
- package/BarChartPremium/BarChartPremium.d.ts +4 -1
- package/BarChartPremium/BarChartPremium.js +23 -1191
- package/BarChartPremium/BarChartPremium.mjs +24 -1192
- package/BarChartPremium/BarPlotPremium.d.mts +37 -0
- package/BarChartPremium/BarPlotPremium.d.ts +37 -0
- package/BarChartPremium/BarPlotPremium.js +78 -0
- package/BarChartPremium/BarPlotPremium.mjs +72 -0
- package/BarChartPremium/RangeBar/seriesConfig/seriesProcessor.js +2 -0
- package/BarChartPremium/RangeBar/seriesConfig/seriesProcessor.mjs +2 -0
- package/BarChartPremium/RangeBar/useUtilityClasses.d.mts +1 -1
- package/BarChartPremium/RangeBar/useUtilityClasses.d.ts +1 -1
- package/BarChartPremium/index.d.mts +1 -0
- package/BarChartPremium/index.d.ts +1 -0
- package/BarChartPremium/index.js +12 -0
- package/BarChartPremium/index.mjs +1 -0
- package/BarChartPremium/useBarChartPremiumProps.d.mts +2 -1
- package/BarChartPremium/useBarChartPremiumProps.d.ts +2 -1
- package/BarChartPremium/useBarChartPremiumProps.js +39 -5
- package/BarChartPremium/useBarChartPremiumProps.mjs +39 -5
- package/BarChartPremium/webgl/BarWebGLPlot.d.mts +10 -0
- package/BarChartPremium/webgl/BarWebGLPlot.d.ts +10 -0
- package/BarChartPremium/webgl/BarWebGLPlot.js +81 -0
- package/BarChartPremium/webgl/BarWebGLPlot.mjs +75 -0
- package/BarChartPremium/webgl/BarWebGLProgram.d.mts +19 -0
- package/BarChartPremium/webgl/BarWebGLProgram.d.ts +19 -0
- package/BarChartPremium/webgl/BarWebGLProgram.js +107 -0
- package/BarChartPremium/webgl/BarWebGLProgram.mjs +100 -0
- package/BarChartPremium/webgl/shaders.d.mts +2 -0
- package/BarChartPremium/webgl/shaders.d.ts +2 -0
- package/BarChartPremium/webgl/shaders.js +69 -0
- package/BarChartPremium/webgl/shaders.mjs +63 -0
- package/BarChartPremium/webgl/useBarWebGLPlotData.d.mts +10 -0
- package/BarChartPremium/webgl/useBarWebGLPlotData.d.ts +10 -0
- package/BarChartPremium/webgl/useBarWebGLPlotData.js +160 -0
- package/BarChartPremium/webgl/useBarWebGLPlotData.mjs +154 -0
- package/CHANGELOG.md +236 -0
- package/CandlestickChart/CandlestickChart.d.mts +2 -2
- package/CandlestickChart/CandlestickChart.d.ts +2 -2
- package/CandlestickChart/CandlestickChart.js +2 -1183
- package/CandlestickChart/CandlestickChart.mjs +2 -1183
- package/CandlestickChart/CandlestickWebGLProgram.d.mts +6 -11
- package/CandlestickChart/CandlestickWebGLProgram.d.ts +6 -11
- package/CandlestickChart/CandlestickWebGLProgram.js +136 -121
- package/CandlestickChart/CandlestickWebGLProgram.mjs +137 -122
- package/CandlestickChart/useCandlestickPlotData.d.mts +2 -2
- package/CandlestickChart/useCandlestickPlotData.d.ts +2 -2
- package/CandlestickChart/useCandlestickPlotData.js +121 -61
- package/CandlestickChart/useCandlestickPlotData.mjs +122 -61
- package/ChartsAxisHighlightValue/index.d.mts +1 -0
- package/ChartsAxisHighlightValue/index.d.ts +1 -0
- package/ChartsAxisHighlightValue/index.js +16 -0
- package/ChartsAxisHighlightValue/index.mjs +2 -0
- package/ChartsDataProviderPremium/ChartsDataProviderPremium.js +2 -2
- package/ChartsDataProviderPremium/ChartsDataProviderPremium.mjs +2 -2
- package/ChartsRadialAxisHighlight/index.d.mts +1 -0
- package/ChartsRadialAxisHighlight/index.d.ts +1 -0
- package/ChartsRadialAxisHighlight/index.js +16 -0
- package/ChartsRadialAxisHighlight/index.mjs +2 -0
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.js +9 -3
- package/ChartsRadialDataProviderPremium/ChartsRadialDataProviderPremium.mjs +9 -3
- package/HeatmapPremium/HeatmapPremium.js +2 -155
- package/HeatmapPremium/HeatmapPremium.mjs +2 -155
- package/HeatmapPremium/webgl/HeatmapWebGLPlot.js +19 -112
- package/HeatmapPremium/webgl/HeatmapWebGLPlot.mjs +19 -111
- package/HeatmapPremium/webgl/HeatmapWebGLProgram.d.mts +24 -0
- package/HeatmapPremium/webgl/HeatmapWebGLProgram.d.ts +24 -0
- package/HeatmapPremium/webgl/HeatmapWebGLProgram.js +132 -0
- package/HeatmapPremium/webgl/HeatmapWebGLProgram.mjs +125 -0
- package/HeatmapPremium/webgl/useHeatmapPlotData.d.mts +3 -3
- package/HeatmapPremium/webgl/useHeatmapPlotData.d.ts +3 -3
- package/HeatmapPremium/webgl/useHeatmapPlotData.js +78 -26
- package/HeatmapPremium/webgl/useHeatmapPlotData.mjs +80 -26
- package/LICENSE +3 -1
- package/RadialBarChart/RadialBarChart.d.mts +67 -0
- package/RadialBarChart/RadialBarChart.d.ts +67 -0
- package/RadialBarChart/RadialBarChart.js +311 -0
- package/RadialBarChart/RadialBarChart.mjs +305 -0
- package/RadialBarChart/RadialBarChart.plugins.d.mts +4 -0
- package/RadialBarChart/RadialBarChart.plugins.d.ts +4 -0
- package/RadialBarChart/RadialBarChart.plugins.js +9 -0
- package/RadialBarChart/RadialBarChart.plugins.mjs +3 -0
- package/RadialBarChart/RadialBarElement.d.mts +16 -0
- package/RadialBarChart/RadialBarElement.d.ts +16 -0
- package/RadialBarChart/RadialBarElement.js +68 -0
- package/RadialBarChart/RadialBarElement.mjs +62 -0
- package/RadialBarChart/RadialBarPlot.d.mts +21 -0
- package/RadialBarChart/RadialBarPlot.d.ts +21 -0
- package/RadialBarChart/RadialBarPlot.js +85 -0
- package/RadialBarChart/RadialBarPlot.mjs +79 -0
- package/RadialBarChart/index.d.mts +3 -0
- package/RadialBarChart/index.d.ts +3 -0
- package/RadialBarChart/index.js +39 -0
- package/RadialBarChart/index.mjs +3 -0
- package/RadialBarChart/radialBarClasses.d.mts +15 -0
- package/RadialBarChart/radialBarClasses.d.ts +15 -0
- package/RadialBarChart/radialBarClasses.js +26 -0
- package/RadialBarChart/radialBarClasses.mjs +18 -0
- package/RadialBarChart/seriesConfig/axisTooltipGetter.js +5 -2
- package/RadialBarChart/seriesConfig/axisTooltipGetter.mjs +5 -2
- package/RadialBarChart/seriesConfig/getItemAtPosition.d.mts +6 -0
- package/RadialBarChart/seriesConfig/getItemAtPosition.d.ts +6 -0
- package/RadialBarChart/seriesConfig/getItemAtPosition.js +69 -0
- package/RadialBarChart/seriesConfig/getItemAtPosition.mjs +63 -0
- package/RadialBarChart/seriesConfig/index.js +2 -1
- package/RadialBarChart/seriesConfig/index.mjs +2 -1
- package/RadialBarChart/seriesConfig/seriesProcessor.js +4 -0
- package/RadialBarChart/seriesConfig/seriesProcessor.mjs +4 -0
- package/RadialBarChart/useRadialBarChartProps.d.mts +30 -0
- package/RadialBarChart/useRadialBarChartProps.d.ts +30 -0
- package/RadialBarChart/useRadialBarChartProps.js +108 -0
- package/RadialBarChart/useRadialBarChartProps.mjs +101 -0
- package/RadialBarChart/useRadialBarPlotData.d.mts +23 -0
- package/RadialBarChart/useRadialBarPlotData.d.ts +23 -0
- package/RadialBarChart/useRadialBarPlotData.js +94 -0
- package/RadialBarChart/useRadialBarPlotData.mjs +87 -0
- package/RadialLineChart/RadialArea.js +13 -1
- package/RadialLineChart/RadialArea.mjs +13 -1
- package/RadialLineChart/RadialLine.js +13 -1
- package/RadialLineChart/RadialLine.mjs +13 -1
- package/RadialLineChart/RadialLineChart.d.mts +11 -3
- package/RadialLineChart/RadialLineChart.d.ts +11 -3
- package/RadialLineChart/RadialLineChart.js +26 -673
- package/RadialLineChart/RadialLineChart.mjs +26 -673
- package/RadialLineChart/RadialLineChart.plugins.d.mts +1 -1
- package/RadialLineChart/RadialLineChart.plugins.d.ts +1 -1
- package/RadialLineChart/RadialLineChart.plugins.js +1 -1
- package/RadialLineChart/RadialLineChart.plugins.mjs +1 -1
- package/RadialLineChart/RadialLineHighlightElement.d.mts +15 -0
- package/RadialLineChart/RadialLineHighlightElement.d.ts +15 -0
- package/RadialLineChart/RadialLineHighlightElement.js +46 -0
- package/RadialLineChart/RadialLineHighlightElement.mjs +39 -0
- package/RadialLineChart/RadialLineHighlightPlot.d.mts +23 -0
- package/RadialLineChart/RadialLineHighlightPlot.d.ts +23 -0
- package/RadialLineChart/RadialLineHighlightPlot.js +92 -0
- package/RadialLineChart/RadialLineHighlightPlot.mjs +86 -0
- package/RadialLineChart/RadialMarkPlot.js +17 -2
- package/RadialLineChart/RadialMarkPlot.mjs +17 -2
- package/RadialLineChart/index.d.mts +3 -1
- package/RadialLineChart/index.d.ts +3 -1
- package/RadialLineChart/index.js +22 -0
- package/RadialLineChart/index.mjs +3 -1
- package/RadialLineChart/radialLineClasses.d.mts +3 -1
- package/RadialLineChart/radialLineClasses.d.ts +3 -1
- package/RadialLineChart/radialLineClasses.js +2 -1
- package/RadialLineChart/radialLineClasses.mjs +2 -1
- package/RadialLineChart/seriesConfig/getItemAtPosition.d.mts +6 -0
- package/RadialLineChart/seriesConfig/getItemAtPosition.d.ts +6 -0
- package/RadialLineChart/seriesConfig/getItemAtPosition.js +353 -0
- package/RadialLineChart/seriesConfig/getItemAtPosition.mjs +348 -0
- package/RadialLineChart/seriesConfig/getSeriesWithDefaultValues.js +2 -1
- package/RadialLineChart/seriesConfig/getSeriesWithDefaultValues.mjs +2 -1
- package/RadialLineChart/seriesConfig/index.js +2 -1
- package/RadialLineChart/seriesConfig/index.mjs +2 -1
- package/RadialLineChart/seriesConfig/seriesProcessor.js +4 -0
- package/RadialLineChart/seriesConfig/seriesProcessor.mjs +4 -0
- package/RadialLineChart/useRadialLineChartProps.d.mts +2 -0
- package/RadialLineChart/useRadialLineChartProps.d.ts +2 -0
- package/RadialLineChart/useRadialLineChartProps.js +16 -8
- package/RadialLineChart/useRadialLineChartProps.mjs +16 -8
- package/RadialLineChart/useRadialLinePlotData.js +2 -1
- package/RadialLineChart/useRadialLinePlotData.mjs +3 -2
- package/ScatterChartPremium/ScatterChartPremium.d.mts +25 -0
- package/ScatterChartPremium/ScatterChartPremium.d.ts +25 -0
- package/ScatterChartPremium/ScatterChartPremium.js +507 -0
- package/ScatterChartPremium/ScatterChartPremium.mjs +501 -0
- package/ScatterChartPremium/ScatterChartPremium.plugins.d.mts +3 -0
- package/ScatterChartPremium/ScatterChartPremium.plugins.d.ts +3 -0
- package/ScatterChartPremium/ScatterChartPremium.plugins.js +8 -0
- package/ScatterChartPremium/ScatterChartPremium.plugins.mjs +2 -0
- package/ScatterChartPremium/ScatterPlotPremium.d.mts +14 -0
- package/ScatterChartPremium/ScatterPlotPremium.d.ts +14 -0
- package/ScatterChartPremium/ScatterPlotPremium.js +28 -0
- package/ScatterChartPremium/ScatterPlotPremium.mjs +21 -0
- package/ScatterChartPremium/index.d.mts +3 -0
- package/ScatterChartPremium/index.d.ts +3 -0
- package/ScatterChartPremium/index.js +26 -0
- package/ScatterChartPremium/index.mjs +3 -0
- package/ScatterChartPremium/webgl/ScatterWebGLPlot.d.mts +4 -0
- package/ScatterChartPremium/webgl/ScatterWebGLPlot.d.ts +4 -0
- package/ScatterChartPremium/webgl/ScatterWebGLPlot.js +70 -0
- package/ScatterChartPremium/webgl/ScatterWebGLPlot.mjs +65 -0
- package/ScatterChartPremium/webgl/ScatterWebGLProgram.d.mts +18 -0
- package/ScatterChartPremium/webgl/ScatterWebGLProgram.d.ts +18 -0
- package/ScatterChartPremium/webgl/ScatterWebGLProgram.js +129 -0
- package/ScatterChartPremium/webgl/ScatterWebGLProgram.mjs +122 -0
- package/ScatterChartPremium/webgl/shaders.d.mts +2 -0
- package/ScatterChartPremium/webgl/shaders.d.ts +2 -0
- package/ScatterChartPremium/webgl/shaders.js +57 -0
- package/ScatterChartPremium/webgl/shaders.mjs +51 -0
- package/ScatterChartPremium/webgl/useScatterWebGLPlotData.d.mts +7 -0
- package/ScatterChartPremium/webgl/useScatterWebGLPlotData.d.ts +7 -0
- package/ScatterChartPremium/webgl/useScatterWebGLPlotData.js +140 -0
- package/ScatterChartPremium/webgl/useScatterWebGLPlotData.mjs +134 -0
- package/index.d.mts +3 -1
- package/index.d.ts +3 -1
- package/index.js +25 -1
- package/index.mjs +4 -2
- package/internals/index.d.mts +1 -0
- package/internals/index.d.ts +1 -0
- package/internals/index.js +13 -0
- package/internals/index.mjs +1 -0
- package/models/seriesType/radialLine.d.mts +7 -1
- package/models/seriesType/radialLine.d.ts +7 -1
- package/package.json +76 -6
- package/plugins/selectors/useChartCandlestickPosition.selectors.d.mts +1 -1
- package/plugins/selectors/useChartCandlestickPosition.selectors.d.ts +1 -1
- package/utils/webgl/parseColor.d.mts +2 -1
- package/utils/webgl/parseColor.d.ts +2 -1
- package/utils/webgl/parseColor.js +8 -7
- package/utils/webgl/parseColor.mjs +8 -7
- package/utils/webgl/utils.d.mts +13 -0
- package/utils/webgl/utils.d.ts +13 -0
- package/utils/webgl/utils.js +29 -0
- package/utils/webgl/utils.mjs +27 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
const colorCache = new Map();
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Parse color string to RGBA
|
|
4
|
+
* Parse color string to RGBA tuple. Each channel is in [0, 255], matching the byte
|
|
5
|
+
* representation we upload to GPU color buffers.
|
|
5
6
|
* This function does not work in SSR.
|
|
6
7
|
*/
|
|
7
8
|
export function parseColor(color) {
|
|
@@ -32,10 +33,10 @@ function parseColorUsingRegex(color) {
|
|
|
32
33
|
if (color.length === 3) {
|
|
33
34
|
color = color.split('').map(char => char + char).join('');
|
|
34
35
|
}
|
|
35
|
-
const r = parseInt(color.slice(0, 2), 16)
|
|
36
|
-
const g = parseInt(color.slice(2, 4), 16)
|
|
37
|
-
const b = parseInt(color.slice(4, 6), 16)
|
|
38
|
-
const a = color.length === 8 ? parseInt(color.substring(6, 8), 16)
|
|
36
|
+
const r = parseInt(color.slice(0, 2), 16);
|
|
37
|
+
const g = parseInt(color.slice(2, 4), 16);
|
|
38
|
+
const b = parseInt(color.slice(4, 6), 16);
|
|
39
|
+
const a = color.length === 8 ? parseInt(color.substring(6, 8), 16) : 255;
|
|
39
40
|
return [r, g, b, a];
|
|
40
41
|
}
|
|
41
42
|
|
|
@@ -56,7 +57,7 @@ function parseRgbaColor(color) {
|
|
|
56
57
|
if (a < 0 || a > 1) {
|
|
57
58
|
return null;
|
|
58
59
|
}
|
|
59
|
-
return [r
|
|
60
|
+
return [r, g, b, a * 255];
|
|
60
61
|
}
|
|
61
62
|
let canvas;
|
|
62
63
|
function parseColorUsingCanvas(color) {
|
|
@@ -73,6 +74,6 @@ function parseColorUsingCanvas(color) {
|
|
|
73
74
|
ctx.fillStyle = color;
|
|
74
75
|
ctx.fillRect(0, 0, 1, 1);
|
|
75
76
|
const [r, g, b, a] = ctx.getImageData(0, 0, 1, 1).data;
|
|
76
|
-
const result = [r
|
|
77
|
+
const result = [r, g, b, a];
|
|
77
78
|
return result;
|
|
78
79
|
}
|
package/utils/webgl/utils.d.mts
CHANGED
|
@@ -2,6 +2,19 @@ export declare function compileShader(gl: WebGL2RenderingContext, shaderSource:
|
|
|
2
2
|
export declare function uploadQuadBuffer(gl: WebGL2RenderingContext): WebGLBuffer;
|
|
3
3
|
export declare function bindQuadBuffer(gl: WebGL2RenderingContext, program: WebGLProgram, quadBuffer: WebGLBuffer): void;
|
|
4
4
|
export declare function attachShader(gl: WebGL2RenderingContext, program: WebGLProgram, shaderSource: string, shaderType: WebGL2RenderingContext['FRAGMENT_SHADER'] | WebGL2RenderingContext['VERTEX_SHADER']): WebGLShader;
|
|
5
|
+
export type GrowableBuffer = {
|
|
6
|
+
buffer: WebGLBuffer;
|
|
7
|
+
capacity: number;
|
|
8
|
+
lastUploaded: ArrayBufferView | null;
|
|
9
|
+
};
|
|
10
|
+
export declare function createGrowableBuffer(gl: WebGL2RenderingContext): GrowableBuffer;
|
|
11
|
+
/**
|
|
12
|
+
* Uploads `data` into `target.buffer`. Reuses the existing GPU allocation via
|
|
13
|
+
* `bufferSubData` while the size fits, only re-allocating with `bufferData` when
|
|
14
|
+
* the data grows past the previous high-water mark. Skips the upload entirely
|
|
15
|
+
* when the same typed-array reference is passed twice in a row.
|
|
16
|
+
*/
|
|
17
|
+
export declare function uploadGrowableBuffer(gl: WebGL2RenderingContext, target: GrowableBuffer, data: ArrayBufferView): void;
|
|
5
18
|
/**
|
|
6
19
|
* Logs WebGL errors to the console in development mode.
|
|
7
20
|
*/
|
package/utils/webgl/utils.d.ts
CHANGED
|
@@ -2,6 +2,19 @@ export declare function compileShader(gl: WebGL2RenderingContext, shaderSource:
|
|
|
2
2
|
export declare function uploadQuadBuffer(gl: WebGL2RenderingContext): WebGLBuffer;
|
|
3
3
|
export declare function bindQuadBuffer(gl: WebGL2RenderingContext, program: WebGLProgram, quadBuffer: WebGLBuffer): void;
|
|
4
4
|
export declare function attachShader(gl: WebGL2RenderingContext, program: WebGLProgram, shaderSource: string, shaderType: WebGL2RenderingContext['FRAGMENT_SHADER'] | WebGL2RenderingContext['VERTEX_SHADER']): WebGLShader;
|
|
5
|
+
export type GrowableBuffer = {
|
|
6
|
+
buffer: WebGLBuffer;
|
|
7
|
+
capacity: number;
|
|
8
|
+
lastUploaded: ArrayBufferView | null;
|
|
9
|
+
};
|
|
10
|
+
export declare function createGrowableBuffer(gl: WebGL2RenderingContext): GrowableBuffer;
|
|
11
|
+
/**
|
|
12
|
+
* Uploads `data` into `target.buffer`. Reuses the existing GPU allocation via
|
|
13
|
+
* `bufferSubData` while the size fits, only re-allocating with `bufferData` when
|
|
14
|
+
* the data grows past the previous high-water mark. Skips the upload entirely
|
|
15
|
+
* when the same typed-array reference is passed twice in a row.
|
|
16
|
+
*/
|
|
17
|
+
export declare function uploadGrowableBuffer(gl: WebGL2RenderingContext, target: GrowableBuffer, data: ArrayBufferView): void;
|
|
5
18
|
/**
|
|
6
19
|
* Logs WebGL errors to the console in development mode.
|
|
7
20
|
*/
|
package/utils/webgl/utils.js
CHANGED
|
@@ -6,7 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.attachShader = attachShader;
|
|
7
7
|
exports.bindQuadBuffer = bindQuadBuffer;
|
|
8
8
|
exports.compileShader = compileShader;
|
|
9
|
+
exports.createGrowableBuffer = createGrowableBuffer;
|
|
9
10
|
exports.logWebGLErrors = logWebGLErrors;
|
|
11
|
+
exports.uploadGrowableBuffer = uploadGrowableBuffer;
|
|
10
12
|
exports.uploadQuadBuffer = uploadQuadBuffer;
|
|
11
13
|
function compileShader(gl, shaderSource, shaderType) {
|
|
12
14
|
const shader = gl.createShader(shaderType);
|
|
@@ -34,6 +36,33 @@ function attachShader(gl, program, shaderSource, shaderType) {
|
|
|
34
36
|
gl.attachShader(program, shader);
|
|
35
37
|
return shader;
|
|
36
38
|
}
|
|
39
|
+
function createGrowableBuffer(gl) {
|
|
40
|
+
return {
|
|
41
|
+
buffer: gl.createBuffer(),
|
|
42
|
+
capacity: 0,
|
|
43
|
+
lastUploaded: null
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Uploads `data` into `target.buffer`. Reuses the existing GPU allocation via
|
|
49
|
+
* `bufferSubData` while the size fits, only re-allocating with `bufferData` when
|
|
50
|
+
* the data grows past the previous high-water mark. Skips the upload entirely
|
|
51
|
+
* when the same typed-array reference is passed twice in a row.
|
|
52
|
+
*/
|
|
53
|
+
function uploadGrowableBuffer(gl, target, data) {
|
|
54
|
+
if (target.lastUploaded === data) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, target.buffer);
|
|
58
|
+
if (data.byteLength <= target.capacity) {
|
|
59
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, data);
|
|
60
|
+
} else {
|
|
61
|
+
gl.bufferData(gl.ARRAY_BUFFER, data, gl.DYNAMIC_DRAW);
|
|
62
|
+
target.capacity = data.byteLength;
|
|
63
|
+
}
|
|
64
|
+
target.lastUploaded = data;
|
|
65
|
+
}
|
|
37
66
|
|
|
38
67
|
/**
|
|
39
68
|
* Logs WebGL errors to the console in development mode.
|
package/utils/webgl/utils.mjs
CHANGED
|
@@ -24,6 +24,33 @@ export function attachShader(gl, program, shaderSource, shaderType) {
|
|
|
24
24
|
gl.attachShader(program, shader);
|
|
25
25
|
return shader;
|
|
26
26
|
}
|
|
27
|
+
export function createGrowableBuffer(gl) {
|
|
28
|
+
return {
|
|
29
|
+
buffer: gl.createBuffer(),
|
|
30
|
+
capacity: 0,
|
|
31
|
+
lastUploaded: null
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Uploads `data` into `target.buffer`. Reuses the existing GPU allocation via
|
|
37
|
+
* `bufferSubData` while the size fits, only re-allocating with `bufferData` when
|
|
38
|
+
* the data grows past the previous high-water mark. Skips the upload entirely
|
|
39
|
+
* when the same typed-array reference is passed twice in a row.
|
|
40
|
+
*/
|
|
41
|
+
export function uploadGrowableBuffer(gl, target, data) {
|
|
42
|
+
if (target.lastUploaded === data) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, target.buffer);
|
|
46
|
+
if (data.byteLength <= target.capacity) {
|
|
47
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, data);
|
|
48
|
+
} else {
|
|
49
|
+
gl.bufferData(gl.ARRAY_BUFFER, data, gl.DYNAMIC_DRAW);
|
|
50
|
+
target.capacity = data.byteLength;
|
|
51
|
+
}
|
|
52
|
+
target.lastUploaded = data;
|
|
53
|
+
}
|
|
27
54
|
|
|
28
55
|
/**
|
|
29
56
|
* Logs WebGL errors to the console in development mode.
|