Skip to content

Commit

Permalink
[mesh_renderer] brought back empty object draw skipping for mesh_rend…
Browse files Browse the repository at this point in the history
…erer
  • Loading branch information
harrand committed Sep 3, 2023
1 parent 760480d commit 7d79ce2
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 8 deletions.
21 changes: 14 additions & 7 deletions src/tz/ren/shaders/mesh.compute.tzsl
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,22 @@ resource(id = 1) const buffer draw_list_buffer
void main()
{
uint draw_count = draw_list.draw_count;
uint skip_count = 0;
for(uint i = 0; i < draw_count; i++)
{
mesh_locator loc = draw_list.mesh_locs[i];
draw_buffer.commands[i] = tz::draw::DrawIndexedIndirectCommand::new();
draw_buffer.commands[i].index_count = loc.index_count;
draw_buffer.commands[i].instance_count = 1;
draw_buffer.commands[i].first_index = loc.index_offset;
draw_buffer.commands[i].vertex_offset = int(loc.max_index_value);
draw_buffer.commands[i].first_instance = 0;
// discard empty draws.
if(loc.index_count == 0)
{
skip_count++;
continue;
}
draw_buffer.commands[i - skip_count] = tz::draw::DrawIndexedIndirectCommand::new();
draw_buffer.commands[i - skip_count].index_count = loc.index_count;
draw_buffer.commands[i - skip_count].instance_count = 1;
draw_buffer.commands[i - skip_count].first_index = loc.index_offset;
draw_buffer.commands[i - skip_count].vertex_offset = int(loc.max_index_value);
draw_buffer.commands[i - skip_count].first_instance = skip_count;
}
draw_buffer.count = draw_count;
draw_buffer.count = draw_count - skip_count;
}
2 changes: 1 addition & 1 deletion src/tz/ren/shaders/mesh.vertex.tzsl
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ mat4 get_object_transform(object_t obj)
void main()
{
vertex_t vtx = vertices.data[in::vertex_id];
object_t obj = objects.data[in::draw_id];
object_t obj = objects.data[in::draw_id + in::base_instance];
out::position = camera.projection * camera.view * obj.model * vec4(vtx.position, 1.0f);

out::normal = vtx.normal;
Expand Down

0 comments on commit 7d79ce2

Please sign in to comment.