org.mass4.Guinevere 1.1.0

There is a newer version of this package available.
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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="org.mass4.Guinevere" Version="1.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="org.mass4.Guinevere" Version="1.1.0" />
                    
Directory.Packages.props
<PackageReference Include="org.mass4.Guinevere" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add org.mass4.Guinevere --version 1.1.0
                    
#r "nuget: org.mass4.Guinevere, 1.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package org.mass4.Guinevere@1.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=org.mass4.Guinevere&version=1.1.0
                    
Install as a Cake Addin
#tool nuget:?package=org.mass4.Guinevere&version=1.1.0
                    
Install as a Cake Tool

Guinevere

CI Release NuGet License: MIT

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

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass
  6. 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

GitHub stars GitHub forks GitHub issues GitHub pull requests


Guinevere - Bringing GPU acceleration to immediate mode GUIs 🎨⚡

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.4.1 137 7/28/2025
1.1.0 357 6/14/2025