Skip to content

fix: dispose renderer-owned geometry in SparkRenderer - #410

Draft
ArisLiWind wants to merge 1 commit into
sparkjsdev:mainfrom
ArisLiWind:codex/spark-dispose-geometry
Draft

fix: dispose renderer-owned geometry in SparkRenderer#410
ArisLiWind wants to merge 1 commit into
sparkjsdev:mainfrom
ArisLiWind:codex/spark-dispose-geometry

Conversation

@ArisLiWind

Copy link
Copy Markdown

Summary

Fixes a GPU resource leak in SparkRenderer.dispose() by releasing the renderer-owned SplatGeometry created in the constructor.

Root cause

SparkRenderer constructs its own SplatGeometry:

const geometry = new SplatGeometry();
super(geometry, material);

That geometry is owned by the renderer instance, but dispose() previously released render targets, textures, workers, accumulators, and pager state without disposing the geometry itself.

Because SplatGeometry allocates both a position attribute and an index buffer, each create/dispose lifecycle could leave two WebGL buffers behind.

Fix

Store the constructor-created geometry as renderer-owned state and dispose it during SparkRenderer.dispose().

Regression coverage

Added tests to verify that:

  • SparkRenderer.dispose() releases its internal geometry
  • disposing a renderer does not dispose geometry assigned from outside
  • dispose() is safe to call multiple times

Validation

  • npm test
  • npm run lint -- --reporter=summary

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant