org.mass4.Guinevere
1.1.0
See the version list below for details.
dotnet add package org.mass4.Guinevere --version 1.1.0
NuGet\Install-Package org.mass4.Guinevere -Version 1.1.0
<PackageReference Include="org.mass4.Guinevere" Version="1.1.0" />
<PackageVersion Include="org.mass4.Guinevere" Version="1.1.0" />
<PackageReference Include="org.mass4.Guinevere" />
paket add org.mass4.Guinevere --version 1.1.0
#r "nuget: org.mass4.Guinevere, 1.1.0"
#:package org.mass4.Guinevere@1.1.0
#addin nuget:?package=org.mass4.Guinevere&version=1.1.0
#tool nuget:?package=org.mass4.Guinevere&version=1.1.0
Guinevere
A GPU accelerated immediate mode GUI system built on SkiaSharp, designed for high-performance applications with modern graphics APIs support.
🚀 Features
- GPU Accelerated Rendering: Built on SkiaSharp for high-performance graphics
- Multiple Graphics API Support: OpenGL and Vulkan integrations
- Cross-Platform: Windows and Linux x64 support
- Modern .NET: Built for .NET 9.0
- Multiple Framework Integrations: OpenTK, Raylib, and Silk.NET
- Immediate Mode: Flexible and easy-to-use immediate mode paradigm
- Rich Samples: Comprehensive examples and demonstrations
📦 NuGet Packages
Core Library
<PackageReference Include="org.mass4.Guinevere" Version="1.0.0" />
Graphics API Integrations
OpenGL Integrations
<PackageReference Include="org.mass4.Guinevere.OpenGL.OpenTK" Version="1.0.0" />
<PackageReference Include="org.mass4.Guinevere.OpenGL.Raylib" Version="1.0.0" />
<PackageReference Include="org.mass4.Guinevere.OpenGL.SilkNET" Version="1.0.0" />
Vulkan Integration
<PackageReference Include="org.mass4.Guinevere.Vulkan.SilkNET" Version="1.0.0" />
🛠️ Quick Start
Basic Usage
using Guinevere;
// Initialize Guinevere context
var context = new GuiContext();
// In your render loop
context.Begin();
// Draw your UI
if (context.Button("Hello World"))
{
Console.WriteLine("Button clicked!");
}
context.Text("Welcome to Guinevere!");
context.End();
With OpenTK Integration
using Guinevere.OpenGL.OpenTK;
using OpenTK.Graphics.OpenGL4;
using OpenTK.Windowing.Desktop;
public class MyWindow : GameWindow
{
private GuiRenderer renderer;
public MyWindow() : base(GameWindowSettings.Default,
NativeWindowSettings.Default)
{
renderer = new GuiRenderer();
}
protected override void OnRenderFrame(FrameEventArgs e)
{
GL.Clear(ClearBufferMask.ColorBufferBit);
renderer.Begin();
// Your GUI code here
if (renderer.Button("Click Me"))
{
// Handle button click
}
renderer.End();
SwapBuffers();
base.OnRenderFrame(e);
}
}
With Silk.NET Vulkan
using Guinevere.Vulkan.SilkNET;
using Silk.NET.Vulkan;
// Initialize Vulkan context
var vulkan = Vk.GetApi();
var renderer = new VulkanGuiRenderer(vulkan, device, queue);
// In render loop
renderer.Begin(commandBuffer);
// Your GUI code
renderer.Text("Vulkan-powered GUI!");
renderer.End();
📚 Documentation
Core Concepts
Immediate Mode: Guinevere follows the immediate mode paradigm where UI elements are defined and drawn in the same frame, making it perfect for real-time applications like games and tools.
GPU Acceleration: All rendering is performed on the GPU using SkiaSharp, ensuring smooth performance even with complex UIs.
Integration Architecture: Guinevere is designed with a modular architecture allowing easy integration with different graphics frameworks.
Available Integrations
Integration | Graphics API | Framework | Use Case |
---|---|---|---|
OpenTK | OpenGL | OpenTK 4.x | Game development, tools |
Raylib | OpenGL | Raylib-cs | Simple games, prototypes |
Silk.NET OpenGL | OpenGL | Silk.NET | High-performance applications |
Silk.NET Vulkan | Vulkan | Silk.NET | Maximum performance, modern graphics |
🎮 Samples
The repository includes comprehensive samples demonstrating various features:
Basic Samples
- Sample-01: Basic Guinevere usage
- Sample-02-SimpleLayout: Simple layout system
- Sample-03-ChildrenLayout: Nested layouts
- Sample-04-Texts: Text rendering and typography
- Sample-05-SingleNodeExpandMargin: Layout margins
Advanced Samples
- Sample-41-AdvancedLayoutDemo: Advanced layout features
- Sample-42-ResponsiveLayoutDemo: Responsive design
- Sample-43-AnimatedLayoutDemo: Animations and transitions
- Sample-50-PrimitiveControls: Basic UI controls
Integration Samples
- Sample-01-OpenGL-OpenTK: OpenTK integration
- Sample-01-OpenGL-Raylib: Raylib integration
- Sample-01-OpenGL-SilkNet: Silk.NET OpenGL integration
- Sample-01-Vulkan-SilkNet: Silk.NET Vulkan integration
Showcase Samples
- Sample-60-PaperUI-Dashboard: Material Design dashboard
- Sample-70-PanGui-HelloWorld: Pan GUI integration
- Sample-73-PanGui-MusicApp: Music player interface
🏗️ Building from Source
Prerequisites
- .NET 9.0 SDK
- Git
Build Instructions
# Clone the repository
git clone https://github.com/brmassa/guinevere.git
cd guinevere
# Restore dependencies
dotnet restore
# Build all projects
./build.sh Compile
# Run tests
./build.sh Test
# Create NuGet packages
./build.sh PackNuGet
# Build samples
./build.sh BuildSamples
Build Targets
Target | Description |
---|---|
Compile |
Build all library projects |
Test |
Run unit tests with coverage |
PackNuGet |
Create NuGet packages |
BuildSamples |
Build all sample applications |
PublishSamples |
Publish samples for distribution |
PublishAll |
Complete release build |
🤝 Contributing
We welcome contributions! Please see our Contributing Guidelines for details.
Development Setup
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
Code Style
- Follow C# naming conventions
- Use meaningful variable and method names
- Add XML documentation for public APIs
- Maintain test coverage above 80%
📋 Requirements
Runtime Requirements
- .NET 9.0 or later
- Windows 10/11 x64 or Linux x64
- Graphics drivers supporting OpenGL 3.3+ or Vulkan 1.0+
Development Requirements
- .NET 9.0 SDK
- Visual Studio 2022 or JetBrains Rider
- Git
🔧 Platform Support
Platform | Architecture | Status |
---|---|---|
Windows | x64 | ✅ Supported |
Linux | x64 | ✅ Supported |
macOS | arm64/x64 | 🚧 Planned |
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
👨💻 Author
Bruno Massa
🙏 Acknowledgments
- SkiaSharp - The foundation of our rendering system
- OpenTK - OpenGL bindings for .NET
- Raylib-cs - C# bindings for Raylib
- Silk.NET - Modern .NET bindings for graphics APIs
- NUKE - Build automation system
🐛 Issue Reporting
If you encounter any issues, please open an issue on GitHub with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- System information (OS, .NET version, GPU)
- Sample code if applicable
📊 Project Stats
Guinevere - Bringing GPU acceleration to immediate mode GUIs 🎨⚡
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- JetBrains.Annotations (>= 2024.3.0)
- SkiaSharp (>= 3.119.0)
- SkiaSharp.NativeAssets.Linux (>= 3.119.0)
- SkiaSharp.Views.Desktop.Common (>= 3.119.0)
- SkiaSharp.Vulkan.SharpVk (>= 3.119.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.