Optimize memory allocation when using Sprite size during 2D rendering

This commit is contained in:
Wojtek Figat
2023-10-17 22:44:15 +02:00
parent 1cbf867fc7
commit c457087612
3 changed files with 24 additions and 3 deletions

View File

@@ -47,10 +47,16 @@ int32 SpriteAtlas::GetSpritesCount() const
Sprite SpriteAtlas::GetSprite(int32 index) const
{
CHECK_RETURN(index >= 0 && index < Sprites.Count(), Sprite())
CHECK_RETURN(index >= 0 && index < Sprites.Count(), Sprite());
return Sprites.Get()[index];
}
void SpriteAtlas::GetSpriteArea(int32 index, Rectangle& result) const
{
CHECK(index >= 0 && index < Sprites.Count());
result = Sprites.Get()[index].Area;
}
void SpriteAtlas::SetSprite(int32 index, const Sprite& value)
{
CHECK(index >= 0 && index < Sprites.Count());

View File

@@ -70,7 +70,13 @@ namespace FlaxEngine
[NoSerialize]
public Float2 Size
{
get => Area.Size * Atlas.Size;
get
{
if (Atlas == null)
throw new InvalidOperationException("Cannot use invalid sprite.");
Atlas.GetSpriteArea(Index, out var area);
return area.Size * Atlas.Size;
}
set
{
var area = Area;
@@ -89,7 +95,8 @@ namespace FlaxEngine
{
if (Atlas == null)
throw new InvalidOperationException("Cannot use invalid sprite.");
return Atlas.GetSprite(Index).Area;
Atlas.GetSpriteArea(Index, out var area);
return area;
}
set
{

View File

@@ -120,6 +120,14 @@ public:
/// <returns>The sprite data.</returns>
API_FUNCTION() Sprite GetSprite(int32 index) const;
/// <summary>
/// Gets the sprite area.
/// </summary>
/// <param name="index">The index.</param>
/// <param name="result">The output sprite area.</param>
/// <returns>The sprite data.</returns>
API_FUNCTION() void GetSpriteArea(int32 index, API_PARAM(Out) Rectangle& result) const;
/// <summary>
/// Sets the sprite data.
/// </summary>