diff --git a/Raylib-cs/Raylib.Utils.cs b/Raylib-cs/Raylib.Utils.cs
index f721617..48667e7 100644
--- a/Raylib-cs/Raylib.Utils.cs
+++ b/Raylib-cs/Raylib.Utils.cs
@@ -45,6 +45,47 @@ namespace Raylib_cs
}
}
+ /// Set shader uniform value vector
+ public static void SetShaderValueV(Shader shader, int uniformLoc, T[] values, ShaderUniformDataType uniformType, int count)
+ where T : unmanaged
+ {
+ SetShaderValueV(shader, uniformLoc, (Span)values, uniformType, count);
+ }
+
+ /// Set shader uniform value vector
+ public static void SetShaderValueV(Shader shader, int uniformLoc, Span values, ShaderUniformDataType uniformType, int count)
+ where T : unmanaged
+ {
+ fixed (T* valuePtr = values)
+ {
+ SetShaderValueV(shader, uniformLoc, valuePtr, uniformType, count);
+ }
+ }
+
+ /// Set shader uniform value
+ public static void SetShaderValue(Shader shader, int uniformLoc, T value, ShaderUniformDataType uniformType)
+ where T : unmanaged
+ {
+ SetShaderValue(shader, uniformLoc, &value, uniformType);
+ }
+
+ /// Set shader uniform value
+ public static void SetShaderValue(Shader shader, int uniformLoc, T[] values, ShaderUniformDataType uniformType)
+ where T : unmanaged
+ {
+ SetShaderValue(shader, uniformLoc, (Span)values, uniformType);
+ }
+
+ /// Set shader uniform value
+ public static void SetShaderValue(Shader shader, int uniformLoc, Span values, ShaderUniformDataType uniformType)
+ where T : unmanaged
+ {
+ fixed (T* valuePtr = values)
+ {
+ SetShaderValue(shader, uniformLoc, valuePtr, uniformType);
+ }
+ }
+
/// Set custom trace log
public static void SetTraceLogCallback_(TraceLogCallback callback)
{
@@ -52,6 +93,15 @@ namespace Raylib_cs
traceLogCallback = callback;
}
+ /// Load file data as byte array (read)
+ public static byte* LoadFileData(string fileName, ref uint bytesRead)
+ {
+ fixed (uint* p = &bytesRead)
+ {
+ return LoadFileData(fileName, p);
+ }
+ }
+
/// Get dropped files names (memory should be freed)
public static string[] GetDroppedFiles()
{
@@ -73,7 +123,7 @@ namespace Raylib_cs
return Utf8StringUtils.GetUTF8String(GetGamepadName(gamepad));
}
- ///
+ /// Update camera position for selected mode
public static void UpdateCamera(ref Camera3D camera)
{
fixed (Camera3D* c = &camera)
@@ -82,6 +132,15 @@ namespace Raylib_cs
}
}
+ /// Check the collision between two lines defined by two points each, returns collision point by reference
+ public static CBool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, ref Vector2 collisionPoint)
+ {
+ fixed (Vector2* p = &collisionPoint)
+ {
+ return CheckCollisionLines(startPos1, endPos1, startPos2, endPos2, p);
+ }
+ }
+
/// Create an image from text (default font)
public static Image ImageText(string text, int fontSize, Color color)
{
@@ -100,6 +159,7 @@ namespace Raylib_cs
}
}
+ /// Convert image to POT (power-of-two)
public static void ImageToPOT(ref Image image, Color fill)
{
fixed (Image* p = &image)
@@ -108,6 +168,7 @@ namespace Raylib_cs
}
}
+ /// Convert image data to desired format
public static void ImageFormat(ref Image image, PixelFormat newFormat)
{
fixed (Image* p = &image)
@@ -116,6 +177,7 @@ namespace Raylib_cs
}
}
+ /// Apply alpha mask to image
public static void ImageAlphaMask(ref Image image, Image alphaMask)
{
fixed (Image* p = &image)
@@ -124,6 +186,7 @@ namespace Raylib_cs
}
}
+ /// Clear alpha channel to desired color
public static void ImageAlphaClear(ref Image image, Color color, float threshold)
{
fixed (Image* p = &image)
@@ -132,6 +195,7 @@ namespace Raylib_cs
}
}
+ /// Crop image depending on alpha value
public static void ImageAlphaCrop(ref Image image, float threshold)
{
fixed (Image* p = &image)
@@ -140,6 +204,7 @@ namespace Raylib_cs
}
}
+ /// Premultiply alpha channel
public static void ImageAlphaPremultiply(ref Image image)
{
fixed (Image* p = &image)
@@ -148,6 +213,7 @@ namespace Raylib_cs
}
}
+ /// Crop an image to a defined rectangle
public static void ImageCrop(ref Image image, Rectangle crop)
{
fixed (Image* p = &image)
@@ -156,6 +222,7 @@ namespace Raylib_cs
}
}
+ /// Resize image (Bicubic scaling algorithm)
public static void ImageResize(ref Image image, int newWidth, int newHeight)
{
fixed (Image* p = &image)
@@ -164,6 +231,7 @@ namespace Raylib_cs
}
}
+ /// Resize image (Nearest-Neighbor scaling algorithm)
public static void ImageResizeNN(ref Image image, int newWidth, int newHeight)
{
fixed (Image* p = &image)
@@ -172,6 +240,7 @@ namespace Raylib_cs
}
}
+ /// Resize canvas and fill with color
public static void ImageResizeCanvas(ref Image image, int newWidth, int newHeight, int offsetX, int offsetY, Color color)
{
fixed (Image* p = &image)
@@ -180,6 +249,7 @@ namespace Raylib_cs
}
}
+ /// Generate all mipmap levels for a provided image
public static void ImageMipmaps(ref Image image)
{
fixed (Image* p = &image)
@@ -188,6 +258,7 @@ namespace Raylib_cs
}
}
+ /// Dither image data to 16bpp or lower (Floyd-Steinberg dithering)
public static void ImageDither(ref Image image, int rBpp, int gBpp, int bBpp, int aBpp)
{
fixed (Image* p = &image)
@@ -196,6 +267,7 @@ namespace Raylib_cs
}
}
+ /// Flip image vertically
public static void ImageFlipVertical(ref Image image)
{
fixed (Image* p = &image)
@@ -204,6 +276,7 @@ namespace Raylib_cs
}
}
+ /// Flip image horizontally
public static void ImageFlipHorizontal(ref Image image)
{
fixed (Image* p = &image)
@@ -212,6 +285,7 @@ namespace Raylib_cs
}
}
+ /// Rotate image clockwise 90deg
public static void ImageRotateCW(ref Image image)
{
fixed (Image* p = &image)
@@ -220,6 +294,7 @@ namespace Raylib_cs
}
}
+ /// Rotate image counter-clockwise 90deg
public static void ImageRotateCCW(ref Image image)
{
fixed (Image* p = &image)
@@ -228,6 +303,7 @@ namespace Raylib_cs
}
}
+ /// Modify image color: tint
public static void ImageColorTint(ref Image image, Color color)
{
fixed (Image* p = &image)
@@ -236,6 +312,7 @@ namespace Raylib_cs
}
}
+ /// Modify image color: invert
public static void ImageColorInvert(ref Image image)
{
fixed (Image* p = &image)
@@ -244,6 +321,7 @@ namespace Raylib_cs
}
}
+ /// Modify image color: grayscale
public static void ImageColorGrayscale(ref Image image)
{
fixed (Image* p = &image)
@@ -252,6 +330,7 @@ namespace Raylib_cs
}
}
+ /// Modify image color: contrast (-100 to 100)
public static void ImageColorContrast(ref Image image, float contrast)
{
fixed (Image* p = &image)
@@ -260,6 +339,7 @@ namespace Raylib_cs
}
}
+ /// Modify image color: brightness (-255 to 255)
public static void ImageColorBrightness(ref Image image, int brightness)
{
fixed (Image* p = &image)
@@ -268,6 +348,7 @@ namespace Raylib_cs
}
}
+ /// Modify image color: replace color
public static void ImageColorReplace(ref Image image, Color color, Color replace)
{
fixed (Image* p = &image)
@@ -276,7 +357,16 @@ namespace Raylib_cs
}
}
- ///
+ /// Clear image background with given color
+ public static void ImageClearBackground(ref Image dst, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageClearBackground(p, color);
+ }
+ }
+
+ /// Draw pixel within an image
public static void ImageDrawPixel(ref Image dst, int posX, int posY, Color color)
{
fixed (Image* p = &dst)
@@ -285,7 +375,7 @@ namespace Raylib_cs
}
}
- ///
+ /// Draw pixel within an image (Vector version)
public static void ImageDrawPixelV(ref Image dst, Vector2 position, Color color)
{
fixed (Image* p = &dst)
@@ -294,29 +384,211 @@ namespace Raylib_cs
}
}
- ///
+ /// Draw line within an image
+ public static void ImageDrawLine(ref Image dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDrawLine(p, startPosX, startPosY, endPosX, endPosY, color);
+ }
+ }
+
+ /// Draw line within an image (Vector version)
+ public static void ImageDrawLineV(ref Image dst, Vector2 start, Vector2 end, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDrawLineV(p, start, end, color);
+ }
+ }
+
+ /// Draw circle within an image
+ public static void ImageDrawCircle(ref Image dst, int centerX, int centerY, int radius, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDrawCircle(p, centerX, centerY, radius, color);
+ }
+ }
+
+ /// Draw circle within an image (Vector version)
+ public static void ImageDrawCircleV(ref Image dst, Vector2 center, int radius, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDrawCircleV(p, center, radius, color);
+ }
+ }
+
+ /// Draw rectangle within an image
+ public static void ImageDrawRectangle(ref Image dst, int posX, int posY, int width, int height, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDrawRectangle(p, posX, posY, width, height, color);
+ }
+ }
+
+ /// Draw rectangle within an image (Vector version)
+ public static void ImageDrawRectangleV(ref Image dst, Vector2 position, Vector2 size, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDrawRectangleV(p, position, size, color);
+ }
+ }
+
+ /// Draw rectangle within an image
+ public static void ImageDrawRectangleRec(ref Image dst, Rectangle rec, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDrawRectangleRec(p, rec, color);
+ }
+ }
+
+ /// Draw rectangle lines within an image
+ public static void ImageDrawRectangleLines(ref Image dst, Rectangle rec, int thick, Color color)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDrawRectangleLines(p, rec, thick, color);
+ }
+ }
+
+ /// Draw a source image within a destination image (tint applied to source)
+ public static void ImageDraw(ref Image dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint)
+ {
+ fixed (Image* p = &dst)
+ {
+ ImageDraw(p, src, srcRec, dstRec, tint);
+ }
+ }
+
+ /// Draw text (using default font) within an image (destination)
public static void ImageDrawText(ref Image dst, Utf8String text, int x, int y, int fontSize, Color color)
{
- fixed (byte* p = text)
+ fixed (Image* p = &dst)
{
- fixed (Image* i = &dst)
+ fixed (byte* p1 = text)
{
- ImageDrawText(i, p, x, y, fontSize, color);
+ ImageDrawText(p, p1, x, y, fontSize, color);
}
}
}
+ /// Draw text (custom sprite font) within an image (destination)
public static void ImageDrawTextEx(ref Image dst, Font font, Utf8String text, Vector2 position, int fontSize, float spacing, Color color)
{
- fixed (byte* p = text)
+ fixed (Image* p = &dst)
{
- fixed (Image* i = &dst)
+ fixed (byte* p1 = text)
{
- ImageDrawTextEx(i, font, p, position, fontSize, spacing, color);
+ ImageDrawTextEx(p, font, p1, position, fontSize, spacing, color);
}
}
}
+ /// Generate GPU mipmaps for a texture
+ public static void GenTextureMipmaps(ref Texture2D texture)
+ {
+ fixed (Texture2D* p = &texture)
+ {
+ GenTextureMipmaps(p);
+ }
+ }
+
+ /// Upload vertex data into GPU and provided VAO/VBO ids
+ public static void UploadMesh(ref Mesh mesh, CBool dynamic)
+ {
+ fixed (Mesh* p = &mesh)
+ {
+ UploadMesh(p, dynamic);
+ }
+ }
+
+ /// Unload mesh from memory (RAM and/or VRAM)
+ public static void UnloadMesh(ref Mesh mesh)
+ {
+ fixed (Mesh* p = &mesh)
+ {
+ UnloadMesh(p);
+ }
+ }
+
+ /// Set texture for a material map type (MAP_DIFFUSE, MAP_SPECULAR...)
+ public static void SetMaterialTexture(ref Material material, MaterialMapIndex mapType, Texture2D texture)
+ {
+ fixed (Material* p = &material)
+ {
+ SetMaterialTexture(p, mapType, texture);
+ }
+ }
+
+ /// Set material for a mesh
+ public static void SetModelMeshMaterial(ref Model model, int meshId, int materialId)
+ {
+ fixed (Model* p = &model)
+ {
+ SetModelMeshMaterial(p, meshId, materialId);
+ }
+ }
+
+ /// Load model animations from file
+ public static ReadOnlySpan LoadModelAnimations(Utf8String fileName, ref uint animsCount)
+ {
+ fixed (byte* p1 = fileName)
+ {
+ fixed (uint* p2 = &animsCount)
+ {
+ var model = LoadModelAnimations(p1, p2);
+
+ if ((IntPtr)model == IntPtr.Zero)
+ {
+ throw new ApplicationException("Failed to load animation");
+ }
+
+ return new ReadOnlySpan(model, (int)animsCount);
+ }
+ }
+ }
+
+ /// Compute mesh tangents
+ public static void GenMeshTangents(ref Mesh mesh)
+ {
+ fixed (Mesh* p = &mesh)
+ {
+ GenMeshTangents(p);
+ }
+ }
+
+ /// Compute mesh binormals
+ public static void GenMeshBinormals(ref Mesh mesh)
+ {
+ fixed (Mesh* p = &mesh)
+ {
+ GenMeshBinormals(p);
+ }
+ }
+
+ /// Convert wave data to desired format
+ public static void WaveFormat(ref Wave wave, int sampleRate, int sampleSize, int channels)
+ {
+ fixed (Wave* p = &wave)
+ {
+ WaveFormat(p, sampleRate, sampleSize, channels);
+ }
+ }
+
+ /// Crop a wave to defined samples range
+ public static void WaveCrop(ref Wave wave, int initSample, int finalSample)
+ {
+ fixed (Wave* p = &wave)
+ {
+ WaveCrop(p, initSample, finalSample);
+ }
+ }
+
public static void DrawText(string text, int posX, int posY, int fontSize, Color color)
{
fixed (byte* p = text.GetUTF8Bytes())
@@ -420,6 +692,7 @@ namespace Raylib_cs
}
}
+ /// Encode codepoint into utf8 text (char array length returned as parameter)
public static string CodepointToUTF8(int codepoint, ref int byteSize)
{
fixed (int* l1 = &byteSize)
@@ -429,30 +702,15 @@ namespace Raylib_cs
}
}
+ /// Encode codepoint into utf8 text (char array length returned as parameter)
public static string TextCodepointsToUTF8(int[] codepoints, int length)
{
fixed (int* c1 = codepoints)
{
var ptr = TextCodepointsToUTF8(c1, length);
- return Utf8StringUtils.GetUTF8String(ptr);
- }
- }
-
- public static ReadOnlySpan LoadModelAnimations(Utf8String fileName, ref int animsCount)
- {
- fixed (byte* p1 = fileName)
- {
- fixed (int* p2 = &animsCount)
- {
- var model = LoadModelAnimations(p1, p2);
-
- if ((IntPtr)model == IntPtr.Zero)
- {
- throw new ApplicationException("Failed to load animation");
- }
-
- return new ReadOnlySpan(model, animsCount);
- }
+ var text = Utf8StringUtils.GetUTF8String(ptr);
+ MemFree(ptr);
+ return text;
}
}
@@ -473,48 +731,12 @@ namespace Raylib_cs
public static void SetMaterialTexture(ref Model model, int materialIndex, MaterialMapIndex mapIndex, ref Texture2D texture)
{
- SetMaterialTexture(&model.materials[materialIndex], (int)mapIndex, texture);
+ SetMaterialTexture(&model.materials[materialIndex], mapIndex, texture);
}
public static void SetMaterialShader(ref Model model, int materialIndex, ref Shader shader)
{
model.materials[materialIndex].shader = shader;
}
-
- public static void SetShaderValueV(Shader shader, int uniformLoc, T[] values, ShaderUniformDataType uniformType, int count)
- where T : unmanaged
- {
- SetShaderValueV(shader, uniformLoc, (Span)values, uniformType, count);
- }
-
- public static void SetShaderValueV(Shader shader, int uniformLoc, Span values, ShaderUniformDataType uniformType, int count)
- where T : unmanaged
- {
- fixed (T* valuePtr = values)
- {
- SetShaderValueV(shader, uniformLoc, valuePtr, uniformType, count);
- }
- }
-
- public static void SetShaderValue(Shader shader, int uniformLoc, T value, ShaderUniformDataType uniformType)
- where T : unmanaged
- {
- SetShaderValue(shader, uniformLoc, &value, uniformType);
- }
-
- public static void SetShaderValue(Shader shader, int uniformLoc, T[] values, ShaderUniformDataType uniformType)
- where T : unmanaged
- {
- SetShaderValue(shader, uniformLoc, (Span)values, uniformType);
- }
-
- public static void SetShaderValue(Shader shader, int uniformLoc, Span values, ShaderUniformDataType uniformType)
- where T : unmanaged
- {
- fixed (T* valuePtr = values)
- {
- SetShaderValue(shader, uniformLoc, valuePtr, uniformType);
- }
- }
}
}
diff --git a/Raylib-cs/Raylib.cs b/Raylib-cs/Raylib.cs
index a1e0428..5a1e08d 100644
--- a/Raylib-cs/Raylib.cs
+++ b/Raylib-cs/Raylib.cs
@@ -511,7 +511,7 @@ namespace Raylib_cs
/// Load file data as byte array (read)
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
- public static extern byte* LoadFileData(string fileName, int* bytesRead);
+ public static extern byte* LoadFileData(string fileName, uint* bytesRead);
/// Unload file data allocated by LoadFileData()
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
@@ -519,7 +519,7 @@ namespace Raylib_cs
/// Save data to file from byte array (write)
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
- public static extern CBool SaveFileData(string fileName, void* data, int bytesToWrite);
+ public static extern CBool SaveFileData(string fileName, void* data, uint bytesToWrite);
/// Check file extension
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
@@ -541,14 +541,22 @@ namespace Raylib_cs
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern int GetFileModTime(string fileName);
- /// Compress data (DEFLATE algorythm)
+ /// Compress data (DEFLATE algorithm)
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern byte* CompressData(byte[] data, int dataLength, int* compDataLength);
- /// Decompress data (DEFLATE algorythm)
+ /// Decompress data (DEFLATE algorithm)
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern byte* DecompressData(byte[] compData, int compDataLength, int* dataLength);
+ /// Encode data to Base64 string
+ [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
+ public static extern byte* EncodeDataBase64(byte[] data, int dataLength, int* outputLength);
+
+ /// Decode Base64 string data
+ [DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
+ public static extern byte* DecodeDataBase64(byte[] data, int* outputLength);
+
// Persistent storage management
@@ -1376,7 +1384,7 @@ namespace Raylib_cs
/// Get Color structure from hexadecimal value
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
- public static extern Color GetColor(int hexValue);
+ public static extern Color GetColor(uint hexValue);
/// Get Color from a source pixel pointer of certain format
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
@@ -1525,7 +1533,7 @@ namespace Raylib_cs
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern byte* CodepointToUTF8(int codepoint, int* byteSize);
- /// Encode codepoint into utf8 text (char array length returned as parameter)
+ /// Encode text as codepoints array into UTF-8 text string (WARNING: memory must be freed!)
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
public static extern byte* TextCodepointsToUTF8(int* codepoints, int length);
@@ -1703,7 +1711,7 @@ namespace Raylib_cs
/// Set texture for a material map type (MAP_DIFFUSE, MAP_SPECULAR...)
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
- public static extern void SetMaterialTexture(Material* material, int mapType, Texture2D texture);
+ public static extern void SetMaterialTexture(Material* material, MaterialMapIndex mapType, Texture2D texture);
/// Set material for a mesh
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
@@ -1794,7 +1802,7 @@ namespace Raylib_cs
/// Load model animations from file
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
- public static extern ModelAnimation* LoadModelAnimations(byte* fileName, int* animsCount);
+ public static extern ModelAnimation* LoadModelAnimations(byte* fileName, uint* animsCount);
/// Update model animation pose
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
@@ -1806,7 +1814,7 @@ namespace Raylib_cs
/// Unload animation array data
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]
- public static extern void UnloadModelAnimations(ModelAnimation[] animations, int count);
+ public static extern void UnloadModelAnimations(ModelAnimation[] animations, uint count);
/// Check model animation skeleton match
[DllImport(nativeLibName, CallingConvention = CallingConvention.Cdecl)]