aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs')
-rw-r--r--src/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs b/src/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs
new file mode 100644
index 00000000..6bbff2de
--- /dev/null
+++ b/src/Ryujinx.Common/GraphicsDriver/NVAPI/NvapiUnicodeString.cs
@@ -0,0 +1,42 @@
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Ryujinx.Common.GraphicsDriver.NVAPI
+{
+ [StructLayout(LayoutKind.Sequential, Pack = 4)]
+ public unsafe struct NvapiUnicodeString
+ {
+ private fixed byte _data[4096];
+
+ public NvapiUnicodeString(string text)
+ {
+ Set(text);
+ }
+
+ public string Get()
+ {
+ fixed (byte* data = _data)
+ {
+ string text = Encoding.Unicode.GetString(data, 4096);
+
+ int index = text.IndexOf('\0');
+ if (index > -1)
+ {
+ text = text.Remove(index);
+ }
+
+ return text;
+ }
+ }
+
+ public void Set(string text)
+ {
+ text += '\0';
+ fixed (char* textPtr = text)
+ fixed (byte* data = _data)
+ {
+ int written = Encoding.Unicode.GetBytes(textPtr, text.Length, data, 4096);
+ }
+ }
+ }
+}