diff --git a/src/tz/ren/shaders/mesh.compute.tzsl b/src/tz/ren/shaders/mesh.compute.tzsl index 2dadd8283b..8fbe8d4847 100644 --- a/src/tz/ren/shaders/mesh.compute.tzsl +++ b/src/tz/ren/shaders/mesh.compute.tzsl @@ -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; } \ No newline at end of file diff --git a/src/tz/ren/shaders/mesh.vertex.tzsl b/src/tz/ren/shaders/mesh.vertex.tzsl index 0e5f35780e..3aa2f513d5 100644 --- a/src/tz/ren/shaders/mesh.vertex.tzsl +++ b/src/tz/ren/shaders/mesh.vertex.tzsl @@ -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;