SkillAgentSearch skills...

Sokol.NET

Cross-platform graphics framework for C# with .NET NativeAOT | Desktop • Mobile • Web | Direct3D • Metal • OpenGL • WebGL

Install / Use

/learn @elix22/Sokol.NET

README

Sokol.NET

Modern, cross-platform graphics and multimedia framework for C# with .NET NativeAOT

Sokol.NET is a comprehensive C# binding and application framework built on top of the Sokol headers, providing a modern, high-performance graphics API with support for desktop, mobile, and web platforms.

⚠️ Development Status: This project is under ongoing development, primarily driven by the needs of my internal projects. Future development beyond my personal technical requirements will depend on public interest and community contributions.

🌐 Live Examples

✨ Try all 38 examples in your browser →

Experience Sokol.NET's capabilities instantly with interactive WebAssembly examples. No installation required!

📱 Sample Browser on Google Play

📲 Download from Google Play Store | 📂 View Source Code

The Sokol.NET Sample Browser is now available on Google Play! Experience 11 interactive demos directly on your Android device, showcasing:

  • 🎮 3D Graphics - Rotating cube, GLTF viewer with 12 models, offscreen rendering, instancing
  • 🎨 Shader Effects - Real-time raymarching and procedural ocean shaders
  • ⚛️ Physics - Interactive Box2D simulation
  • 🖼️ Textures - Dynamic textures (Conway's Game of Life), PNG loading, cubemap skybox
  • 📐 Advanced Rendering - Signed Distance Field (SDF) rendering

All powered by .NET NativeAOT for near-native performance on Android devices.

🎯 Features

  • Cross-Platform: Deploy to Windows, macOS, Linux, Android, iOS, and WebAssembly from a single codebase
  • High Performance: Leverages .NET NativeAOT for near-native performance with zero overhead
  • Modern Graphics: Unified API supporting Direct3D 11, Metal, OpenGL, OpenGL ES, and WebGL
  • Rich Examples: 38 example applications demonstrating various graphics techniques and features
  • Production Ready: Includes ImGui, Assimp, glTF, Spine, Ozz animation, and more integrations

🚀 Supported Platforms

| Platform | Runtime | Graphics API | Status | |----------|---------|--------------|--------| | Windows | JIT/NativeAOT | Direct3D 11 | ✅ Full Support | | macOS | JIT/NativeAOT | Metal | ✅ Full Support | | Linux | JIT/NativeAOT | OpenGL | ✅ Full Support | | Android | NativeAOT (Bionic) | OpenGL ES 3.0 | ✅ Full Support (APK/AAB) | | iOS | NativeAOT | Metal | ✅ Full Support | | WebAssembly | WASM | WebGL 2.0 | ✅ Full Support |

📦 What's Included

Core Libraries

  • sokol_gfx: Modern 3D graphics API abstraction
  • sokol_app: Unified application/window management
  • sokol_audio: Cross-platform audio playback
  • sokol_fetch: Asynchronous resource loading
  • sokol_time: High-precision timing
  • sokol_gl: OpenGL 1.x style immediate mode rendering
  • sokol_gp: 2D graphics painter API
  • sokol_debugtext: Text rendering for debugging
  • sokol_shape: Procedural 3D shape generation

Integrated Libraries

  • Dear ImGui (cimgui): Immediate mode GUI toolkit
  • cgltf: glTF 2.0 loader
  • Basis Universal: GPU texture compression
  • fontstash: Dynamic font rendering
  • stb_image: Image loading (PNG, JPG, etc.)
  • pl_mpeg: MPEG1 video playback

External Optional Libraries

These libraries are available as separate dynamic libraries that can be loaded when needed:

  • Assimp: 3D model loading (40+ formats) - Load dynamically via native library configuration
    • Note: May have performance issues on low-tier Android devices. Consider using GltfViewer (SharpGLTF-based) or cgltf for better compatibility and performance.
  • Spine: 2D skeletal animation runtime - Load dynamically via native library configuration
  • Ozz-animation: 3D skeletal animation system - Load dynamically via native library configuration

See example projects (assimp_simple, spine_simple, ozz_shdfeatures) and their Directory.Build.props files for configuration details.

Recommended: For glTF 2.0 models, use the GltfViewer example - a production-ready, full-featured glTF viewer with PBR rendering, animations, and advanced material support.

🎮 Example Applications

The examples/ folder contains 44 sample applications demonstrating various features:

Graphics Fundamentals

  • clear - Basic window and clear color
  • cube - Rotating 3D cube with texture
  • instancing - Hardware instancing demonstration
  • offscreen - Render-to-texture techniques
  • mrt - Multiple render targets
  • shadows - Shadow mapping implementation

Android Native Integration

  • AndroidSokolApp - Native .NET for Android integration using Sokol GFX without Sokol App, demonstrating GLSurfaceView integration and manual OpenGL context management

iOS Native Integration

  • IOSSokolApp - Native .NET for iOS integration using Sokol GFX without Sokol App, demonstrating MTKView integration and manual Metal context management

2D Graphics

  • SkiaSokolApp - SkiaSharp sample gallery with 40+ interactive samples (shapes, text, images, filters, shaders, animations)
  • sgl - 2D immediate mode rendering
  • sgl_lines - Line rendering techniques
  • shapes_transform - 2D transformations
  • dyntex - Dynamic texture updates

Sokol GP (2D Painter)

Samples for sokol_gp — a minimal, efficient cross-platform 2D graphics painter built on top of sokol_gfx.

  • sokol_gp_bench - Benchmark measuring throughput across 8 different draw patterns (rectangles, lines, points, triangles)
  • sokol_gp_blend - Side-by-side comparison of all 7 blend modes on overlapping colored rectangles
  • sokol_gp_effect - Custom shader effect blending two textures (tileset + Perlin noise) with per-frame uniforms
  • sokol_gp_framebuffer - Off-screen MSAA framebuffer rendering, resolved and tiled across the screen with rotation
  • sokol_gp_primitives - All drawing primitives (points, lines, strip, triangles, rects) with transforms across four viewports
  • sokol_gp_sdf - Real-time Signed Distance Field animation via a fully custom sokol_gp shader pipeline

Text & Fonts

3D Models & Animation

  • assimp_simple - Basic 3D model loading
  • assimp_animation - Skeletal animation with Assimp
  • assimp_scene - Complex scene loading
  • cgltf - glTF 2.0 model loading
  • CGltfViewer - Full-featured glTF 2.0 viewer using the native cgltf C library — zero-allocation loading, full PBR pipeline, skinning, morphing, IBL, bloom, and 11+ material extensions; runs on Desktop, Web, iOS, and Android
  • GltfViewer - Full-featured glTF 2.0 viewer using the managed SharpGLTF C# library — PBR rendering, animations, and advanced material support; best suited for Desktop and Web
  • ozz_shdfeatures - Ozz animation system with shader features

2D Animation

Textures & Materials

UI & Integration

Camera & Hardware

  • camera_hardware - ⚠️ Work in progress — Live camera feed viewer with ImGui camera picker. Enumerate and switch between devices at runtime. Verified on macOS, iOS, Android, Web, and Windows.

Physics

  • JoltPhysics - 10,000 dynamic physics bodies with GPU instancing and multithreading
  • bepuphysics - BEPUphysics v2 integration with .NET physics engine

Advanced

Games

  • Reversi - Playable Othello/Reversi board game with 3D discs, animated flips, touch + mouse input, adjustable AI depth, and cross-platform support (Desktop, Web, iOS, Android)

📜 Spine License Notice

Some examples in this repository (spine_simple, spine_skinsets, spine_inspector) use the Spine runtime library.

Important for Users: Wh

View on GitHub
GitHub Stars121
CategoryDevelopment
Updated7h ago
Forks3

Languages

C++

Security Score

100/100

Audited on Mar 21, 2026

No findings