# GFX/Renderer v3 - Build around draw indirect - Keep many meshlets together in one large buffer - Meshlet: 128 triangles - Mesh: List of meshlets - Do compute based culling per VIEW - Each View gets a list of mesh-refs (expanded to meshlet refs), and associated transforms - **Optional:** - These are, by default, permanent, allowing us to build a efficient bvh. - Mark nodes as deleted, only collapse once the entire subtree is deleted. Draw/Materials: - Culling outputs tri-idx, meshlet for every pixel (For hardware that supports it, this could use raytracing) - Meshlet refers to a (sub)material (via index) - Per tile, create a list of draw indirect commands and a read-back buffer containing the (sub-)material index for each draw (+ total nr of draws) - CPU loops over materials, issueing draw indirect calls upon material changes - The ref to a sub-material may be made via meshlet -> material and view type -> sub-material Some (most) sub-materials could draw into a gbuffer. SubMaterialData is baked into structs containing constants and/or bindless ids. Kept in one huge buffer SubMaterial: - Data - PSO Material: - View Type -> SubMaterial Frame Graph - Each view is a pass. Can re-use existing? Renderer API: - CreateMesh(data) -> MeshRef - InstantiateMesh(MeshRef) -> MeshRef - CreateView(type) -> View - AddToView(MeshRef, Transform, Material) -> InstanceRef - RemoveFromView(InstanceRef) - UpdateInView(InstanceRef, Transform, Material) - SetViewCamera(View, Camera) - RenderView(View) - CreateMaterial(NumSubMaterials, SubMaterialInfo*) -> Material - CreateTexture(Format, W, H, NumMipLevels, Optional) -> Texture - EnqueueTextureUpdate(Texture, MipLevel, NewData)