Example #1
0
        static void CopyQuadrantToAtlas(CopyTextureToAtlasData data, CopyQuadrantData quadrant)
        {
            var offset   = new Vector2Int(data.X + k_repeatedPixels, data.Y + k_repeatedPixels);
            var halfSize = new Vector2Int(data.Texture.width / 2, data.Texture.height / 2);
            var readPos  = new Vector2Int(halfSize.x * quadrant.X, halfSize.y * quadrant.Y);

            var pixels = data.Texture.GetPixels(readPos.x, readPos.y, halfSize.x, halfSize.y);

            GetRepeatedReadWritePositions(data, quadrant, readPos, offset, halfSize, out var rp);

            var pixelsRepeatedX  = data.Texture.GetPixels(rp.RepeatedXRead, readPos.y, k_repeatedPixels, halfSize.y);
            var pixelsRepeatedY  = data.Texture.GetPixels(readPos.x, rp.RepeatedYRead, halfSize.x, k_repeatedPixels);
            var pixelsRepeatedXY = data.Texture.GetPixels(rp.RepeatedXRead, rp.RepeatedYRead, k_repeatedPixels, k_repeatedPixels);

            data.Atlas.SetPixels(offset.x + readPos.x, offset.y + readPos.y, halfSize.x, halfSize.y, pixels);
            data.Atlas.SetPixels(rp.RepeatedXWrite, offset.y + readPos.y, k_repeatedPixels, halfSize.y, pixelsRepeatedX);
            data.Atlas.SetPixels(offset.x + readPos.x, rp.RepeatedYWrite, halfSize.x, k_repeatedPixels, pixelsRepeatedY);
            data.Atlas.SetPixels(rp.RepeatedXWrite, rp.RepeatedYWrite, k_repeatedPixels, k_repeatedPixels, pixelsRepeatedXY);
        }
Example #2
0
        static void GetRepeatedReadWritePositions(CopyTextureToAtlasData data, CopyQuadrantData quad,
                                                  Vector2Int readPos, Vector2Int offset, Vector2Int halfSize, out RepeatedPositions repeatPos)
        {
            repeatPos.RepeatedXRead = readPos.x;
            repeatPos.RepeatedYRead = readPos.y;

            repeatPos.RepeatedXWrite = offset.x + readPos.x + (data.Texture.width * quad.CopyDirX);
            repeatPos.RepeatedYWrite = offset.y + readPos.y + (data.Texture.height * quad.CopyDirY);

            if (quad.CopyDirX == -1)
            {
                repeatPos.RepeatedXWrite += (halfSize.x - k_repeatedPixels);
                repeatPos.RepeatedXRead  += (halfSize.x - k_repeatedPixels);
            }

            // ReSharper disable once InvertIf
            if (quad.CopyDirY == -1)
            {
                repeatPos.RepeatedYWrite += (halfSize.y - k_repeatedPixels);
                repeatPos.RepeatedYRead  += (halfSize.y - k_repeatedPixels);
            }
        }