webgpu triangle
This commit is contained in:
parent
64116cd980
commit
5553ded476
22 changed files with 2107 additions and 42 deletions
|
|
@ -60,3 +60,54 @@ export namespace Crafter {
|
|||
};
|
||||
}
|
||||
#endif // !CRAFTER_GRAPHICS_WINDOW_DOM
|
||||
|
||||
#ifdef CRAFTER_GRAPHICS_WINDOW_DOM
|
||||
import std;
|
||||
import Crafter.Math;
|
||||
import :WebGPU;
|
||||
|
||||
export namespace Crafter {
|
||||
// Software-RT BLAS node, packed to 32 bytes. Matches the WGSL
|
||||
// `BVHNode` struct in the RT WGSL prelude (additional/dom-webgpu.js,
|
||||
// rtWgslPrelude) byte-for-byte.
|
||||
//
|
||||
// primCount == 0 → inner node, children at indices
|
||||
// firstChildOrPrim and firstChildOrPrim+1.
|
||||
// primCount > 0 → leaf, `primCount` primitives starting at
|
||||
// primIndex `firstChildOrPrim` in the
|
||||
// global primRemap heap.
|
||||
//
|
||||
// SAH-built BVH2; constructed CPU-side at Build() time, never refit.
|
||||
struct BVHNode {
|
||||
float aabbMin[3];
|
||||
std::uint32_t firstChildOrPrim;
|
||||
float aabbMax[3];
|
||||
std::uint32_t primCount;
|
||||
};
|
||||
static_assert(sizeof(BVHNode) == 32);
|
||||
|
||||
class Mesh {
|
||||
public:
|
||||
// BLAS "handle": opaque identity that goes into
|
||||
// RTInstance::accelerationStructureReference. Set by Build() to a
|
||||
// stable u32 (widened to u64 for Vulkan-struct layout parity), used
|
||||
// by the WebGPU TLAS-build compute shader to look up the BLAS root
|
||||
// AABB and per-mesh heap offsets. Handle 0 is the unassigned
|
||||
// sentinel; never returned by Build().
|
||||
std::uint64_t blasAddr = 0;
|
||||
std::uint32_t triangleCount = 0;
|
||||
|
||||
bool opaque = true;
|
||||
|
||||
// Build BLAS from raw triangle data. Runs the CPU SAH BVH2 builder
|
||||
// and forwards vertex/index/BVH/remap arrays to the JS-side mesh
|
||||
// heap (additional/dom-webgpu.js), which queue.writeBuffers them
|
||||
// into the global heaps and records the per-mesh offsets keyed by
|
||||
// the returned handle. The `cmd` parameter is unused on WebGPU —
|
||||
// kept for API symmetry with the Vulkan signature.
|
||||
void Build(std::span<Crafter::Vector<float, 3, 3>> vertices,
|
||||
std::span<std::uint32_t> indices,
|
||||
WebGPUCommandEncoderRef cmd = 0);
|
||||
};
|
||||
}
|
||||
#endif // CRAFTER_GRAPHICS_WINDOW_DOM
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue