static void CopyTextureToAtlas(CopyTextureToAtlasData data) { CopyQuadrantToAtlas(data, 0, 0, 1, 1); CopyQuadrantToAtlas(data, 1, 0, -1, 1); CopyQuadrantToAtlas(data, 0, 1, 1, -1); CopyQuadrantToAtlas(data, 1, 1, -1, -1); }
static void CopyQuadrantToAtlas(CopyTextureToAtlasData data, int quadX, int quadY, int copyDirectionX, int copyDirectionY) => CopyQuadrantToAtlas(data, new CopyQuadrantData() { CopyDirY = copyDirectionY, CopyDirX = copyDirectionX, X = quadX, Y = quadY });
static void CopyTextureToAtlas(Texture2D tex, Texture2D outputTexture, int x, int y) { var data = new CopyTextureToAtlasData() { Texture = tex, Atlas = outputTexture, X = x, Y = y }; CopyTextureToAtlas(data); }
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); }
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); } }