ludic/packages/ludic.render3d
Orkuncakilkaya 750d13779d feat(render3d): mesh-shader grass
The chunked grass path draws each chunk as one mesh-shader dispatch when the
setting asks and the card has VK_EXT_mesh_shader: work group y is a tile, x a
batch of 16 of its blades, and a blade the placement, density, frustum, water
or slope tests reject emits nothing - the instanced path still runs its eight
vertices to a degenerate position. grass.mesh generates the same blades as
grass.vert (grass_blade_mesh(4)'s rows, the same hashes, sway and lighting
normal), capped at the instanced path's 65535 a tile.

Vulkan: VK_EXT_mesh_shader with meshShader, and maintenance4 (glslang's mesh
stages declare LocalSizeId); vkCmdDrawMeshTasksEXT looked up per device, as the
Streamline interposer exports none; a *.mesh program's pipeline takes the mesh
stage and no vertex input, its bindings the mesh stage bit. gpu_has_mesh,
gpu_draw_mesh_tasks; r3d_mesh_grass and R3D_MESH_GRASS / R3D_NO_MESH.
bin/ludic-dev rebuilt: the committed binary predated the shader tool's mesh
support and compiled grass.mesh as a vertex stage.

PC (RTX 3070 Ti): the camp matches the chunked path; validation only the
no-window present-id message.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 20:20:42 +03:00
..
shaders feat(render3d): mesh-shader grass 2026-09-15 20:20:42 +03:00
actor.ludic render3d: the reflection draws an actor when its mirror image is in view; reflection CPU in R3D_PROF 2026-09-15 18:25:05 +03:00
assets.manifest feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
camera.ludic feat(render3d): DLSS super resolution and Reflex through NVIDIA Streamline 2026-09-15 19:26:12 +03:00
collide.ludic feat(render3d): replace the world at run time, water bodies, terrain_sea 2026-09-13 00:03:40 +03:00
daylight.ludic feat(render3d): load steps for a loading screen, four quality switches, and the ring's uniform usage 2026-09-15 14:46:55 +03:00
drawstats.ludic feat(render3d): R3D_DRAWSTATS - every draw a frame makes, by pass, program and kind 2026-09-15 14:39:33 +03:00
FEATURES.md feat: per-voice audio, outlines for what is not an actor, and a coast 2026-09-11 15:25:46 +03:00
fmath.ludic feat(render3d): gpu.ludic - the seam for a second graphics API, and what the GPU can do 2026-09-15 09:52:12 +03:00
gltf.ludic render3d(vulkan): GPU-driven trees - one merged mesh per material, one draw per material; on by default 2026-09-15 16:44:00 +03:00
gpu.ludic feat(render3d): mesh-shader grass 2026-09-15 20:20:42 +03:00
gpu_manifest.ludic feat(render3d): read the SPIR-V manifest the way a Vulkan backend will 2026-09-15 10:41:43 +03:00
gpu_vk.ludic feat(render3d): mesh-shader grass 2026-09-15 20:20:42 +03:00
gpu_vk_draw.ludic feat(render3d): mesh-shader grass 2026-09-15 20:20:42 +03:00
gpu_vk_res.ludic feat(render3d): HDR10 output, and DLSS that stays still 2026-09-15 20:06:18 +03:00
grass.ludic feat(render3d): mesh-shader grass 2026-09-15 20:20:42 +03:00
mesh.ludic perf(render3d): Vulkan draws find pipelines by integer and reuse descriptor sets 2026-09-15 13:22:51 +03:00
overlay.ludic render3d: HUD text, panels and images share a draw - the font stays bound and each vertex says what it reads 2026-09-15 17:14:53 +03:00
package.ludic feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
post.ludic feat(render3d): HDR10 output, and DLSS that stays still 2026-09-15 20:06:18 +03:00
prof.ludic render3d: actors cast only into the cascades they can shade; Vulkan GPU timings and a mean frame split in R3D_PROF 2026-09-15 18:03:31 +03:00
programs.ludic refactor(render3d): programs, GPU timers and the context behind gpu.ludic 2026-09-15 11:33:01 +03:00
quat.ludic feat(gl): OpenGL 4.1 and the ludic.render3d renderer 2026-09-10 03:31:12 +03:00
r3d.ludic feat(render3d): DLSS super resolution and Reflex through NVIDIA Streamline 2026-09-15 19:26:12 +03:00
render.ludic feat(render3d): HDR10 output, and DLSS that stays still 2026-09-15 20:06:18 +03:00
scatter.ludic render3d: actors cast only into the cascades they can shade; Vulkan GPU timings and a mean frame split in R3D_PROF 2026-09-15 18:03:31 +03:00
shadow.ludic render3d: actors cast only into the cascades they can shade; Vulkan GPU timings and a mean frame split in R3D_PROF 2026-09-15 18:03:31 +03:00
skin.ludic refactor(render3d): vertex data and draws behind gpu.ludic 2026-09-15 10:21:55 +03:00
sky.ludic perf(render3d): the sky light baked once at start, the terrain load in four steps, actor cull bounds by height 2026-09-15 15:03:06 +03:00
stream.ludic feat(render3d): load steps for a loading screen, four quality switches, and the ring's uniform usage 2026-09-15 14:46:55 +03:00
streamline.ludic feat(render3d): HDR10 output, and DLSS that stays still 2026-09-15 20:06:18 +03:00
terrain.ludic render3d(vulkan): the ground reads the sun cascades itself - no separate terrain sun pass 2026-09-15 17:26:39 +03:00
texture.ludic feat(render3d): texture filtering and shadow resolution a game can change while it runs 2026-09-15 14:25:55 +03:00
water.ludic render3d: the reflection draws an actor when its mirror image is in view; reflection CPU in R3D_PROF 2026-09-15 18:25:05 +03:00