Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix #184] Seperate UTF8 from Ansi #185

Merged
merged 4 commits into from
Aug 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Raylib-cs/Raylib-cs.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
<Compile Include="interop\*.cs" />
<Compile Include="types\*.cs" />
<Compile Include="types\native\CBool.cs" />
<Compile Include="types\native\AnsiBuffer.cs" />
<Compile Include="types\native\UTF8Buffer.cs" />
<Compile Include="types\native\FilePathList.cs" />
</ItemGroup>
Expand Down
54 changes: 27 additions & 27 deletions Raylib-cs/types/Raylib.Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ public static int SetGamepadMappings(string mappings)
/// <summary>Load shader from files and bind default locations</summary>
public static Shader LoadShader(string vsFileName, string fsFileName)
{
using var str1 = vsFileName.ToUTF8Buffer();
using var str2 = fsFileName.ToUTF8Buffer();
using var str1 = vsFileName.ToAnsiBuffer();
using var str2 = fsFileName.ToAnsiBuffer();
return LoadShader(str1.AsPointer(), str2.AsPointer());
}

Expand Down Expand Up @@ -86,43 +86,43 @@ public static int GetShaderLocationAttrib(Shader shader, string attribName)
/// <summary>Takes a screenshot of current screen (saved a .png)</summary>
public static void TakeScreenshot(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
TakeScreenshot(str1.AsPointer());
}

/// <summary>Check file extension</summary>
public static CBool IsFileExtension(string fileName, string ext)
{
using var str1 = fileName.ToUTF8Buffer();
using var str2 = ext.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
using var str2 = ext.ToAnsiBuffer();
return IsFileExtension(str1.AsPointer(), str2.AsPointer());
}

/// <summary>Get file modification time (last write time)</summary>
public static long GetFileModTime(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return GetFileModTime(str1.AsPointer());
}

/// <summary>Load image from file into CPU memory (RAM)</summary>
public static Image LoadImage(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return LoadImage(str1.AsPointer());
}

/// <summary>Load image from RAW file data</summary>
public static Image LoadImageRaw(string fileName, int width, int height, PixelFormat format, int headerSize)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return LoadImageRaw(str1.AsPointer(), width, height, format, headerSize);
}

