diff --git a/.github/ISSUE_TEMPLATE/new-issue-template.md b/.github/ISSUE_TEMPLATE/new-issue-template.md index 96d4676..f97c351 100644 --- a/.github/ISSUE_TEMPLATE/new-issue-template.md +++ b/.github/ISSUE_TEMPLATE/new-issue-template.md @@ -1,7 +1,7 @@ --- name: new issue template about: generic template for new issues -title: "[module] Short description of the issue/bug/feature" +title: "Short description of the issue/bug/feature" labels: '' assignees: '' --- @@ -14,11 +14,14 @@ Before submitting a new issue, please verify and check: ### Issue description -*Briefly describe the issue you are experiencing (or the feature you want to see added to Raylib-cs). Tell us what you were trying to do and what happened instead. You can also ask questions on the [raylib discord server](https://discord.gg/raylib).* +*Briefly describe the issue you are experiencing (or the feature you want to see added to Raylib-cs). Tell us +what you were trying to do and what happened instead. You can also ask questions on the +[raylib discord server](https://discord.gg/raylib).* ### Environment -*Provide your Platform, Operating System, OpenGL version, GPU, Raylib-cs version, Raylib version (if applicable), and details of where or how you experienced the issue.* +*Provide your Platform, Operating System, OpenGL version, GPU, Raylib-cs version, Raylib version (if applicable), +and details of where or how you experienced the issue.* ### Issue screenshot @@ -26,4 +29,5 @@ Before submitting a new issue, please verify and check: ### Code example -*Provide minimal reproduction code to test the issue. Please, format the code properly and try to keep it as simple as possible, just focusing on the experienced issue.* +*Provide minimal reproduction code to test the issue. Please, format the code properly and try to keep it as simple +as possible, just focusing on the experienced issue.* diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c26dd73..40ab79a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,143 +8,184 @@ on: - 'README.md' - '.github/ISSUE_TEMPLATE/**' workflow_dispatch: - jobs: - build: - name: Build on dotnet using ${{ matrix.os }} - runs-on: ${{ matrix.os }} + prepare: + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.version }} + pkgversion: ${{ steps.version.outputs.pkgversion }} + steps: + - name: checkout repository + uses: actions/checkout@v3 + + - name: check raylib version + id: version + shell: bash + run: | + echo "version=$(sed -n 's/.*\(.*\)<\/TargetRaylibTag>.*/\1/p' Raylib-cs/Raylib-cs.csproj)">> ${GITHUB_OUTPUT} + echo "pkgversion=$(sed -n 's/.*\(.*\)<\/PackageVersion>.*/\1/p' Raylib-cs/Raylib-cs.csproj)">> ${GITHUB_OUTPUT} + + build-linux: + runs-on: ubuntu-latest + needs: prepare + steps: + - name: setup dependencies + run: | + sudo apt install \ + libasound2-dev \ + libx11-dev \ + libxrandr-dev \ + libxi-dev \ + libgl1-mesa-dev \ + libglu1-mesa-dev \ + libxcursor-dev \ + libxinerama-dev + + - name: build raylib + env: + version: ${{ needs.prepare.outputs.version }} + run: | + curl -Lso raylib.zip https://github.com/raysan5/raylib/archive/refs/tags/${version}.zip + unzip -qq raylib.zip + cmake -S raylib-${version} \ + -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON \ + -D BUILD_EXAMPLES=OFF + cmake --build build --config Release + + - name: upload build + uses: actions/upload-artifact@v3 + with: + name: linux-x64 + path: build/raylib/libraylib.so + if-no-files-found: error + + build-osx: + runs-on: macos-latest + needs: prepare strategy: matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] + name: [arm64, x64] + include: + - name: arm64 + arch: arm64 + - name: x64 + arch: x86_64 steps: - - uses: actions/checkout@v2 - - name: Setup dotnet - uses: actions/setup-dotnet@v1 + - name: build raylib + env: + version: ${{ needs.prepare.outputs.version }} + run: | + curl -Lso raylib.zip https://github.com/raysan5/raylib/archive/refs/tags/${version}.zip + unzip -qq raylib.zip + cmake -S raylib-${version} \ + -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \ + -D BUILD_SHARED_LIBS=ON \ + -D BUILD_EXAMPLES=OFF + cmake --build build --config Release + + - name: upload build + uses: actions/upload-artifact@v3 with: - dotnet-version: 6.0.x - - name: Build project - run: dotnet build -c Release -f net6.0 - - name: Test project - run: dotnet test -c Release -f net6.0 + name: osx-${{ matrix.name }} + path: build/raylib/libraylib.dylib + if-no-files-found: error + + build-windows: + runs-on: windows-latest + needs: prepare + strategy: + matrix: + name: [x86, x64] + include: + - name: x86 + arch: win32 + - name: x64 + arch: x64 + steps: + - name: build ${{ matrix.arch }} + shell: bash + env: + version: ${{ needs.prepare.outputs.version }} + run: | + curl -Lso raylib.zip https://github.com/raysan5/raylib/archive/refs/tags/${version}.zip + unzip -qq raylib.zip + cmake -S raylib-${version} \ + -A ${{ matrix.arch }} \ + -B build \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON \ + -D BUILD_EXAMPLES=OFF + cmake --build build --config Release + + - name: upload build + uses: actions/upload-artifact@v3 + with: + name: win-${{ matrix.name }} + path: build/raylib/Release/raylib.dll + if-no-files-found: error + publish: - name: Build Release Package runs-on: ubuntu-latest - needs: build + needs: + - prepare + - build-linux + - build-osx + - build-windows steps: - - uses: actions/checkout@v2 + - name: checkout repository + uses: actions/checkout@v3 + + - uses: actions/download-artifact@v3 + with: + name: linux-x64 + path: Raylib-cs/runtimes/linux-x64/native + + - uses: actions/download-artifact@v3 + with: + name: osx-arm64 + path: Raylib-cs/runtimes/osx-arm64/native + + - uses: actions/download-artifact@v3 + with: + name: osx-x64 + path: Raylib-cs/runtimes/osx-x64/native + + - uses: actions/download-artifact@v3 + with: + name: win-x86 + path: Raylib-cs/runtimes/win-x86/native + + - uses: actions/download-artifact@v3 + with: + name: win-x64 + path: Raylib-cs/runtimes/win-x64/native + - name: Setup dotnet - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - - name: Download Repo - uses: actions/checkout@v2 - - - id: get-tag - name: Get Target Raylib Version - uses: mavrosxristoforos/get-xml-info@1.0 - with: - xml-file: "./Raylib-cs/Raylib-cs.csproj" - xpath: "//TargetRaylibTag" - - - name: echo tag - run: echo ${{ steps.get-tag.outputs.info }} - - - name: Download win-x64 Raylib Release - uses: robinraju/release-downloader@v1.3 - with: - repository: "raysan5/raylib" - tag: ${{ steps.get-tag.outputs.info }} - fileName: "raylib-${{steps.get-tag.outputs.info}}_win64_msvc16.zip" - - - name: extract win-x64 - uses: montudor/action-zip@v1 - with: - args: unzip -qq raylib-${{steps.get-tag.outputs.info}}_win64_msvc16.zip -d raylib-win64 - - - name: copy win-x64 - uses: canastro/copy-file-action@master - with: - source: "raylib-win64/raylib-${{steps.get-tag.outputs.info}}_win64_msvc16/lib/raylib.dll" - target: "Raylib-cs/runtimes/win-x64/native/raylib.dll" - - - name: Download win-x86 Raylib Release - uses: robinraju/release-downloader@v1.3 - with: - repository: "raysan5/raylib" - tag: ${{ steps.get-tag.outputs.info }} - fileName: "raylib-${{steps.get-tag.outputs.info}}_win32_msvc16.zip" - - - name: extract win-x86 - uses: montudor/action-zip@v1 - with: - args: unzip -qq raylib-${{steps.get-tag.outputs.info}}_win32_msvc16.zip -d raylib-win86 - - - name: copy win-x86 - uses: canastro/copy-file-action@master - with: - source: "raylib-win86/raylib-${{steps.get-tag.outputs.info}}_win32_msvc16/lib/raylib.dll" - target: "Raylib-cs/runtimes/win-x86/native/raylib.dll" - - - name: Download linux-x64 Raylib Release - uses: robinraju/release-downloader@v1.3 - with: - repository: "raysan5/raylib" - tag: ${{ steps.get-tag.outputs.info }} - fileName: "raylib-${{steps.get-tag.outputs.info}}_linux_amd64.tar.gz" - - - name: extract linux-x64 - run: mkdir -p raylib-linux64 && tar -xvf raylib-${{steps.get-tag.outputs.info}}_linux_amd64.tar.gz -C raylib-linux64 - - - name: copy linux-x64 - uses: canastro/copy-file-action@master - with: - source: "raylib-linux64/raylib-${{steps.get-tag.outputs.info}}_linux_amd64/lib/libraylib.so.${{steps.get-tag.outputs.info}}" - target: "Raylib-cs/runtimes/linux-x64/native/libraylib.so" - - - name: Download osx-x64 Raylib Release - uses: robinraju/release-downloader@v1.3 - with: - repository: "raysan5/raylib" - tag: ${{ steps.get-tag.outputs.info }} - fileName: "raylib-${{steps.get-tag.outputs.info}}_macos.tar.gz" - - - name: extract osx-x64 - run: mkdir -p raylib-osx64 && tar -xvf raylib-${{steps.get-tag.outputs.info}}_macos.tar.gz -C raylib-osx64 - - - name: copy osx-x64 - uses: canastro/copy-file-action@master - with: - source: "raylib-osx64/raylib-${{steps.get-tag.outputs.info}}_macos/lib/libraylib.dylib" - target: "Raylib-cs/runtimes/osx-x64/native/libraylib.dylib" - - - name: copy osx-arm64 - uses: canastro/copy-file-action@master - with: - source: "raylib-osx64/raylib-${{steps.get-tag.outputs.info}}_macos/lib/libraylib.dylib" - target: "Raylib-cs/runtimes/osx-arm64/native/libraylib.dylib" - - - id: get-nuget-version - name: Get NuGet Package Version - uses: mavrosxristoforos/get-xml-info@1.0 - with: - xml-file: "./Raylib-cs/Raylib-cs.csproj" - xpath: "//PackageVersion" - name: Create NuGet Package - run: dotnet pack -c Release Raylib-cs + run: dotnet pack -c Release Raylib-cs - name: Upload NuGet Package As Artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: - name: Raylib-cs.${{steps.get-nuget-version.outputs.info}}.nupkg - path: Raylib-cs/bin/Release/Raylib-cs.${{steps.get-nuget-version.outputs.info}}.nupkg + path: Raylib-cs/bin/Release/Raylib-cs.${{ needs.prepare.outputs.pkgversion }}.*pkg - name: Upload NuGet Package As Release uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') - with: - files: Raylib-cs/bin/Release/Raylib-cs.${{steps.get-nuget-version.outputs.info}}.nupkg - + with: + files: Raylib-cs/bin/Release/Raylib-cs.${{ needs.prepare.outputs.pkgversion }}.*pkg + - name: Publish to NuGet if: startsWith(github.ref, 'refs/tags/') - run: dotnet nuget push Raylib-cs/bin/Release/Raylib-cs.${{steps.get-nuget-version.outputs.info}}.nupkg --api-key ${{secrets.NUGET_API_KEY}} + run: | + dotnet nuget push \ + Raylib-cs/bin/Release/Raylib-cs.${{ needs.prepare.outputs.pkgversion }}.nupkg \ + --api-key ${{secrets.NUGET_API_KEY}} diff --git a/README.md b/README.md index 416edf3..56c0c71 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Raylib-cs targets net5.0 and net6.0. This is the prefered method to get started. ``` -dotnet add package Raylib-cs --version 4.5.0.2 +dotnet add package Raylib-cs ``` [![NuGet](https://img.shields.io/nuget/dt/raylib-cs)](https://www.nuget.org/packages/Raylib-cs/) diff --git a/Raylib-cs/Raylib-cs.csproj b/Raylib-cs/Raylib-cs.csproj index ccedcb1..e0db93b 100644 --- a/Raylib-cs/Raylib-cs.csproj +++ b/Raylib-cs/Raylib-cs.csproj @@ -12,10 +12,12 @@ 4.5.0 - 4.5.0.2 - 4.5.0.2 + 4.5.0.3 + 4.5.0.3 Chris Dill, Raysan5 true + true + snupkg Zlib Raylib-cs C# bindings for raylib - A simple and easy-to-use library to learn videogames programming @@ -23,6 +25,7 @@ raylib;bindings;gamedev git https://github.com/ChrisDill/Raylib-cs/ + true README.md https://www.raylib.com/ true @@ -35,6 +38,7 @@ + diff --git a/Raylib-cs/types/Raylib.Utils.cs b/Raylib-cs/types/Raylib.Utils.cs index 24b0356..1f10d68 100644 --- a/Raylib-cs/types/Raylib.Utils.cs +++ b/Raylib-cs/types/Raylib.Utils.cs @@ -38,6 +38,20 @@ namespace Raylib_cs 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(); + OpenURL(str1.AsPointer()); + } + + /// Set internal gamepad mappings (SDL_GameControllerDB) + public static int SetGamepadMappings(string mappings) + { + 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) @@ -652,6 +666,36 @@ namespace Raylib_cs return LoadTexture(str1.AsPointer()); } + /// Update GPU texture with new data + public static void UpdateTexture(Texture2D texture, T[] pixels) where T : unmanaged + { + UpdateTexture(texture, (ReadOnlySpan)pixels); + } + + /// Update GPU texture with new data + public static void UpdateTexture(Texture2D texture, ReadOnlySpan pixels) where T : unmanaged + { + fixed (void* pixelPtr = pixels) + { + UpdateTexture(texture, pixelPtr); + } + } + + /// Update GPU texture rectangle with new data + public static void UpdateTextureRec(Texture2D texture, Rectangle rec, T[] pixels) where T : unmanaged + { + UpdateTextureRec(texture, rec, (ReadOnlySpan)pixels); + } + + /// Update GPU texture rectangle with new data + public static void UpdateTextureRec(Texture2D texture, Rectangle rec, ReadOnlySpan pixels) where T : unmanaged + { + fixed (void* pixelPtr = pixels) + { + UpdateTextureRec(texture, rec, pixelPtr); + } + } + /// Generate GPU mipmaps for a texture public static void GenTextureMipmaps(ref Texture2D texture) {