diff --git a/ANX.Framework.TestCenter/ContentPipeline/Helper/Compiler.cs b/ANX.Framework.TestCenter/ContentPipeline/Helper/Compiler.cs index 133c3be4..2f511bc3 100644 --- a/ANX.Framework.TestCenter/ContentPipeline/Helper/Compiler.cs +++ b/ANX.Framework.TestCenter/ContentPipeline/Helper/Compiler.cs @@ -105,6 +105,15 @@ namespace ANX.Framework.TestCenter.ContentPipeline.Helper false, contentRootDirectory, referenceLocationPath); } + public void WriteAsset(Stream output, object value, bool compress) + { + WriteAsset(output, + value, + Microsoft.Xna.Framework.Content.Pipeline.TargetPlatform.Windows, + Microsoft.Xna.Framework.Graphics.GraphicsProfile.HiDef, + compress, contentRootDirectory, referenceLocationPath); + } + public void AddTypeWriter(ContentTypeWriter writer) { MethodInfo addTypeWriter = GetPrivateMethod("AddTypeWriter"); diff --git a/ANX.Framework.TestCenter/ContentPipeline/MathTypesTests.cs b/ANX.Framework.TestCenter/ContentPipeline/MathTypesTests.cs index 2fc5401c..f8a64e50 100644 --- a/ANX.Framework.TestCenter/ContentPipeline/MathTypesTests.cs +++ b/ANX.Framework.TestCenter/ContentPipeline/MathTypesTests.cs @@ -74,17 +74,45 @@ namespace ANX.Framework.TestCenter.ContentPipeline } [Test] - public void TestCompiler() + public void TestCompileWithoutCompression() { using (var stream = new MemoryStream()) { - Compiler.WriteAsset(stream, - ANX.Framework.Color.CornflowerBlue); + Compiler.WriteAsset(stream, ANX.Framework.Color.CornflowerBlue); stream.Position = 0; - Assert.AreEqual(stream.ReadByte(), 'X'); - Assert.AreEqual(stream.ReadByte(), 'N'); - Assert.AreEqual(stream.ReadByte(), 'B'); + byte[] buffer = new byte[6]; + stream.Read(buffer, 0, 6); + + Assert.AreEqual(buffer[0], 'X'); + Assert.AreEqual(buffer[1], 'N'); + Assert.AreEqual(buffer[2], 'B'); + Assert.AreEqual(buffer[3], 'w'); + + bool compressed = (buffer[5] >> 4) > 0; + Assert.AreEqual(compressed, false); + } + } + + [Test] + public void TestCompileWithCompression() + { + using (var stream = new MemoryStream()) + { + //System.Diagnostics.Debugger.Launch(); + Compiler.WriteAsset(stream, ANX.Framework.Color.CornflowerBlue, true); + + stream.Position = 0; + byte[] buffer = new byte[6]; + stream.Read(buffer, 0, 6); + + Assert.AreEqual(buffer[0], 'X'); + Assert.AreEqual(buffer[1], 'N'); + Assert.AreEqual(buffer[2], 'B'); + Assert.AreEqual(buffer[3], 'w'); + + bool compressed = (buffer[5] >> 4) > 0; + Assert.AreEqual(compressed, true); } } @@ -94,8 +122,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline Assert.Fail("not implemented"); } - [Test] - public void TestBoundingBoxSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestBoundingBoxSerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -110,7 +139,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline Max = new AnxFrame.Vector3(4, 5, 6) }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Box"); @@ -118,8 +147,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestBoundingFrustumSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestBoundingFrustumSerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -167,7 +197,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline M44 = 44, }); - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Frustum"); @@ -175,8 +205,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestBoundingSphereSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestBoundingSphereSerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -191,7 +222,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline Radius = 4 }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Sphere"); @@ -199,13 +230,14 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestColorSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestColorSerialization(bool compress) { using(var stream = new MemoryStream()) { var input = Microsoft.Xna.Framework.Color.CornflowerBlue; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); //System.Diagnostics.Debugger.Launch(); stream.Position = 0; @@ -219,8 +251,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } - [Test] - public void TestMatrixSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestMatrixSerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -269,7 +302,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline M44 = 44, }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Matrix"); @@ -277,8 +310,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestPlaneSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestPlaneSerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -293,7 +327,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline D = 4 }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Plane"); @@ -301,8 +335,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestPointSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestPointSerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -317,7 +352,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline Y = 2 }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Point"); @@ -325,8 +360,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestQuaternionSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestQuaternionSerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -345,7 +381,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline W = 4 }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Quaternion"); @@ -353,8 +389,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestRaySerialization() + [TestCase(false)] + [TestCase(true)] + public void TestRaySerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -369,7 +406,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline Direction = new AnxFrame.Vector3(4, 5, 6), }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Ray"); @@ -377,8 +414,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestRectangleSerialization() + [TestCase(false)] + [TestCase(true)] + public void TestRectangleSerialization(bool compress) { using (var stream = new MemoryStream()) { @@ -397,7 +435,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline Height = 4 }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Rectangle"); @@ -405,8 +443,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestVector2Serialization() + [TestCase(false)] + [TestCase(true)] + public void TestVector2Serialization(bool compress) { using (var stream = new MemoryStream()) { @@ -421,7 +460,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline Y = 2 }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Vector2"); @@ -429,8 +468,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestVector3Serialization() + [TestCase(false)] + [TestCase(true)] + public void TestVector3Serialization(bool compress) { using (var stream = new MemoryStream()) { @@ -447,7 +487,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline Z = 3 }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Vector3"); @@ -455,8 +495,9 @@ namespace ANX.Framework.TestCenter.ContentPipeline } } - [Test] - public void TestVector4Serialization() + [TestCase(false)] + [TestCase(true)] + public void TestVector4Serialization(bool compress) { using (var stream = new MemoryStream()) { @@ -475,7 +516,7 @@ namespace ANX.Framework.TestCenter.ContentPipeline W = 4 }; - Compiler.WriteAsset(stream, input); + Compiler.WriteAsset(stream, input, compress); stream.Position = 0; var actual = AnxFrame.Content.ContentReader.ReadAsset(null, stream, "Vector4"); diff --git a/ANX.Framework/Content/ContentReader.cs b/ANX.Framework/Content/ContentReader.cs index 8d9fc13c..4b08b06c 100644 --- a/ANX.Framework/Content/ContentReader.cs +++ b/ANX.Framework/Content/ContentReader.cs @@ -174,13 +174,12 @@ namespace ANX.Framework.Content bool isCompressed = (flags & 0x80) != 0; - uint sizeOnDisk = reader.ReadUInt32(); + int sizeOnDisk = reader.ReadInt32(); // TODO: check stream length if (isCompressed) { - int decompressedSize = reader.ReadInt32(); - return Decompressor.DecompressStream(reader, input, decompressedSize); + return Decompressor.DecompressStream(reader, input, sizeOnDisk); } else { diff --git a/Samples/SimpleSprite/SimpleSprite.csproj b/Samples/SimpleSprite/SimpleSprite.csproj index 6b4c3c11..f978179e 100644 --- a/Samples/SimpleSprite/SimpleSprite.csproj +++ b/Samples/SimpleSprite/SimpleSprite.csproj @@ -45,7 +45,7 @@ true false x86 - false + False pdbonly