* chg: New build system that uses the officially distributed binaries, bumped version to 8.0.0, simplified git workflow, removed deprecated OpenGL 1.1 functionality. * chg: Modernize CI workflow, enable SourceLink - Bump workflow actions to latest majors (Node 24); drop deprecated softprops/action-gh-release@v1 - Trigger push builds on main instead of master - Create local nuget feed dir before pack (fixes NU1301) - Enable Microsoft.SourceLink.GitHub for debugging symbols (ref PR #340) * fix: centralized version data in Directory.build.props, and fixed various interop details that had incorrect function signatures * chore: updated readme * fix: version the native extract marker and chain download via DependsOnTargets The .extracted marker now includes the raylib package name, so bumping TargetRaylibTag re-extracts the new archive instead of silently keeping (and packing/copying) the previous version's files. _PrepareNativeLibrary and _StageWasmNative now depend directly on _DownloadAndExtractInternal instead of CallTarget-ing it; dependency targets run in the same project instance, so the resolved properties (RaylibPackageName etc.) propagate naturally. * fix: let the binding build for browser-wasm on both net8.0 and net10.0 The net8-era wasm workload (Microsoft.NET.Runtime.WebAssembly.Sdk 8.0.x, auto-imported for RID browser-wasm) treats every browser-wasm project as a wasm app: it forces OutputType=Exe after project evaluation (CS5001 for a classlib) and hooks its app-bundle build after Build, which errors because a library has no assemblies to bundle. Opt Raylib-cs out via DisableAutoWasmBuildApp (props time, before the workload defaults its trigger) and pin OutputType back to Library in Directory.Build.targets (evaluated after the workload props, so the assignment wins). net10's wasm SDK needs neither workaround. * chore: readme updated * chg: simplifying build logic - a simple line in the documentation should save us the code here * fix: Wrong signature of FrameBufferComplete * chore: readme update * feat: samples default to local project reference, and can optionally use the nuget package * feat: backporting existing raylib-cs examples and new official raylib examples to WASM, adopting raylib's original code style * chore: readme, gitignore, and targets backport. * fix: Examples.csproj runs the download task when building locally * feat: backporting existing raylib-cs examples and new official raylib examples to WASM, adopting raylib's original code style * chore: readme, gitignore, and targets backport. * chore: clean up linter warnings * feat: html harness focuses the example and allows quick navigation with J/K instead. * chore: readme mentions the property to use nuget vs. the local project reference * feat: replaced the J/K navigation with good old HTML buttons * chore: run dotnet format scoped default (was previously scoped to just 'style')
143 lines
5.5 KiB
Markdown
143 lines
5.5 KiB
Markdown

|
|
|
|
# Raylib-cs
|
|
|
|
C# bindings for raylib, a simple and easy-to-use library to learn video games programming (www.raylib.com)
|
|
|
|
[](https://github.com/raylib-cs/raylib-cs/graphs/contributors)
|
|
[](LICENSE)
|
|
[](https://discord.gg/raylib)
|
|
[](https://github.com/raylib-cs/raylib-cs/stargazers)
|
|
[](https://github.com/raylib-cs/raylib-cs/actions?query=workflow%3ABuild)
|
|
|
|
Raylib-cs targets net8.0, net10.0 and uses the [official 6.0 release](https://github.com/raysan5/raylib/releases/tag/6.0)
|
|
to build the native libraries.
|
|
|
|
### Version 8.1.0 of Raylib-cs supports the following runtimes:
|
|
- **browser-wasm** *(raylib-6.0_webassembly)* 🆕
|
|
- **linux-x64** *(raylib-6.0_linux_amd64)*
|
|
- **osx-arm64** *(raylib-6.0_macos)*
|
|
- **osx-x64** *(raylib-6.0_macos)*
|
|
- **win-x64** *(raylib-6.0_win64_msvc16)*
|
|
- **win-x86** *(raylib-6.0_win32_msvc16)*
|
|
|
|
The following frameworks are deprecated (fall back to Version 7.x if required):
|
|
- net6.0 (end of life)
|
|
|
|
|
|
## Status
|
|
|
|
Raylib-cs is passively maintained. Occasional updates may be released from time to time. Pull requests may be
|
|
accepted if they don't have a large maintenance burden.
|
|
|
|
## Installation - NuGet
|
|
|
|
This is the preferred method to get started.
|
|
|
|
1) Pick a folder in which you would like to start a raylib project. For example, "MyRaylibCSProj."
|
|
2) Then from a terminal (for example, a VSCode terminal), whilst in the directory you just created
|
|
run the following commands. (Please keep in mind .NET should already be installed on your system)
|
|
|
|
```
|
|
dotnet new console
|
|
```
|
|
```
|
|
dotnet add package Raylib-cs
|
|
```
|
|
|
|
[](https://www.nuget.org/packages/Raylib-cs/)
|
|
|
|
If you need to edit the Raylib-cs source, then you will need to add the bindings as a project (see below).
|
|
|
|
If you are new to using NuGet (or you've forgotten) and are trying to run the above command in the command prompt,
|
|
remember that you need to be *inside the intended project directory* (not just inside the solution directory);
|
|
otherwise the command won't work.
|
|
|
|
## Installation - Manual
|
|
|
|
1. Download/clone the repo
|
|
|
|
2. Add [Raylib-cs/Raylib-cs.csproj](Raylib-cs/Raylib-cs.csproj) to your project as an existing project.
|
|
|
|
3. Download/build the native libraries for the platforms you want using the [official 6.0 release](https://github.com/raysan5/raylib/releases/tag/6.0). **NOTE: the MSVC version is required for Windows platforms**
|
|
|
|
4. Set up the native libraries, so they are in the same directory as the executable/can be found in the [search path](https://www.mono-project.com/docs/advanced/pinvoke/).
|
|
|
|
5. Start coding!
|
|
|
|
## Building from source
|
|
|
|
The `Examples` and `Raylib-cs.Tests` projects consume the binding as a NuGet package, and the in-repo
|
|
version may not be published on nuget.org yet. Pack it once into the local feed before the first build:
|
|
|
|
```
|
|
dotnet pack Raylib-cs -c Release -o nuget
|
|
dotnet build
|
|
```
|
|
|
|
`NuGet.config` points restore at the local `./nuget` feed, so both projects pick up the freshly packed
|
|
package. If you skip the pack step on a fresh clone, restore fails with NU1301 (the `./nuget` source
|
|
doesn't exist) or NU1102 (Raylib-cs not found) — running the pack command fixes both.
|
|
|
|
When iterating on the binding itself, note that NuGet caches the extracted package by version and
|
|
ignores repacks of the same version. After repacking, delete the old package from `./nuget` and clear
|
|
the cached copy (`dotnet nuget locals global-packages --clear`, or delete
|
|
`~/.nuget/packages/raylib-cs/<version>`) before restoring again.
|
|
|
|
## Hello, World!
|
|
|
|
```csharp
|
|
using Raylib_cs;
|
|
|
|
namespace HelloWorld;
|
|
|
|
internal static class Program
|
|
{
|
|
// STAThread is required if you deploy using NativeAOT on Windows
|
|
// See https://github.com/raylib-cs/raylib-cs/issues/301
|
|
[System.STAThread]
|
|
public static void Main()
|
|
{
|
|
Raylib.InitWindow(800, 480, "Hello World");
|
|
|
|
while (!Raylib.WindowShouldClose())
|
|
{
|
|
Raylib.BeginDrawing();
|
|
Raylib.ClearBackground(Color.White);
|
|
|
|
Raylib.DrawText("Hello, world!", 12, 12, 20, Color.Black);
|
|
|
|
Raylib.EndDrawing();
|
|
}
|
|
|
|
Raylib.CloseWindow();
|
|
}
|
|
}
|
|
```
|
|
|
|
## Building the examples locally
|
|
|
|
The `Examples` project references the sibling `Raylib-cs` project by default, so local changes to the
|
|
bindings are picked up directly:
|
|
|
|
```
|
|
dotnet run --project Examples
|
|
```
|
|
|
|
To build the examples against the Raylib-cs NuGet package instead (the version set by
|
|
`RaylibCsVersion` in [Directory.Build.props](Directory.Build.props)), set `UseRaylibCsPackage`:
|
|
|
|
```
|
|
dotnet run --project Examples -p:UseRaylibCsPackage=true
|
|
```
|
|
|
|
## Contributing
|
|
|
|
Feel free to open an issue. If you'd like to contribute, please fork the repository and make
|
|
changes as you'd like. Pull requests are welcome.
|
|
|
|
If you want to request features or report bugs related to raylib directly (in contrast to this binding), please refer to the [author's project repo](https://github.com/raysan5/raylib).
|
|
|
|
## License
|
|
|
|
See [LICENSE](LICENSE) for details.
|