/// <summary>Load image sequence from file (frames appended to image.data)</summary>
public static Image LoadImageAnim(string fileName, out int frames)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
fixed (int* p = &frames)
{
return LoadImageAnim(str1.AsPointer(), p);
Expand All @@ -134,7 +134,7 @@ public static Image LoadImageAnim(string fileName, out int frames)
/// </summary>
public static Image LoadImageFromMemory(string fileType, byte[] fileData)
{
using var fileTypeNative = fileType.ToUTF8Buffer();
using var fileTypeNative = fileType.ToAnsiBuffer();
fixed (byte* fileDataNative = fileData)
{
Image image = LoadImageFromMemory(fileTypeNative.AsPointer(), fileDataNative, fileData.Length);
Expand All @@ -145,14 +145,14 @@ public static Image LoadImageFromMemory(string fileType, byte[] fileData)
/// <summary>Export image data to file</summary>
public static CBool ExportImage(Image image, string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return ExportImage(image, str1.AsPointer());
}

/// <summary>Export image as code file defining an array of bytes</summary>
public static CBool ExportImageAsCode(Image image, string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return ExportImageAsCode(image, str1.AsPointer());
}

Expand Down Expand Up @@ -225,7 +225,7 @@ ShaderUniformDataType uniformType
/// <summary>Load file data as byte array (read)</summary>
public static byte* LoadFileData(string fileName, ref uint bytesRead)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
fixed (uint* p = &bytesRead)
{
return LoadFileData(str1.AsPointer(), p);
Expand Down Expand Up @@ -662,7 +662,7 @@ Color color
/// <summary>Load texture from file into GPU memory (VRAM)</summary>
public static Texture2D LoadTexture(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return LoadTexture(str1.AsPointer());
}

Expand Down Expand Up @@ -708,14 +708,14 @@ public static void GenTextureMipmaps(ref Texture2D texture)
/// <summary>Load font from file into GPU memory (VRAM)</summary>
public static Font LoadFont(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return LoadFont(str1.AsPointer());
}

/// <summary>Load font from file with extended parameters</summary>
public static Font LoadFontEx(string fileName, int fontSize, int[] fontChars, int glyphCount)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
fixed (int* p = fontChars)
{
return LoadFontEx(str1.AsPointer(), fontSize, p, glyphCount);
Expand All @@ -733,7 +733,7 @@ public static Font LoadFontFromMemory(
int glyphCount
)
{
using var fileTypeNative = fileType.ToUTF8Buffer();
using var fileTypeNative = fileType.ToAnsiBuffer();
fixed (byte* fileDataNative = fileData)
{
fixed (int* fontCharsNative = fontChars)
Expand Down Expand Up @@ -791,7 +791,7 @@ public static void SetModelMeshMaterial(ref Model model, int meshId, int materia
/// <summary>Load model animations from file</summary>
public static ReadOnlySpan<ModelAnimation> LoadModelAnimations(string fileName, ref uint animCount)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
fixed (uint* p = &animCount)
{
ModelAnimation* modelAnimations = LoadModelAnimations(str1.AsPointer(), p);
Expand Down Expand Up @@ -965,14 +965,14 @@ public static string LoadUTF8(int[] codepoints, int length)
/// <summary>Draw a model (with texture if set)</summary>
public static Model LoadModel(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return LoadModel(str1.AsPointer());
}

/// <summary>Export mesh data to file, returns true on success</summary>
public static CBool ExportMesh(Mesh mesh, string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return ExportMesh(mesh, str1.AsPointer());
}

Expand All @@ -997,7 +997,7 @@ public static void DrawMeshInstanced(Mesh mesh, Material material, Matrix4x4[] t
/// <summary>Load wave data from file</summary>
public static Wave LoadWave(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return LoadWave(str1.AsPointer());
}

Expand All @@ -1009,7 +1009,7 @@ public static Wave LoadWaveFromMemory(
byte[] fileData
)
{
using var fileTypeNative = fileType.ToUTF8Buffer();
using var fileTypeNative = fileType.ToAnsiBuffer();

fixed (byte* fileDataNative = fileData)
{
Expand All @@ -1026,28 +1026,28 @@ byte[] fileData
/// <summary>Load sound from file</summary>
public static Sound LoadSound(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return LoadSound(str1.AsPointer());
}

/// <summary>Export wave data to file</summary>
public static CBool ExportWave(Wave wave, string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return ExportWave(wave, str1.AsPointer());
}

/// <summary>Export wave sample data to code (.h)</summary>
public static CBool ExportWaveAsCode(Wave wave, string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return ExportWaveAsCode(wave, str1.AsPointer());
}

/// <summary>Load music stream from file</summary>
public static Music LoadMusicStream(string fileName)
{
using var str1 = fileName.ToUTF8Buffer();
using var str1 = fileName.ToAnsiBuffer();
return LoadMusicStream(str1.AsPointer());
}

Expand All @@ -1059,7 +1059,7 @@ public static Music LoadMusicStreamFromMemory(
byte[] fileData
)
{
using var fileTypeNative = fileType.ToUTF8Buffer();
using var fileTypeNative = fileType.ToAnsiBuffer();

fixed (byte* fileDataNative = fileData)
{
Expand Down
36 changes: 36 additions & 0 deletions Raylib-cs/types/native/AnsiBuffer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System;
using System.Runtime.InteropServices;

namespace Raylib_cs
{
/// <summary>
/// Converts text to a Ansi buffer for passing to native code
/// </summary>
public readonly ref struct AnsiBuffer
{
private readonly IntPtr data;

public AnsiBuffer(string text)
{
data = Marshal.StringToHGlobalAnsi(text);
}

public unsafe sbyte* AsPointer()
{
return (sbyte*)data.ToPointer();
}

public void Dispose()
{
Marshal.FreeHGlobal(data);
}
}

public static class AnsiStringUtils
{
public static AnsiBuffer ToAnsiBuffer(this string text)
{
return new AnsiBuffer(text);
}
}
}
12 changes: 6 additions & 6 deletions Raylib-cs/types/native/UTF8Buffer.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
using System;
using System.Text;
using System;
using System.Runtime.InteropServices;
using System.Text;

namespace Raylib_cs
{
/// <summary>
/// Converts text to a UTF8 buffer for passing to native code
/// </summary>
public ref struct UTF8Buffer
public readonly ref struct UTF8Buffer
{
private IntPtr data;
private readonly IntPtr data;

public UTF8Buffer(string text)
{
this.data = Marshal.StringToHGlobalAnsi(text);
data = Marshal.StringToCoTaskMemUTF8(text);
}

public unsafe sbyte* AsPointer()
Expand All @@ -23,7 +23,7 @@ public UTF8Buffer(string text)

public void Dispose()
{
Marshal.FreeHGlobal(data);
Marshal.ZeroFreeCoTaskMemUTF8(data);
}
}

Expand Down