improving BringToLayer

This commit is contained in:
2024-11-05 11:59:31 +01:00
parent 5f46c8cb55
commit 4ae7bd0420
3 changed files with 5 additions and 16 deletions

View File

@@ -27,7 +27,6 @@ namespace mlx
inline void BindFont(std::shared_ptr<Font> font) { Verify((bool)font, "invalid fond pointer"); p_bound_font = font; }
void BringToFront(NonOwningPtr<Drawable> drawable);
void BringToDrawLayer(NonOwningPtr<Drawable> drawable, std::uint64_t draw_layer);
inline void ResetScene(Vec4f clear) { m_drawables.clear(); m_clear_color = std::move(clear); }

View File

@@ -112,27 +112,17 @@ namespace mlx
return ptr->GetText() == text && ptr->GetFont() == p_bound_font;
}
void Scene::BringToFront(NonOwningPtr<Drawable> drawable)
void Scene::BringToDrawLayer(NonOwningPtr<Drawable> drawable, std::uint64_t draw_layer)
{
MLX_PROFILE_FUNCTION();
if(draw_layer < m_drawables.size())
return;
auto it = std::find_if(m_drawables.begin(), m_drawables.end(), [&drawable](std::shared_ptr<Drawable> drawable_ptr)
{
return drawable_ptr.get() == drawable.Get();
});
if(it == m_drawables.end())
return;
std::rotate(it, it + 1, m_drawables.end());
}
void Scene::BringToDrawLayer(NonOwningPtr<Drawable> drawable, std::uint64_t draw_layer)
{
MLX_PROFILE_FUNCTION();
auto it = std::find_if(m_drawables.begin(), m_drawables.end(), [&drawable](std::shared_ptr<Drawable> drawable_ptr)
{
return drawable_ptr.get() == drawable.Get();
});
if (m_drawables.size() > draw_layer)
return;
std::swap(*it, *(m_drawables.begin() + draw_layer));
}
}

View File

@@ -94,7 +94,7 @@ namespace mlx
const auto& drawables = scene.GetDrawables();
for(auto drawable : drawables)
for(auto& drawable : drawables)
{
// Check every textures and update modified ones to GPU before starting the render pass
if(!drawable->IsSetInit())
@@ -103,7 +103,7 @@ namespace mlx
}
m_pipeline.BindPipeline(cmd, 0, {});
for(auto drawable : drawables)
for(auto& drawable : drawables)
{
SpriteData drawable_data;
drawable_data.position = drawable->GetPosition();