Compute & log max primitive count in ui painter

This commit is contained in:
Nikita Lisitsa 2022-05-25 22:52:53 +03:00
parent c949e0fad9
commit fd8bec44ab

View file

@ -185,6 +185,7 @@ void main()
std::vector<std::variant<colored_batch, textured_batch, stencil_batch>> batches;
std::size_t max_batch_count = 0;
std::size_t max_primitive_count = 0;
template <typename Batch>
Batch & batch(Batch && n)
@ -224,6 +225,7 @@ void main()
painter_impl::~painter_impl()
{
log::debug() << "UI painter max batch count: " << impl().max_batch_count;
log::debug() << "UI painter max primitive count: " << impl().max_primitive_count;
}
void painter_impl::draw_rect(geom::box<float, 2> const & rect, gfx::color_rgba const & color)
@ -388,14 +390,21 @@ void main()
gl::ActiveTexture(gl::TEXTURE0);
std::size_t primitive_count = 0;
auto batch_visitor = util::overload(
[&](colored_batch const & b){
primitive_count += b.indices.size() / 3;
impl().colored_program.bind();
impl().colored_mesh.load(b.vertices, b.indices, gl::TRIANGLES);
impl().colored_mesh.draw();
},
[&](textured_batch const & b){
if (!b.texture) return;
primitive_count += b.indices.size() / 3;
gfx::program & program = (b.mode == ui::painter::color_mode::mix) ? impl().textured_mix_program : impl().textured_multiply_program;
program.bind();
program["u_texture_size"] = geom::cast<float>(b.texture->size());
@ -437,6 +446,8 @@ void main()
impl().max_batch_count = std::max(impl().max_batch_count, impl().batches.size());
impl().max_primitive_count = std::max(impl().max_primitive_count, primitive_count);
impl().depth = 0;
impl().batches.clear();
impl().stencil_level = 0;