public void OnButtonStreamLoadFile() { AssetStream stream = new AssetStream(TEST_FILE); byte[] data = new byte[stream.Length]; stream.Read(data, 0, data.Length); stream.Close(); result.text = System.Text.Encoding.ASCII.GetString(data); }
public void OnButtonStreamRead5() { if (_stream == null) { _stream = new AssetStream(TEST_FILE); } byte[] data = new byte[5]; _stream.Read(data, 0, data.Length); result.text += System.Text.Encoding.ASCII.GetString(data); }
public override void Read(AssetStream stream) { if (IsSerialized(stream.Version)) { ReadBase(stream); ParsedForm.Read(stream); Name = ParsedForm.Name; m_platforms = stream.ReadEnum32Array((t) => (GPUPlatform)t); uint[] offsets = stream.ReadUInt32Array(); uint[] compressedLengths = stream.ReadUInt32Array(); uint[] decompressedLengths = stream.ReadUInt32Array(); byte[] compressedBlob = stream.ReadByteArray(); stream.AlignStream(AlignType.Align4); m_subProgramBlobs = new ShaderSubProgramBlob[m_platforms.Length]; using (MemoryStream memStream = new MemoryStream(compressedBlob)) { for (int i = 0; i < m_platforms.Length; i++) { uint offset = offsets[i]; uint compressedLength = compressedLengths[i]; uint decompressedLength = decompressedLengths[i]; memStream.Position = offset; byte[] decompressedBuffer = new byte[decompressedLength]; using (Lz4Stream lz4Stream = new Lz4Stream(memStream, (int)compressedLength)) { int read = lz4Stream.Read(decompressedBuffer, 0, decompressedBuffer.Length); if (read != decompressedLength) { throw new Exception($"Can't properly decode shader blob. Read {read} but expected {decompressedLength}"); } } using (MemoryStream blobMem = new MemoryStream(decompressedBuffer)) { using (AssetStream blobStream = new AssetStream(blobMem, stream.Version, stream.Platform)) { ShaderSubProgramBlob blob = new ShaderSubProgramBlob(); blob.Read(blobStream); m_subProgramBlobs[i] = blob; } } } } } else { base.Read(stream); if (IsEncoded(stream.Version)) { uint decompressedSize = stream.ReadUInt32(); int comressedSize = stream.ReadInt32(); byte[] subProgramBlob = new byte[comressedSize]; stream.Read(subProgramBlob, 0, comressedSize); stream.AlignStream(AlignType.Align4); if (comressedSize > 0 && decompressedSize > 0) { byte[] decompressedBuffer = new byte[decompressedSize]; using (MemoryStream memStream = new MemoryStream(subProgramBlob)) { using (Lz4Stream lz4Stream = new Lz4Stream(memStream)) { int read = lz4Stream.Read(decompressedBuffer, 0, decompressedBuffer.Length); if (read != decompressedSize) { throw new Exception($"Can't properly decode sub porgram blob. Read {read} but expected {decompressedSize}"); } } } using (MemoryStream memStream = new MemoryStream(decompressedBuffer)) { using (AssetStream blobStream = new AssetStream(memStream, stream.Version, stream.Platform)) { SubProgramBlob.Read(blobStream); } } } } if (IsReadFallback(stream.Version)) { Fallback.Read(stream); } if (IsReadDefaultProperties(stream.Version)) { DefaultProperties.Read(stream); } if (IsReadStaticProperties(stream.Version)) { StaticProperties.Read(stream); } } if (IsReadDependencies(stream.Version)) { m_dependencies = stream.ReadArray <PPtr <Shader> >(); } if (IsReadNonModifiableTextures(stream.Version)) { m_nonModifiableTextures = stream.ReadArray <PPtr <Texture> >(); } if (IsReadShaderIsBaked(stream.Version)) { ShaderIsBaked = stream.ReadBoolean(); stream.AlignStream(AlignType.Align4); } }