Sokol.NET
Cross-platform graphics framework for C# with .NET NativeAOT | Desktop • Mobile • Web | Direct3D • Metal • OpenGL • WebGL
Install / Use
/learn @elix22/Sokol.NETREADME
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
- debugtext - Debug text overlay
- debugtext_context - Multiple text contexts
- fontstash - TrueType font rendering
- fontstash_layers - Layered text effects
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
- spine_simple - Basic Spine animation
- spine_skinsets - Spine skin swapping
- spine_inspector - Spine animation debugger
Textures & Materials
- loadpng - PNG texture loading
- basisu - Basis Universal GPU textures
- cubemap_jpeg - Cubemap textures
- cubemaprt - Render-to-cubemap
- miprender - Mipmap generation
- vertextexture - Vertex texture fetch
- texview - Texture viewer utility
- sdf - Signed distance field rendering
UI & Integration
- cimgui - Dear ImGui integration
- imgui_usercallback - Custom ImGui rendering
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
- drawcallperf - Draw call performance testing
- plmpeg - MPEG1 video playback
- ShaderToyApp - Multi-shader gallery with 7 fragment shaders
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
