Adds the minimal WebGPU-backend surface an HDR bloom/post chain needs: 1. wgpuCreateStorageImage2D + StorageImage2D<>: runtime rgba16float (or other format) textures with STORAGE_BINDING|TEXTURE_BINDING usage, no CompressedTextureAsset upload — GPU-produced HDR targets. 2. UICustomBindingKind::StorageTexture (kind 5): write-only storage-texture binding carrying a texel format (the freed UICustomBinding::format byte), wired through all three binding paths (UI custom / RT / plain compute). Float textures already sample via SampledTexture (sampleType float). 3. PipelineRTWebGPU::Init(..., hdrOutputFormat): RESOLVE writes the linear accumulator into a user rgba16float texture (RTPass::outTexHandle) instead of the rgba8unorm canvas, leaving the composite→swapchain pass to the app. Default RGBA8Unorm keeps the canvas path byte-identical. Existing RT examples updated for the _pad→format field rename; the default paths are unchanged (verified RTStress builds + renders). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| anyhit.wgsl | ||
| closesthit.wgsl | ||
| intersection.wgsl | ||
| main.cpp | ||
| miss.wgsl | ||
| project.cpp | ||
| raygen.wgsl | ||
| README.md | ||
| resolve.wgsl | ||
RTVolume
WebGPU software ray tracing of procedural (AABB) geometry with an any-hit cut-out — the two features added for issue #13.
A 3×3×3 grid of unit boxes is registered as an AABB BLAS
(Mesh::BuildProcedural, the WebGPU analog of VK_GEOMETRY_TYPE_AABBS_KHR).
The hit group is a RTShaderGroupType::ProceduralHitGroup carrying:
intersection.wgsl— analytic ray–sphere test that turns each box into a radius-1 sphere (runs in TRACE, once per box the ray enters);anyhit.wgsl— returnsRT_ANYHIT_IGNOREfor half the cells of a spherical checkerboard, so the ray passes through and the background / spheres behind show through (the visible proof any-hit runs);closesthit.wgsl— normal-based Lambert shading, tinted per instance.
The geometry is registered non-opaque and the instances clear their
force-opaque flag, which is what lets the any-hit shader run. Flip the
instance flag to kRTGeometryInstanceForceOpaque (or build the mesh with
opaque = true) to skip any-hit and see solid spheres.
WebGPU/DOM only:
crafter-build --target=wasm32-wasip1 -r