fix(frontend): add null checks to PixelBlast renderer initialization

- Add renderer null check in setSize function to prevent errors during initialization
- Add renderer validation before composer.setSize call to ensure renderer exists
- Add null check in mapToPixels function to return safe default values when renderer is unavailable
- Add renderer existence check before calling renderer.render in animation loop
- Improve robustness of Three.js renderer lifecycle management to prevent runtime errors
This commit is contained in:
yyhuni
2026-01-20 08:02:01 +08:00
parent b2cc83f569
commit 487f7c84b5

View File

@@ -510,6 +510,7 @@ const PixelBlast = ({
scene.add(quad);
const clock = new THREE.Clock();
const setSize = () => {
if (!renderer) return;
const w = (container as HTMLDivElement).clientWidth || 1;
const h = (container as HTMLDivElement).clientHeight || 1;
renderer.setSize(w, h, false);
@@ -567,8 +568,9 @@ const PixelBlast = ({
if (composer && composer.passes.length > 0) composer.passes.forEach(p => (p.renderToScreen = false));
composer.addPass(noisePass);
}
if (composer) composer.setSize(renderer.domElement.width, renderer.domElement.height);
if (composer && renderer) composer.setSize(renderer.domElement.width, renderer.domElement.height);
const mapToPixels = (e: MouseEvent | PointerEvent) => {
if (!renderer) return { fx: 0, fy: 0, w: 0, h: 0 };
const rect = renderer.domElement.getBoundingClientRect();
const scaleX = renderer.domElement.width / rect.width;
const scaleY = renderer.domElement.height / rect.height;
@@ -636,7 +638,7 @@ const PixelBlast = ({
});
});
composer.render();
} else renderer.render(scene, camera);
} else if (renderer) renderer.render(scene, camera);
if (!firstFrameFiredRef.current) {
firstFrameFiredRef.current = true;