internal void SetData(Color[] data)
        {
            var dataLength   = data.Length;
            var destText     = UnityTexture as UnityEngine.Texture2D;
            var dst          = destText.GetRawTextureData <uint>();
            var tmp          = new uint[dataLength];
            var textureWidth = UnityTexture.width;

            for (int i = 0; i < dataLength; i++)
            {
                int x = i % textureWidth;
                int y = i / textureWidth;
                y *= textureWidth;
                var index = y + (textureWidth - x - 1);
                var color = data[dataLength - index - 1];
                //argb -> rgba
                tmp[i] = (uint)(color.R << 24 | color.G << 16 | color.B << 8 | color.A);
            }

            dst.CopyFrom(tmp);

            destText.Apply();

            Hash = UnityTexture.GetHashCode();
        }
Beispiel #2
0
        internal void SetData(byte[] data)
        {
            Console.WriteLine("SetData with bytes is probably not working properly yet, we're not converting the bytes at all.");
            var dataLength = data.Length;
            var destText   = UnityTexture as UnityEngine.Texture2D;
            var dst        = destText.GetRawTextureData <byte>();

            dst.CopyFrom(data);
            destText.Apply();
            Hash = UnityTexture.GetHashCode();
        }
Beispiel #3
0
        public byte[] GetRawData()
        {
            var data    = new byte[UnityTexture.width * UnityTexture.height * 4];
            var rawData = UnityTexture.GetRawTextureData();

            switch (UnityTexture.format)
            {
            case TextureFormat.RGB24:
            {
                for (var i = 0; i < data.Length / 4; i++)
                {
                    var offset4 = i * 4;
                    var offset3 = i * 3;
                    data[offset4]     = rawData[offset3];
                    data[offset4 + 1] = rawData[offset3 + 1];
                    data[offset4 + 2] = rawData[offset3 + 2];
                    data[offset4 + 3] = 255;
                }
                break;
            }

            case TextureFormat.RGBA32:
            {
                Array.Copy(rawData, data, data.Length);
                break;
            }

            case TextureFormat.ARGB32:
            {
                for (var i = 0; i < data.Length / 4; i++)
                {
                    var offset = i * 4;
                    data[offset]     = rawData[offset + 1];
                    data[offset + 1] = rawData[offset + 2];
                    data[offset + 2] = rawData[offset + 3];
                    data[offset + 3] = rawData[offset];
                }
                return(data);
            }

            default:
                Debug.Log($"Getting the raw data on an unsupported texture format '{UnityTexture.format}'.");
                // todo
                break;
            }
            return(data);
        }
Beispiel #4
0
        internal void SetData(uint[] data, int startOffset = 0, int elementCount = 0)
        {
            var textureWidth = UnityTexture.width;

            if (elementCount == 0)
            {
                elementCount = data.Length;
            }
            else
            {
                elementCount *= textureWidth;
            }
            // startOffset *= textureWidth;

            var destText   = UnityTexture as UnityEngine.Texture2D;
            var dst        = destText.GetRawTextureData <uint>();
            var dstLength  = dst.Length;
            var tmp        = new uint[dstLength];
            var dataLength = data.Length;

            for (int i = 0; i < elementCount; i++)
            {
                int x = i % textureWidth;
                int y = i / textureWidth;
                y *= textureWidth;
                var index = y + (textureWidth - x - 1);
                if (index < elementCount && i < dstLength)
                {
                    var  u          = data[dataLength - startOffset - index - 1];
                    uint firstByte  = u & 0xff;
                    uint secondByte = (u >> 8) & 0xff;
                    uint thirdByte  = (u >> 16) & 0xff;
                    uint fourthByte = (u >> 24) & 0xff;
                    tmp[i] = thirdByte << 24 | secondByte << 16 | firstByte << 8 | fourthByte;
                }
            }

            dst.CopyFrom(tmp);

            destText.Apply();

            Hash = UnityTexture.GetHashCode();
        }
Beispiel #5
0
        internal void SetData(ushort[] data, int elementCount)
        {
            var destText     = UnityTexture as UnityEngine.Texture2D;
            var dst          = destText.GetRawTextureData <uint>();
            var tmp          = new uint[elementCount];
            var textureWidth = UnityTexture.width;

            for (int i = 0; i < elementCount; i++)
            {
                int x = i % textureWidth;
                int y = i / textureWidth;
                y *= textureWidth;
                var index = y + (textureWidth - x - 1);
                tmp[i] = (uint)u16Tou32(data[elementCount - index - 1]);
            }

            dst.CopyFrom(tmp);

            destText.Apply();

            Hash = UnityTexture.GetHashCode();
        }
Beispiel #6
0
        internal void SetData(uint[] data, int startOffset = 0, int elementCount = 0, bool invertY = false)
        {
            var textureWidth  = UnityTexture.width;
            var textureHeight = UnityTexture.height;

            if (elementCount == 0)
            {
                elementCount = data.Length;
            }

            var destText  = UnityTexture as UnityEngine.Texture2D;
            var dst       = destText.GetRawTextureData <uint>();
            var dstLength = dst.Length;
            var tmp       = new uint[dstLength];

            for (int i = 0; i < elementCount; i++)
            {
                int x = i % textureWidth;
                int y = i / textureWidth;
                if (invertY)
                {
                    y = textureHeight - y - 1;
                }
                var index = (y * textureWidth) + (textureWidth - x - 1);
                if (index < elementCount && i < dstLength)
                {
                    tmp[i] = data[elementCount + startOffset - index - 1];
                }
            }

            dst.CopyFrom(tmp);

            destText.Apply();

            Hash = UnityTexture.GetHashCode();
        }