# bgfx — Cross-Platform Graphics API Agnostic Rendering Library > Thin rendering library supporting Direct3D, Metal, OpenGL, Vulkan, and WebGPU with a single unified API. ## Install Save as a script file and run: # bgfx — Cross-Platform Graphics API Agnostic Rendering Library ## Quick Use ```bash git clone https://github.com/bkaradzic/bgfx cd bgfx && git clone https://github.com/bkaradzic/bx git clone https://github.com/bkaradzic/bimg cd bgfx && make linux-release64 ``` ## Introduction bgfx is a cross-platform rendering library that abstracts over modern and legacy graphics APIs. It allows developers to write rendering code once and target Direct3D 9/11/12, Metal, OpenGL, Vulkan, and WebGPU without changing application logic. ## What bgfx Does - Provides a single C99/C++ API that compiles to 9 different graphics backends - Handles shader cross-compilation from a unified BGFX shader language - Manages GPU resource lifetimes, state sorting, and draw call batching - Ships debug tools including real-time graphics debugger and profiler - Supports compute shaders, instancing, occlusion queries, and multi-threaded submission ## Architecture Overview bgfx uses a submit-and-forget rendering model. The application thread records draw calls into a frame buffer which is swapped with the render thread each frame. The render thread sorts by state to minimize GPU pipeline changes, then dispatches to the platform-specific backend. This two-thread design keeps the API lock-free and predictable. ## Self-Hosting & Configuration - Build with GENie (bundled) or CMake; supports MSVC, GCC, Clang, and Emscripten - Include bx (base library) and bimg (image processing) as sibling directories - Select backend at runtime or compile-time via renderer type enum - Shader compilation uses the bundled shaderc tool targeting GLSL, HLSL, MSL, or SPIR-V - Integrates with any windowing library (SDL, GLFW, native) via platform data struct ## Key Features - Minimal API surface: fewer than 100 functions cover the entire rendering pipeline - Frame-based resource management eliminates manual fence tracking - Texture and buffer updates are safe from any thread - Built-in debug text overlay and geometry rendering for rapid prototyping - Used in production by commercial game engines and tools ## Comparison with Similar Tools - **sokol_gfx** — even smaller single-header approach; bgfx offers more backends and tooling - **LLGL** — C++ focused multi-backend; bgfx has broader platform coverage and C API - **Diligent Engine** — higher-level with scene graph; bgfx stays closer to GPU metal - **wgpu** — Rust-first WebGPU implementation; bgfx is C/C++ and predates WebGPU - **Raw Vulkan/D3D12** — maximum control but requires per-platform code; bgfx abstracts this ## FAQ **Q: What games or engines use bgfx?** A: Notably used by the Torque3D engine, the MAME arcade emulator, and several commercial studios for cross-platform shipping. **Q: Can I mix bgfx with an existing engine?** A: Yes. bgfx does not own the window or main loop; it only needs a native window handle to initialize. **Q: Does bgfx support ray tracing?** A: Not currently. It focuses on rasterization pipelines across the widest range of hardware. **Q: How does shader authoring work?** A: Write shaders in a GLSL-like dialect with bgfx macros, then compile with shaderc to target each backend. ## Sources - https://github.com/bkaradzic/bgfx - https://bkaradzic.github.io/bgfx/overview.html --- Source: https://tokrepo.com/en/workflows/asset-59398ef5 Author: Script Depot