diff --git a/runtime/Includes/Core/Graphics.h b/runtime/Includes/Core/Graphics.h index b67c532..8593523 100644 --- a/runtime/Includes/Core/Graphics.h +++ b/runtime/Includes/Core/Graphics.h @@ -47,6 +47,7 @@ namespace mlx int m_id; bool m_has_window; + bool m_pixelput_called = false; }; } diff --git a/runtime/Includes/Core/Graphics.inl b/runtime/Includes/Core/Graphics.inl index 4150230..f4386a0 100644 --- a/runtime/Includes/Core/Graphics.inl +++ b/runtime/Includes/Core/Graphics.inl @@ -9,7 +9,7 @@ namespace mlx p_scene->ResetSprites(); m_put_pixel_manager.ResetRenderData(); m_draw_layer = 0; - PixelPut(0, 0, 0x00000000); // bozoman solution FIXME WTF + m_pixelput_called = false; } void GraphicsSupport::PixelPut(int x, int y, std::uint32_t color) noexcept @@ -18,6 +18,7 @@ namespace mlx NonOwningPtr texture = m_put_pixel_manager.DrawPixel(x, y, m_draw_layer, color); if(texture) { + m_pixelput_called = true; Sprite& new_sprite = p_scene->CreateSprite(texture); new_sprite.SetPosition(Vec2f{ 0.0f, 0.0f }); } @@ -38,12 +39,20 @@ namespace mlx NonOwningPtr sprite = p_scene->GetSpriteFromTextureAndPosition(texture, Vec2f{ static_cast(x), static_cast(y) }); if(!sprite) { + Sprite& new_sprite = p_scene->CreateSprite(texture); new_sprite.SetPosition(Vec2f{ static_cast(x), static_cast(y) }); - m_draw_layer++; + if(m_pixelput_called) + { + m_draw_layer++; + m_pixelput_called = false; + } } else if(!p_scene->IsTextureAtGivenDrawLayer(texture, m_draw_layer)) + { p_scene->BringToFront(std::move(sprite)); + m_draw_layer++; + } } void GraphicsSupport::TryEraseSpritesInScene(NonOwningPtr texture) noexcept