From 9ada52b43df4f004fae9a2fecf33e8ae4b2b8798 Mon Sep 17 00:00:00 2001 From: Joe Rivera Date: Fri, 2 Oct 2026 17:12:44 -0500 Subject: [PATCH 1/3] examples(ariadne_hello): wasm-enable the Ariadne host for .ari browser demos Make the generic ariadne_hello host runnable in the browser so pure-DSL .ari demos can deploy to the web gallery (the path for the volume bunny ports, and future A/V / lsystem .ari demos): - asyncify yield (emscripten_sleep(0)) in the windowed loop under __EMSCRIPTEN__; - a compile-time default document CVC_ARIADNE_WASM_DOC used when no argv is given (the browser passes none), plus adding the MEMFS root so cvc://components/*.ari resolve at the embedded /components; - CMake: per-.ari wasm targets (_ari) built from ariadne_hello.cpp with the document + the component library embedded via --embed-file, under DISTINCT slugs so they sit ALONGSIDE the compiled C++ demos, not replacing them. Deps note: deploying these needs yaml-cpp (the .ari loader) and CVC_ENABLE_SDF added to the wasm build; wired separately. --- src/cvcGL/examples/CMakeLists.txt | 18 ++++++++++++++++++ src/cvcGL/examples/ariadne_hello.cpp | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/cvcGL/examples/CMakeLists.txt b/src/cvcGL/examples/CMakeLists.txt index 82ee2045..476e36e4 100644 --- a/src/cvcGL/examples/CMakeLists.txt +++ b/src/cvcGL/examples/CMakeLists.txt @@ -113,6 +113,24 @@ endif() # into the gallery by wasm/build-pages.py — no host page to hand-write. if(EMSCRIPTEN) set(_wasm_demos lsystem_forest lsystem_coast terrain_lab bunny_shadow volren_bunny volslice_bunny nav_city_swarm nav_city_drive nav_fog_ghost) + + # Ariadne (.ari) demos as wasm: build the generic ariadne_hello host once per document, with that + # .ari baked in as the default doc (CVC_ARIADNE_WASM_DOC) and the shared component library embedded + # in MEMFS (--embed-file), so a pure-DSL demo runs in the browser with no argv. Distinct slugs + # (_ari) so they sit ALONGSIDE the C++ volren_bunny/volslice_bunny demos, not replacing them. + # This is also the path for every future .ari demo (A/V, lsystem, …) to reach the web gallery. + get_filename_component(_CVC_ARIADNE_COMPONENTS + "${CMAKE_CURRENT_SOURCE_DIR}/../../cvc/ariadne/components" ABSOLUTE) + foreach(_ari volren_bunny volslice_bunny) + add_executable(${_ari}_ari ariadne_hello.cpp) + target_link_libraries(${_ari}_ari PRIVATE cvcGL ${VTK_LIBRARIES}) + vtk_module_autoinit(TARGETS ${_ari}_ari MODULES ${VTK_LIBRARIES}) + target_compile_definitions(${_ari}_ari PRIVATE CVC_ARIADNE_WASM_DOC="/${_ari}.ari") + target_link_options(${_ari}_ari PRIVATE + "--embed-file=${CMAKE_CURRENT_SOURCE_DIR}/${_ari}.ari@/${_ari}.ari" + "--embed-file=${_CVC_ARIADNE_COMPONENTS}@/components") + list(APPEND _wasm_demos ${_ari}_ari) + endforeach() # Optional runtime asset bundle for nav_city_swarm (Austin: terrain.json + # buildings.glb + satellite.png). When CVC_WASM_BUNDLE is set to a scene dir, # its contents are preloaded to /bundle and, if the sibling shared/Humvee.glb diff --git a/src/cvcGL/examples/ariadne_hello.cpp b/src/cvcGL/examples/ariadne_hello.cpp index 66822214..e4b79cf9 100644 --- a/src/cvcGL/examples/ariadne_hello.cpp +++ b/src/cvcGL/examples/ariadne_hello.cpp @@ -17,6 +17,9 @@ #include #include #include +#ifdef __EMSCRIPTEN__ +#include // emscripten_sleep — yield the asyncify main loop to the browser +#endif #include #include #include // register_cvc_uri_handler — the cvc:// component-library import path @@ -73,6 +76,15 @@ int main(int argc, char **argv) { else if (a[0] != '-' && docPath.empty()) docPath = a; } + // A wasm demo build bakes in its own .ari (CVC_ARIADNE_WASM_DOC) and embeds the component library + // in MEMFS (see the examples CMake --embed-file). With no argv in the browser, default to that doc + // and add the MEMFS root to the search path so `cvc://components/*.ari` resolves at /components. +#ifdef CVC_ARIADNE_WASM_DOC + if (docPath.empty()) { + docPath = CVC_ARIADNE_WASM_DOC; + componentPaths.push_back("/"); + } +#endif // The cvc:// component-library import path (import: cvc://components/foo.ari), resolved against // CVC_ARIADNE_PATH + any --component-path dirs + the install datadir + cwd. Register before load. cvc::ariadne::register_cvc_uri_handler(componentPaths); @@ -319,7 +331,11 @@ int main(int argc, char **argv) { while (!view.windowClosed() && !quit) { frame_body(1.0 / 120.0); view.render(); // draws the scene + the Ariadne overlay (runs rt.render()) +#ifdef __EMSCRIPTEN__ + emscripten_sleep(0); // yield to the browser each frame (asyncify); the canvas drives cadence +#else std::this_thread::sleep_for(std::chrono::milliseconds(8)); // ~120 Hz cap +#endif } } cam.detach(); From bc3f3181915aa407a92e1d9743c5acd7f30e93e6 Mon Sep 17 00:00:00 2001 From: Joe Rivera Date: Fri, 2 Oct 2026 17:40:18 -0500 Subject: [PATCH 2/3] examples(wasm): deploy the DSL volume bunny demos to the browser gallery Build yaml-cpp for wasm into CVC_WASM_DEPS in build-wasm-demo.sh (idempotent, pthread-matched): it is the Ariadne .ari loader's only extra dependency and is not in the cvcpkg wasm catalog, so without it the loader degrades to a stub and the .ari demos ship blank. Add volren_bunny_ari + volslice_bunny_ari to the deploy-pages verify list and the gallery metadata, with thumbnails. --- .github/workflows/deploy-pages.yml | 2 +- src/cvcGL/examples/wasm/build-wasm-demo.sh | 36 ++++++++++++++++++ src/cvcGL/examples/wasm/demos.json | 14 +++++++ .../gallery-assets/img/volren_bunny_ari.jpg | Bin 0 -> 10954 bytes .../gallery-assets/img/volslice_bunny_ari.jpg | Bin 0 -> 13208 bytes 5 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/cvcGL/examples/wasm/gallery-assets/img/volren_bunny_ari.jpg create mode 100644 src/cvcGL/examples/wasm/gallery-assets/img/volslice_bunny_ari.jpg diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index b8116ed5..16e12106 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -44,7 +44,7 @@ jobs: # grl-snam-weights lands here; --preload-file bakes the trained CoefMLP into # nav_city_swarm.data so the browser swarm drives with the published policy. CVC_WASM_NAV_WEIGHTS: /opt/cvc-wasm/deps-wasm-mt/share/grl-snam-weights/coef_sdf.cvcnav - DEMOS: 'terrain_lab lsystem_forest lsystem_coast volren_bunny volslice_bunny nav_city_swarm nav_city_drive nav_fog_ghost' + DEMOS: 'terrain_lab lsystem_forest lsystem_coast volren_bunny volren_bunny_ari volslice_bunny volslice_bunny_ari nav_city_swarm nav_city_drive nav_fog_ghost' steps: - name: Checkout master uses: actions/checkout@v4 diff --git a/src/cvcGL/examples/wasm/build-wasm-demo.sh b/src/cvcGL/examples/wasm/build-wasm-demo.sh index a11b1baa..11a23fca 100755 --- a/src/cvcGL/examples/wasm/build-wasm-demo.sh +++ b/src/cvcGL/examples/wasm/build-wasm-demo.sh @@ -74,6 +74,42 @@ EOF_EMCFG echo "build-wasm-demo: shared emsdk cache not writable by $(id -un); using seeded per-user cache ${_em_cache}" fi +# yaml-cpp for wasm — the Ariadne .ari loader's only extra dependency (src/cvc/ +# CMakeLists.txt: find_package(yaml-cpp) → CVC_ARIADNE_HAVE_YAML). It is NOT in +# the cvcpkg wasm catalog (published linux/macos/win/bsd only), so without this +# the loader silently compiles to a stub and the .ari demos (volren_bunny_ari, +# volslice_bunny_ari) deploy BLANK. Build it from the pinned upstream tarball +# into CVC_WASM_DEPS, STATIC, and pthread-matched to the module so the emscripten +# link doesn't reject mixed -pthread objects. Idempotent: skipped once installed. +if [ ! -f "${CVC_WASM_DEPS}/lib/cmake/yaml-cpp/yaml-cpp-config.cmake" ] \ + && [ ! -f "${CVC_WASM_DEPS}/share/cmake/yaml-cpp/yaml-cpp-config.cmake" ]; then + echo "build-wasm-demo: yaml-cpp not in ${CVC_WASM_DEPS}; building it for wasm from source" + _yc_ver=0.8.0 + _yc_sha=fbe74bbdcee21d656715688706da3c8becfd946d92cd44705cc6098bb23b3a16 + _yc_work="${BUILD_DIR}/_yaml-cpp" + _yc_src="${_yc_work}/yaml-cpp-${_yc_ver}" + _yc_tar="${_yc_work}/yaml-cpp-${_yc_ver}.tar.gz" + mkdir -p "${_yc_work}" + if [ ! -d "${_yc_src}" ]; then + curl -fL "https://github.com/jbeder/yaml-cpp/archive/refs/tags/${_yc_ver}.tar.gz" \ + -o "${_yc_tar}" + echo "${_yc_sha} ${_yc_tar}" | sha256sum -c - + tar -xzf "${_yc_tar}" -C "${_yc_work}" + fi + _yc_pthread="" + [[ "${PTHREAD}" == "ON" ]] && _yc_pthread="-pthread" + emcmake cmake -G Ninja -S "${_yc_src}" -B "${_yc_work}/build" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${CVC_WASM_DEPS}" \ + -DYAML_CPP_BUILD_TESTS=OFF \ + -DYAML_CPP_BUILD_TOOLS=OFF \ + -DYAML_CPP_BUILD_CONTRIB=OFF \ + -DYAML_BUILD_SHARED_LIBS=OFF \ + -DCMAKE_CXX_FLAGS="${_yc_pthread}" \ + -DCMAKE_C_FLAGS="${_yc_pthread}" + cmake --build "${_yc_work}/build" --target install +fi + emcmake cmake -G Ninja -S "${REPO_ROOT}" -B "${BUILD_DIR}" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_FIND_ROOT_PATH="${CVC_WASM_DEPS}" \ diff --git a/src/cvcGL/examples/wasm/demos.json b/src/cvcGL/examples/wasm/demos.json index b82acab4..812c4731 100644 --- a/src/cvcGL/examples/wasm/demos.json +++ b/src/cvcGL/examples/wasm/demos.json @@ -6,7 +6,9 @@ "lsystem_forest", "lsystem_coast", "volren_bunny", + "volren_bunny_ari", "volslice_bunny", + "volslice_bunny_ari", "nav_city_swarm", "nav_city_drive", "nav_fog_ghost", @@ -66,6 +68,18 @@ "blurb": "The classic view-aligned slice compositor from VolumeRover2, ported to cvc::volslice: the bunny's signed-distance volume windowed into a byte texture and colored by a 256-entry transfer function, hundreds of camera-facing slices blended back to front. Add up to nine bunnies — each is its own scene-graph volume node, depth-sorted per frame — and drive quality, near-plane peel, the value window and spacing-corrected opacity live in the panel.", "thumb": "img/volslice_bunny.jpg" + }, + "volren_bunny_ari": { + "desc": "the volren bunny, built entirely in the Ariadne UI DSL (.ari)", + "blurb": + "The same CPU-raycast bunny, rebuilt in the Ariadne UI DSL: the scene, lighting rig and raycast control panel are all declared in one .ari document — no demo-specific C++, just the generic host. The volume is computed live as the signed distance field of the embedded Stanford mesh via a single DSL source (source: { sdf: { mesh } }), and the controls are reusable .ari components shared with the other bunny demos.", + "thumb": "img/volren_bunny_ari.jpg" + }, + "volslice_bunny_ari": { + "desc": "the volslice bunny, built entirely in the Ariadne UI DSL (.ari)", + "blurb": + "The slice-based bunny, rebuilt in the Ariadne UI DSL: scene, transfer function, lighting and the slice control panel declared in one .ari document, driven by the generic host — no demo-specific C++. The volume is the signed distance field of the embedded Stanford mesh (source: { sdf: { mesh } }), and the controls are reusable .ari components.", + "thumb": "img/volslice_bunny_ari.jpg" } } } diff --git a/src/cvcGL/examples/wasm/gallery-assets/img/volren_bunny_ari.jpg b/src/cvcGL/examples/wasm/gallery-assets/img/volren_bunny_ari.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6ca954b2ae62a13884972b854487b84b0c9c090 GIT binary patch literal 10954 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 z zU9+m#QebiFq30W~;wV+VXhlwOx3$Fa)ft(5B$1&-4PMx%n%GV+3p3-tPl!=vb$V(V zx$ApsQhHN`FIUsd5|8$x%1-Ow?81NO)J*U`cJjTdeHmM$qpoV%(e+WPIOnPysNyl4 z^o{n2Km$~%2C1rR=DU};OR2jZe8qE5EQc>Y95rGaYyqFmlV-&EuK!(w_&ap`RJh1O zZ+2O@WYB)MT9_rx?7kV15psp(e|_BC(bPMySoqb1Ug=esg5}BB9p8`g38Tot})4rRA*v`-$fr&2F_> zq(|1mc@cUuRzHqv%YMoso9E_Omv)C=y{nz3z#rG!L`tk?i%qfhUuG+22ar+@2Eb3S z*6-Wh*A(lq789n(zWtnSeLe_g2rpT!Utmk*Zqn}OR*cm;_~j@JNJYA(8kX#KOv-SJ zN;H|-;nf=At1lGe-|ppk#H+KQHMIBh;h^O8Cv2~fvgKwJ%QQ0+t#*G#rsOf+NAGT{ zV+p?CQ1l91jcw$%?BDWi813k25rC>@i!ZrN8|is8lssATtx}}cT_B(97;+uVbq1rc zQpjrkP3ssPqu5B7!nM-Ekj-TY*88L|H$#Qw8>^{wx54_LsC9`>>tZ)l#-g{D!g3qULpGt16zTB7e;09q(h0O*mT0T2rmfEg#>DU|cTgwn(MNr(6Hp)j^6y#WlUt zMzxsH6^QAE2g>?cxR;aUo@-qTLv8|aFGHAB7RiT_QJ&w#5qiR$VH;R*1dc1{T( z_cPE`OJu&dfF!{7X3`bWJUl_&^FjOkJ4hO1$x7YnKW1j;y1BWJI;yT;y0V5PBv9s% z6RKk4^a+Q-m&bqmlKpp#_3zQh49hr|o_QfBhP{ zFi8KCrELt%o0BlmRa!#q@*>4`YG{%)4Yz>Mwwz%>D_^0p5{hTJ_yG8&LhXp9E2_pl zBUg#kgs87v8vSWX(2Yh^ja{gYUTW&~%b}2QLMphoFW$5m23wUp{%%^2dQrcH;^2JD zbI$WQy}204%ym`x72WKX&PZu*aEJ;u@mnriJ9{O1(R2{i9A{(`G}O|-YE*R6cIdHA zXlgZyIKDC#1K;Txo~C+xuq^tRyqmvzrY}uAO3WX%DEf@-tu4#jflOMNRPUM0bu*A= z6J|c$A28aXs2aV{GJrb=Zes$>8c(iOcupHOhQFrS<0lEI6g6K_&2_j9`}FB2wBV?t z4d$enT*V{D7=4=xoa!tmT5+vEBPg?UpT_l0&#Ymi&z!hsV$4${ABtdKZ4&kxaGwHo`bb0+SBY?F9Nb1d=^uVX1ich4d+|@Q((+Swj`+W2z?n89p;A#}DjSdRQ z)1?S5x6neVVis8DVY{=CO&xG2C&^Ty;ssJ^KcmT7vYcb92xlK#we?Th0z?B{2?%PT-KgBfcc~-L12}&c&Y%Y7@>xTqMA3h7DqvOU`xEu-rER9|(@uhGytT zj<+ShBShO*hcGs13e!#;IOiEYtdKcJf=Np>5xq5}17$;s&W3t`?+5=cfY|T9za>@h zrl*c?6iy;qP{Ygr9AQ`<<=>z~SHHYad){+7rxiUk(H)oZ$RX#eQZ>NQ8W4Lf&8wpW)|8yEX|LVotdNocN(wYFZjD${w=zj-6+uU;*{gGYeR|S zu~lnt_U=>H>GCE$>P|Q;eDX`=g1vVfMlCZg1+4qYT4HVtW;X^BC}hz{1bR|AX`WnH2+lMnwmlT+K3s zgKIZ!x1TlqAT@Hx4KM(xRwS;u4FQlTaJ(8W#Hfe!w zc(cW{?l96AVXwC#Yn0}eFLIvy@zL}FWSZYf&`P>*qp^cjTUwv@pIgD7I0ZE4|CsH7 p!X{tIVoe&wNna~lt_@q~v47HiqKbNuGm6&hxbZ!AMD*6%{{mR>gzEqR literal 0 HcmV?d00001 diff --git a/src/cvcGL/examples/wasm/gallery-assets/img/volslice_bunny_ari.jpg b/src/cvcGL/examples/wasm/gallery-assets/img/volslice_bunny_ari.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa35f5c7ed486e5e7141ba4091641c6c677a18ff GIT binary patch literal 13208 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 IEIaN02l<%Yy#N3J literal 0 HcmV?d00001 From 0bd855e735ce9884b5834f5dc2afc3ba970edddb Mon Sep 17 00:00:00 2001 From: Joe Rivera Date: Fri, 2 Oct 2026 17:44:16 -0500 Subject: [PATCH 3/3] examples(ariadne_hello): clang-format changed comment lines --- src/cvcGL/examples/ariadne_hello.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cvcGL/examples/ariadne_hello.cpp b/src/cvcGL/examples/ariadne_hello.cpp index 6bce8d9c..ae2ebe9c 100644 --- a/src/cvcGL/examples/ariadne_hello.cpp +++ b/src/cvcGL/examples/ariadne_hello.cpp @@ -80,8 +80,9 @@ int main(int argc, char **argv) { docPath = a; } // A wasm demo build bakes in its own .ari (CVC_ARIADNE_WASM_DOC) and embeds the component library - // in MEMFS (see the examples CMake --embed-file). With no argv in the browser, default to that doc - // and add the MEMFS root to the search path so `cvc://components/*.ari` resolves at /components. + // in MEMFS (see the examples CMake --embed-file). With no argv in the browser, default to that + // doc and add the MEMFS root to the search path so `cvc://components/*.ari` resolves at + // /components. #ifdef CVC_ARIADNE_WASM_DOC if (docPath.empty()) { docPath = CVC_ARIADNE_WASM_DOC;