threedim: PrimitiveCloud point-cloud / Gaussian-splat family (from #2109 stack) - #2123
Open
jcelerier wants to merge 5 commits into
Open
threedim: PrimitiveCloud point-cloud / Gaussian-splat family (from #2109 stack)#2123jcelerier wants to merge 5 commits into
jcelerier wants to merge 5 commits into
Conversation
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 17, 2026 03:29
2b22ce2 to
3f31f9d
Compare
jcelerier
force-pushed
the
planf/objects
branch
2 times, most recently
from
July 17, 2026 11:58
eb14ad5 to
899f99b
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 17, 2026 11:58
3f31f9d to
ebeb8f4
Compare
jcelerier
added a commit
that referenced
this pull request
Jul 17, 2026
… flush test_unit_threedim_loaders: AssetLoader/GltfParser/FbxParser/TinyObj/Ply/Vcg + the PrimitiveCloud parsers, compiled straight into the test (plugin is -fvisibility=hidden). test_unit_primitivecloud: PLY/.splat/.spz parsers + scene helpers. ObjectGallery: explicit llvm profile flush on _Exit + SEGV/ABRT so coverage runs of the render-regression harness still emit .profraw (atop this branch's render-regression mode). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 17, 2026 14:10
ebeb8f4 to
fc9ac65
Compare
jcelerier
added a commit
that referenced
this pull request
Jul 17, 2026
… flush test_unit_threedim_loaders: AssetLoader/GltfParser/FbxParser/TinyObj/Ply/Vcg + the PrimitiveCloud parsers, compiled straight into the test (plugin is -fvisibility=hidden). test_unit_primitivecloud: PLY/.splat/.spz parsers + scene helpers. ObjectGallery: explicit llvm profile flush on _Exit + SEGV/ABRT so coverage runs of the render-regression harness still emit .profraw (atop this branch's render-regression mode). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 17, 2026 14:29
fc9ac65 to
ec5deba
Compare
jcelerier
added a commit
that referenced
this pull request
Jul 17, 2026
… flush test_unit_threedim_loaders: AssetLoader/GltfParser/FbxParser/TinyObj/Ply/Vcg + the PrimitiveCloud parsers, compiled straight into the test (plugin is -fvisibility=hidden). test_unit_primitivecloud: PLY/.splat/.spz parsers + scene helpers. ObjectGallery: explicit llvm profile flush on _Exit + SEGV/ABRT so coverage runs of the render-regression harness still emit .profraw (atop this branch's render-regression mode). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
jcelerier
force-pushed
the
planf2/pointcloud
branch
2 times, most recently
from
July 18, 2026 13:37
7855239 to
ef58365
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 18, 2026 14:17
ef58365 to
da52f0e
Compare
jcelerier
force-pushed
the
planf/objects
branch
2 times, most recently
from
July 18, 2026 14:23
3d06f50 to
3fe10b1
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 18, 2026 14:23
da52f0e to
c067bbe
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
2 times, most recently
from
July 19, 2026 03:14
337c225 to
5c1950c
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 19, 2026 21:59
5c1950c to
f22647e
Compare
jcelerier
force-pushed
the
planf/objects
branch
2 times, most recently
from
July 20, 2026 23:09
df39bc1 to
c59c898
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 20, 2026 23:09
f22647e to
c19744e
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 21, 2026 04:55
c19744e to
2e67992
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 29, 2026 18:37
743986f to
238ab39
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 30, 2026 03:18
238ab39 to
d7e7c27
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 30, 2026 12:43
d7e7c27 to
23ae88d
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 30, 2026 13:27
23ae88d to
166176c
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 30, 2026 16:28
166176c to
1622950
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
July 31, 2026 00:17
1622950 to
7f26e63
Compare
jcelerier
force-pushed
the
planf/objects
branch
from
August 11, 2026 23:48
30d7f59 to
3049c13
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
August 11, 2026 23:48
7f26e63 to
ca9689f
Compare
jcelerier
force-pushed
the
planf/objects
branch
from
August 15, 2026 17:55
3049c13 to
bb54954
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
August 15, 2026 17:55
ca9689f to
f65e78d
Compare
jcelerier
force-pushed
the
planf/objects
branch
from
August 15, 2026 17:56
bb54954 to
77a993d
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
4 times, most recently
from
August 15, 2026 22:13
997b0ab to
5ed41fa
Compare
jcelerier
force-pushed
the
planf/objects
branch
2 times, most recently
from
August 15, 2026 22:20
29bae02 to
ddb1944
Compare
jcelerier
force-pushed
the
planf2/pointcloud
branch
from
August 15, 2026 22:20
5ed41fa to
997b0ab
Compare
jcelerier
force-pushed
the
planf/objects
branch
from
August 16, 2026 03:43
ddb1944 to
5aaaa91
Compare
Adds the point-cloud objects: a PLY parser, a .splat binary reader, an SPZ codec (compressed 3D Gaussian splats, via the new spz + zstd submodules), a scene-from-cloud node and a format override, plus the TagAs helper. The asset loader routes .ply/.splat/.spz through them. The existing Splat render node and Splat loader are kept alongside the new family rather than retired, so both remain available. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
ObjectGallery --render <name> : add one object, route its texture output to
an offscreen window, play, and exit 0 if it
rendered a full run without crashing (a
render-path crash kills the process, which
the driver attributes to that object).
render-sweep.sh [filter] : run --render for each object on BOTH GL
backends (llvmpipe and the machine's GPU via
X11) and tally crashes.
Texture objects (ISF, images, model display, ...) render clean on both
backends. Two follow-ups: geometry-only objects need a display chain (they
currently abort when run standalone), and the offscreen readback does not yet
composite the routed texture so the non-blank check is informational.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
ObjectGallery gains a --shader <file> mode: it loads a shader tester (.fs/.frag/.glsl as an ISF Shader, .cs/.comp/.csf as a Compute Shader) into a process, routes its texture output to an offscreen window and renders it, exiting non-zero if it fails to compile or crashes. csf-sweep.sh drives that over the csf-examples corpus on BOTH GL backends (llvmpipe and the machine's GPU via X11). On the csf-testers set, 100/121 shaders render on both backends; the remaining 21 are geometry-producing compute shaders that need a downstream raster stage to display (see the corpus's tests.txt) — chaining them is the next step. Also fixes the sweep drivers to pass per-backend env via `env`, since bash does not treat VAR=val from an expanded "$@" as assignments. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
test_unit_threedim_loaders: AssetLoader/GltfParser/FbxParser/TinyObj/Ply/Vcg + the PrimitiveCloud parsers, compiled straight into the test (plugin is -fvisibility=hidden). test_unit_primitivecloud: PLY/.splat/.spz parsers + scene helpers. ObjectGallery: explicit llvm profile flush on _Exit + SEGV/ABRT so coverage runs of the render-regression harness still emit .profraw (atop this branch's render-regression mode). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
Every allocation in the createRenderTarget family was a SCORE_ASSERT, so a backend declining a configuration -- an MSAA depth attachment it does not implement, a format it will not render to -- killed the process. That is the wrong failure for a runtime condition: a headless sweep dies on the first unsupported case instead of reporting it, and an interactive session loses the document. 37 asserts across the nine render-target functions now return an empty TextureRenderTarget, which operator bool() already reports as invalid, after releasing what that function allocated. `texture` is left alone in the overload that is handed one -- it belongs to the caller. SCORE_ASSERT(tex) stays: a null argument there is a broken caller, not a driver refusal. Returning an invalid target only moves the crash unless the callers cope, so the offscreen path is closed off too: buildPipeline returns an empty pipeline rather than asserting on the missing render pass, InvertYRenderer::init gives up when it has no target, and finishFrame skips the pass instead of handing a null target to beginPass. Measured on the case that used to abort (asset loader -> ModelDisplay -> Window, Qt 6.4): exit 133 with a core dump before, exit 0 now, with the reason in the log at each step. The 130-case corpus is unchanged: RENDER 89, BLANK 41, NORENDER 0, CRASH 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014rZgzE8JjWvHDtaVUhxpLE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The PrimitiveCloud point-cloud / Gaussian-splat family — the last piece of the 3D-object work, deferred from #2122 because its build wiring is more involved.
Stacked on #2122; retargets as the stack merges.
What it adds
.splatbinary reader, an SPZ codec for compressed 3D Gaussian splats (via newspz+zstdsubmodules), a scene-from-cloud node, and a format override.TagAshelper, and asset-loader routing for.ply/.splat/.spz.Kept, not retired (per the "keep both" decision)
The upstream 3D branch deletes the old
Splat/render node in favour of this family; here it is preserved — the Splat render node and Splat loader remain registered alongside PrimitiveCloud.Notes
The earlier deferral cited three blockers; two dissolved once built from the branch tip rather than an intermediate commit (the
Gfx::FormatRegistryreference is an empty-stub include at tip, unused), and thelibspz-fPIClink failure was from applying the zstd build wiring incompletely — the complete3rdparty/zstd.cmake+ redirect + spz stub build cleanly.Validation
ctest: 17/17.🤖 Generated with Claude Code