From b4d91402c676035cf574983148c2d8682b3cf6f3 Mon Sep 17 00:00:00 2001 From: Thomas Guillemard Date: Sat, 5 Jan 2019 22:26:16 +0100 Subject: Some improvements for nvnflinger (#555) * Initial fixes for last release of libnx For now, the framebuffer aren't okay but it will not crash/ * Improve code reaadability in NvFlinger parsing * Make surfaces access more userfriendly * Add ColorFormat * Fix code style in ColorFormat.cs * Add multiple framebuffer support in nvnflinger This fix libnx console rendering * Move ReadStruct/WriteStruct to Ryujinx.Common * fix the last nit * Fix inverted color for R5G6B5 Also add some other format that libnx might uses. * Remove hardcoded BlockHeight in nvflinger --- Ryujinx.Common/StructIOExtension.cs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Ryujinx.Common/StructIOExtension.cs (limited to 'Ryujinx.Common/StructIOExtension.cs') diff --git a/Ryujinx.Common/StructIOExtension.cs b/Ryujinx.Common/StructIOExtension.cs new file mode 100644 index 00000000..8671b192 --- /dev/null +++ b/Ryujinx.Common/StructIOExtension.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; + +namespace Ryujinx.Common +{ + public static class StructIOExtension + { + public unsafe static T ReadStruct(this BinaryReader reader) where T : struct + { + int size = Marshal.SizeOf(); + + byte[] data = reader.ReadBytes(size); + + fixed (byte* ptr = data) + { + return Marshal.PtrToStructure((IntPtr)ptr); + } + } + + public unsafe static void WriteStruct(this BinaryWriter writer, T value) where T : struct + { + long size = Marshal.SizeOf(); + + byte[] data = new byte[size]; + + fixed (byte* ptr = data) + { + Marshal.StructureToPtr(value, (IntPtr)ptr, false); + } + + writer.Write(data); + } + } +} -- cgit v1.2.3