Esempio n. 1
0
 public void FreeArea(TexArea area)
 {
     if (Slices.Count <= area.Data.Slice || area.Data.Slice < 0)
     {
         return;
     }
     Slices[area.Data.Slice].FreeArea(area);
 }
Esempio n. 2
0
            public TexSlice(int w, int h, int slice)
            {
                Width  = w;
                Height = h;
                Slice  = slice;

                var full = new TexArea();

                full.Data.Slice  = Slice;
                full.Data.X      = 0;
                full.Data.Y      = 0;
                full.Data.Width  = w;
                full.Data.Height = h;
                full.IsFree      = true;
                FreeAreas.Add(full);
            }
Esempio n. 3
0
            public void FreeArea(TexArea area)
            {
                if (ValidAreas.Contains(area))
                {
                    FreeAreas.Add(area);

                    //sort free areas
                    FreeAreas.Sort((left, right) =>
                    {
                        return(left.GetArea() - right.GetArea());
                    });
                }
                else
                {
                    Profiler.Log.WriteLine(Profiler.ELogTag.Warning, "TextureAtlas", $"TexArea {area} free failed");
                }
            }
Esempio n. 4
0
            public TexArea SplitArea(TexArea area, int w, int h)
            {
                if (area.Data.Width == w && area.Data.Height == h)
                {
                    return(area);
                }

                var result = new TexArea();

                result.Data.Slice  = Slice;
                result.Data.X      = area.Data.X;
                result.Data.Y      = area.Data.Y;
                result.Data.Width  = w;
                result.Data.Height = h;
                result.IsFree      = false;

                if (area.Data.Width - w >= area.Data.Height - h)
                {
                    var n1 = new TexArea();
                    n1.Data.Slice  = Slice;
                    n1.Data.X      = area.Data.X + w;
                    n1.Data.Y      = area.Data.Y;
                    n1.Data.Width  = area.Data.Width - w;
                    n1.Data.Height = area.Data.Height;
                    n1.IsFree      = true;

                    var n2 = new TexArea();
                    n2.Data.Slice  = Slice;
                    n2.Data.X      = area.Data.X;
                    n2.Data.Y      = area.Data.Y + h;
                    n2.Data.Width  = w;
                    n2.Data.Height = area.Data.Height - h;
                    n2.IsFree      = true;

                    if (n1.Data.Width > 0)
                    {
                        FreeAreas.Add(n1);
                    }
                    if (n2.Data.Height > 0)
                    {
                        FreeAreas.Add(n2);
                    }
                }
                else
                {
                    var n1 = new TexArea();
                    n1.Data.Slice  = Slice;
                    n1.Data.X      = area.Data.X + w;
                    n1.Data.Y      = area.Data.Y;
                    n1.Data.Width  = area.Data.Width - w;
                    n1.Data.Height = h;
                    n1.IsFree      = true;

                    var n2 = new TexArea();
                    n2.Data.Slice  = Slice;
                    n2.Data.X      = area.Data.X;
                    n2.Data.Y      = area.Data.Y + h;
                    n2.Data.Width  = area.Data.Width;
                    n2.Data.Height = area.Data.Height - h;
                    n2.IsFree      = true;

                    if (n1.Data.Width > 0)
                    {
                        FreeAreas.Add(n1);
                    }
                    if (n2.Data.Height > 0)
                    {
                        FreeAreas.Add(n2);
                    }
                }
                return(result);
            }