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(); }
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(); }
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); }
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(); }
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(); }
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(); }