diff --git a/README.md b/README.md index 56c0c71..2e4190e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![Raylib-cs Logo](https://raw.githubusercontent.com/ChrisDill/Raylib-cs/master/Logo/raylib-cs_256x256.png "Raylib-cs Logo") +![Raylib-cs Logo](https://raw.githubusercontent.com/ChrisDill/Raylib-cs/master/Raylib-cs/logo/raylib-cs_256x256.png "Raylib-cs Logo") # Raylib-cs diff --git a/Raylib-cs.Tests/Raylib-cs.Tests.csproj b/Raylib-cs.Tests/Raylib-cs.Tests.csproj index 4c3e612..fd8921a 100644 --- a/Raylib-cs.Tests/Raylib-cs.Tests.csproj +++ b/Raylib-cs.Tests/Raylib-cs.Tests.csproj @@ -1,7 +1,6 @@ net6.0 - ../Logo/raylib-cs.ico true diff --git a/Raylib-cs/Raylib-cs.csproj b/Raylib-cs/Raylib-cs.csproj index e0db93b..419ef1a 100644 --- a/Raylib-cs/Raylib-cs.csproj +++ b/Raylib-cs/Raylib-cs.csproj @@ -32,7 +32,7 @@ - + @@ -53,7 +53,8 @@ - + + diff --git a/Logo/logo_cs.jpg b/Raylib-cs/logo/logo_cs.jpg similarity index 100% rename from Logo/logo_cs.jpg rename to Raylib-cs/logo/logo_cs.jpg diff --git a/Logo/raylib-cs.ico b/Raylib-cs/logo/raylib-cs.ico similarity index 100% rename from Logo/raylib-cs.ico rename to Raylib-cs/logo/raylib-cs.ico diff --git a/Logo/raylib-cs.pdn b/Raylib-cs/logo/raylib-cs.pdn similarity index 100% rename from Logo/raylib-cs.pdn rename to Raylib-cs/logo/raylib-cs.pdn diff --git a/Logo/raylib-cs_128x128.png b/Raylib-cs/logo/raylib-cs_128x128.png similarity index 100% rename from Logo/raylib-cs_128x128.png rename to Raylib-cs/logo/raylib-cs_128x128.png diff --git a/Logo/raylib-cs_16x16.png b/Raylib-cs/logo/raylib-cs_16x16.png similarity index 100% rename from Logo/raylib-cs_16x16.png rename to Raylib-cs/logo/raylib-cs_16x16.png diff --git a/Logo/raylib-cs_24x24.png b/Raylib-cs/logo/raylib-cs_24x24.png similarity index 100% rename from Logo/raylib-cs_24x24.png rename to Raylib-cs/logo/raylib-cs_24x24.png diff --git a/Logo/raylib-cs_256x256.png b/Raylib-cs/logo/raylib-cs_256x256.png similarity index 100% rename from Logo/raylib-cs_256x256.png rename to Raylib-cs/logo/raylib-cs_256x256.png diff --git a/Logo/raylib-cs_32x32.png b/Raylib-cs/logo/raylib-cs_32x32.png similarity index 100% rename from Logo/raylib-cs_32x32.png rename to Raylib-cs/logo/raylib-cs_32x32.png diff --git a/Logo/raylib-cs_48x48.png b/Raylib-cs/logo/raylib-cs_48x48.png similarity index 100% rename from Logo/raylib-cs_48x48.png rename to Raylib-cs/logo/raylib-cs_48x48.png diff --git a/Logo/raylib-cs_64x64.png b/Raylib-cs/logo/raylib-cs_64x64.png similarity index 100% rename from Logo/raylib-cs_64x64.png rename to Raylib-cs/logo/raylib-cs_64x64.png diff --git a/Logo/raylib-cs_96x96.png b/Raylib-cs/logo/raylib-cs_96x96.png similarity index 100% rename from Logo/raylib-cs_96x96.png rename to Raylib-cs/logo/raylib-cs_96x96.png diff --git a/Raylib-cs/types/Raylib.Utils.cs b/Raylib-cs/types/Raylib.Utils.cs index 1f10d68..762015d 100644 --- a/Raylib-cs/types/Raylib.Utils.cs +++ b/Raylib-cs/types/Raylib.Utils.cs @@ -9,14 +9,14 @@ namespace Raylib_cs /// Initialize window and OpenGL context public static void InitWindow(int width, int height, string title) { - using var str1 = title.ToUTF8Buffer(); + using var str1 = title.ToUtf8Buffer(); InitWindow(width, height, str1.AsPointer()); } /// Set title for window (only PLATFORM_DESKTOP) public static void SetWindowTitle(string title) { - using var str1 = title.ToUTF8Buffer(); + using var str1 = title.ToUtf8Buffer(); SetWindowTitle(str1.AsPointer()); } @@ -35,94 +35,94 @@ namespace Raylib_cs /// Set clipboard text content public static void SetClipboardText(string text) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); SetClipboardText(str1.AsPointer()); } - + /// Open URL with default system browser (if available) public static void OpenURL(string url) { - using var str1 = url.ToUTF8Buffer(); + using var str1 = url.ToUtf8Buffer(); OpenURL(str1.AsPointer()); } - + /// Set internal gamepad mappings (SDL_GameControllerDB) public static int SetGamepadMappings(string mappings) { - using var str1 = mappings.ToUTF8Buffer(); + using var str1 = mappings.ToUtf8Buffer(); return SetGamepadMappings(str1.AsPointer()); } /// Load shader from files and bind default locations 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()); } /// Load shader from code string and bind default locations public static Shader LoadShaderFromMemory(string vsCode, string fsCode) { - using var str1 = vsCode.ToUTF8Buffer(); - using var str2 = fsCode.ToUTF8Buffer(); + using var str1 = vsCode.ToUtf8Buffer(); + using var str2 = fsCode.ToUtf8Buffer(); return LoadShaderFromMemory(str1.AsPointer(), str2.AsPointer()); } /// Get shader uniform location public static int GetShaderLocation(Shader shader, string uniformName) { - using var str1 = uniformName.ToUTF8Buffer(); + using var str1 = uniformName.ToUtf8Buffer(); return GetShaderLocation(shader, str1.AsPointer()); } /// Get shader attribute location public static int GetShaderLocationAttrib(Shader shader, string attribName) { - using var str1 = attribName.ToUTF8Buffer(); + using var str1 = attribName.ToUtf8Buffer(); return GetShaderLocationAttrib(shader, str1.AsPointer()); } /// Takes a screenshot of current screen (saved a .png) public static void TakeScreenshot(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); TakeScreenshot(str1.AsPointer()); } /// Check file extension 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()); } /// Get file modification time (last write time) public static long GetFileModTime(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return GetFileModTime(str1.AsPointer()); } /// Load image from file into CPU memory (RAM) public static Image LoadImage(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return LoadImage(str1.AsPointer()); } /// Load image from RAW file data 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); } /// Load image sequence from file (frames appended to image.data) 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); @@ -134,7 +134,7 @@ namespace Raylib_cs /// 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); @@ -145,21 +145,21 @@ namespace Raylib_cs /// Export image data to file public static CBool ExportImage(Image image, string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return ExportImage(image, str1.AsPointer()); } /// Export image as code file defining an array of bytes public static CBool ExportImageAsCode(Image image, string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return ExportImageAsCode(image, str1.AsPointer()); } /// Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR) public static void TraceLog(TraceLogLevel logLevel, string text) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); TraceLog(logLevel, str1.AsPointer()); } @@ -225,7 +225,7 @@ namespace Raylib_cs /// Load file data as byte array (read) 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); @@ -291,14 +291,14 @@ namespace Raylib_cs /// Create an image from text (default font) public static Image ImageText(string text, int fontSize, Color color) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); return ImageText(str1.AsPointer(), fontSize, color); } /// Create an image from text (custom sprite font) public static Image ImageTextEx(Font font, string text, float fontSize, float spacing, Color tint) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); return ImageTextEx(font, str1.AsPointer(), fontSize, spacing, tint); } @@ -634,7 +634,7 @@ namespace Raylib_cs /// Draw text (using default font) within an image (destination) public static void ImageDrawText(ref Image dst, string text, int x, int y, int fontSize, Color color) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); fixed (Image* p = &dst) { ImageDrawText(p, str1.AsPointer(), x, y, fontSize, color); @@ -652,7 +652,7 @@ namespace Raylib_cs Color color ) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); fixed (Image* p = &dst) { ImageDrawTextEx(p, font, str1.AsPointer(), position, fontSize, spacing, color); @@ -662,7 +662,7 @@ namespace Raylib_cs /// Load texture from file into GPU memory (VRAM) public static Texture2D LoadTexture(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return LoadTexture(str1.AsPointer()); } @@ -708,14 +708,14 @@ namespace Raylib_cs /// Load font from file into GPU memory (VRAM) public static Font LoadFont(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return LoadFont(str1.AsPointer()); } /// Load font from file with extended parameters 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); @@ -733,7 +733,7 @@ namespace Raylib_cs int glyphCount ) { - using var fileTypeNative = fileType.ToUTF8Buffer(); + using var fileTypeNative = fileType.ToAnsiBuffer(); fixed (byte* fileDataNative = fileData) { fixed (int* fontCharsNative = fontChars) @@ -791,7 +791,7 @@ namespace Raylib_cs /// Load model animations from file public static ReadOnlySpan 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); @@ -862,7 +862,7 @@ namespace Raylib_cs /// Draw text (using default font) public static void DrawText(string text, int posX, int posY, int fontSize, Color color) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); DrawText(str1.AsPointer(), posX, posY, fontSize, color); } @@ -876,7 +876,7 @@ namespace Raylib_cs Color tint ) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); DrawTextEx(font, str1.AsPointer(), position, fontSize, spacing, tint); } @@ -892,28 +892,28 @@ namespace Raylib_cs Color tint ) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); DrawTextPro(font, str1.AsPointer(), position, origin, rotation, fontSize, spacing, tint); } /// Measure string width for default font public static int MeasureText(string text, int fontSize) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); return MeasureText(str1.AsPointer(), fontSize); } /// Measure string size for Font public static Vector2 MeasureTextEx(Font font, string text, float fontSize, float spacing) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); return MeasureTextEx(font, str1.AsPointer(), fontSize, spacing); } /// Get all codepoints in a string, codepoints count returned by parameters public static int[] LoadCodepoints(string text, ref int count) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); fixed (int* c = &count) { var pointsPtr = LoadCodepoints(str1.AsPointer(), c); @@ -926,14 +926,14 @@ namespace Raylib_cs /// Get total number of codepoints in a UTF8 encoded string public static int GetCodepointCount(string text) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); return GetCodepointCount(str1.AsPointer()); } /// Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure public static int GetCodepoint(string text, ref int codepointSize) { - using var str1 = text.ToUTF8Buffer(); + using var str1 = text.ToUtf8Buffer(); fixed (int* p = &codepointSize) { return GetCodepoint(str1.AsPointer(), p); @@ -965,14 +965,14 @@ namespace Raylib_cs /// Draw a model (with texture if set) public static Model LoadModel(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return LoadModel(str1.AsPointer()); } /// Export mesh data to file, returns true on success public static CBool ExportMesh(Mesh mesh, string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return ExportMesh(mesh, str1.AsPointer()); } @@ -997,7 +997,7 @@ namespace Raylib_cs /// Load wave data from file public static Wave LoadWave(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return LoadWave(str1.AsPointer()); } @@ -1009,7 +1009,7 @@ namespace Raylib_cs byte[] fileData ) { - using var fileTypeNative = fileType.ToUTF8Buffer(); + using var fileTypeNative = fileType.ToAnsiBuffer(); fixed (byte* fileDataNative = fileData) { @@ -1026,28 +1026,28 @@ namespace Raylib_cs /// Load sound from file public static Sound LoadSound(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return LoadSound(str1.AsPointer()); } /// Export wave data to file public static CBool ExportWave(Wave wave, string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return ExportWave(wave, str1.AsPointer()); } /// Export wave sample data to code (.h) public static CBool ExportWaveAsCode(Wave wave, string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return ExportWaveAsCode(wave, str1.AsPointer()); } /// Load music stream from file public static Music LoadMusicStream(string fileName) { - using var str1 = fileName.ToUTF8Buffer(); + using var str1 = fileName.ToAnsiBuffer(); return LoadMusicStream(str1.AsPointer()); } @@ -1059,7 +1059,7 @@ namespace Raylib_cs byte[] fileData ) { - using var fileTypeNative = fileType.ToUTF8Buffer(); + using var fileTypeNative = fileType.ToAnsiBuffer(); fixed (byte* fileDataNative = fileData) { diff --git a/Raylib-cs/types/Rectangle.cs b/Raylib-cs/types/Rectangle.cs index 587443f..cd21ae9 100644 --- a/Raylib-cs/types/Rectangle.cs +++ b/Raylib-cs/types/Rectangle.cs @@ -13,7 +13,8 @@ namespace Raylib_cs public float Width; public float Height; - public Rectangle(float x, float y, float width, float height) { + public Rectangle(float x, float y, float width, float height) + { this.X = x; this.Y = y; this.Width = width; diff --git a/Raylib-cs/types/native/AnsiBuffer.cs b/Raylib-cs/types/native/AnsiBuffer.cs new file mode 100644 index 0000000..311496a --- /dev/null +++ b/Raylib-cs/types/native/AnsiBuffer.cs @@ -0,0 +1,36 @@ +using System; +using System.Runtime.InteropServices; + +namespace Raylib_cs +{ + /// + /// Converts text to a Ansi buffer for passing to native code + /// + 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); + } + } +} diff --git a/Raylib-cs/types/native/UTF8Buffer.cs b/Raylib-cs/types/native/Utf8Buffer.cs similarity index 76% rename from Raylib-cs/types/native/UTF8Buffer.cs rename to Raylib-cs/types/native/Utf8Buffer.cs index 654cfe9..200ab75 100644 --- a/Raylib-cs/types/native/UTF8Buffer.cs +++ b/Raylib-cs/types/native/Utf8Buffer.cs @@ -1,19 +1,19 @@ -using System; -using System.Text; +using System; using System.Runtime.InteropServices; +using System.Text; namespace Raylib_cs { /// /// Converts text to a UTF8 buffer for passing to native code /// - public ref struct UTF8Buffer + public readonly ref struct Utf8Buffer { - private IntPtr _data; + private readonly IntPtr _data; - public UTF8Buffer(string text) + public Utf8Buffer(string text) { - _data = Marshal.StringToHGlobalAnsi(text); + _data = Marshal.StringToCoTaskMemUTF8(text); } public unsafe sbyte* AsPointer() @@ -23,15 +23,15 @@ namespace Raylib_cs public void Dispose() { - Marshal.FreeHGlobal(_data); + Marshal.ZeroFreeCoTaskMemUTF8(_data); } } public static class Utf8StringUtils { - public static UTF8Buffer ToUTF8Buffer(this string text) + public static Utf8Buffer ToUtf8Buffer(this string text) { - return new UTF8Buffer(text); + return new Utf8Buffer(text); } public static byte[] ToUtf8String(this string text)