Skip to content

Commit d66ebd8

Browse files
committed
feat: remove the need to use onCanvasReady
1 parent 372a98c commit d66ebd8

File tree

6 files changed

+37
-31
lines changed

6 files changed

+37
-31
lines changed

lib/playground/src/pages/gpgpu/boids (static).astro

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,19 @@ import Layout from "../../layouts/Layout.astro";
7676
positions.render();
7777
renderPass.render();
7878

79-
velocities.uniforms.uDeltaTime = 0.8;
80-
velocities.render();
81-
positions.uniforms.uDeltaTime = 0.8;
82-
positions.render();
83-
renderPass.render();
79+
requestAnimationFrame(() => {
80+
velocities.uniforms.uDeltaTime = 0.8;
81+
velocities.render();
82+
positions.uniforms.uDeltaTime = 0.8;
83+
positions.render();
84+
renderPass.render();
8485

85-
velocities.render();
86-
positions.render();
87-
renderPass.render();
86+
requestAnimationFrame(() => {
87+
velocities.render();
88+
positions.render();
89+
renderPass.render();
90+
});
91+
});
8892
});
8993
</script>
9094

lib/playground/src/pages/gpgpu/boids.astro

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,14 @@ import Layout from "../../layouts/Layout.astro";
7272

7373
renderPass.onAfterRender(incrementRenderCount);
7474

75-
renderPass.onCanvasReady(() => {
76-
useLoop(({ deltaTime }) => {
77-
velocities.uniforms.uDeltaTime = deltaTime / 500;
78-
velocities.render();
75+
useLoop(({ deltaTime }) => {
76+
velocities.uniforms.uDeltaTime = deltaTime / 500;
77+
velocities.render();
7978

80-
positions.uniforms.uDeltaTime = deltaTime / 500;
81-
positions.render();
79+
positions.uniforms.uDeltaTime = deltaTime / 500;
80+
positions.render();
8281

83-
renderPass.render();
84-
});
82+
renderPass.render();
8583
});
8684
</script>
8785

lib/playground/src/pages/gpgpu/particles - FBO (static).astro

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,11 @@ import Layout from "../../layouts/Layout.astro";
9090
positions.render();
9191
renderPass.render();
9292

93-
positions.uniforms.uDeltaTime = 1;
94-
positions.render();
95-
renderPass.render();
93+
requestAnimationFrame(() => {
94+
positions.uniforms.uDeltaTime = 1;
95+
positions.render();
96+
renderPass.render();
97+
});
9698
});
9799
</script>
98100

lib/playground/src/pages/gpgpu/particles - FBO.astro

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,10 @@ import Layout from "../../layouts/Layout.astro";
9393

9494
renderPass.onAfterRender(incrementRenderCount);
9595

96-
renderPass.onCanvasReady(() => {
97-
useLoop(({ deltaTime }) => {
98-
positions.uniforms.uDeltaTime = deltaTime / 500;
99-
positions.render();
100-
renderPass.render();
101-
});
96+
useLoop(({ deltaTime }) => {
97+
positions.uniforms.uDeltaTime = deltaTime / 500;
98+
positions.render();
99+
renderPass.render();
102100
});
103101
</script>
104102

lib/src/hooks/useWebGLCanvas.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,13 @@ export const useWebGLCanvas = <U extends Uniforms>(props: Props<U>) => {
4141
const renderPass = useQuadRenderPass(gl, props);
4242
const compositor = useCompositor(gl, renderPass, postEffects);
4343

44+
// don't render before the first resize of the canvas to avoid a glitch
45+
let isCanvasResized = false;
46+
4447
function render() {
45-
compositor.render();
48+
if (isCanvasResized) {
49+
compositor.render();
50+
}
4651
}
4752

4853
let requestedRender = false;
@@ -107,13 +112,12 @@ export const useWebGLCanvas = <U extends Uniforms>(props: Props<U>) => {
107112
let resizeObserver: ReturnType<typeof useResizeObserver> | null = null;
108113

109114
const [canvasReadyCallbacks, onCanvasReady] = useLifeCycleCallback();
110-
let isFirstResize = true;
111115

112116
function resizeCanvas(width: number, height: number) {
113117
setSize({ width: width * dpr, height: height * dpr });
114-
if (isFirstResize) {
118+
if (!isCanvasResized) {
115119
for (const callback of canvasReadyCallbacks) callback();
116-
isFirstResize = false;
120+
isCanvasResized = true;
117121
}
118122
}
119123

lib/tests/screenshots.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ const routesToTest = routes.filter(({ route }) => !ignoreRoutes.has(route));
99
const expectedRendersByDemo = {
1010
scissor: "2",
1111
video: "2",
12-
"particles - FBO (static)": "3",
13-
"boids (static)": "4",
12+
"particles - FBO (static)": "2",
13+
"boids (static)": "3",
1414
mipmap: /[1-3]/,
1515
texture: /1|2/,
1616
sepia: /1|2/,

0 commit comments

Comments
 (0)