docs.rs failed to build ash_renderer-0.3.2
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build:
ash_renderer-0.4.30
ASH Renderer
A production-quality Vulkan renderer built with ASH (Vulkan bindings) and VMA (GPU memory allocator).
ECS-free, pure rendering engine - decoupled camera and input handling, ready for any game engine.
Features
- 🎨 PBR Materials - Physically-based rendering with metallic/roughness workflow
- 🌑 Shadow Mapping - Cascaded shadow maps with PCF filtering
- ✨ Post-Processing - Bloom, tonemapping, and temporal anti-aliasing
- 📊 GPU Profiling - Built-in timing queries and performance diagnostics
- 🔌 Feature System - Extensible plugin architecture for rendering features
- 🚀 High Performance - 60+ FPS @ 1080p with 1000+ objects
- 🔧 LOD System - Automatic level-of-detail management
- ⚡ GPU Instancing - Efficient batch rendering
- 👁️ Occlusion Culling - GPU-accelerated visibility testing
- 🔄 Hot Reloading - Automatic shader recompilation and pipeline recreation on file change
- 🛡️ Robust Validation - GPU-assisted validation with automatic fallback (VK_EXT_validation_features)
- 🍃 Alpha Testing - Support for transparent shadows (e.g. foliage)
- 💡 Light Culling - Tiled/clustered forward rendering
- 📦 Bindless Textures - Efficient bindless texture management (1024+ textures)
- 🖥️ Headless Support - Decoupled rendering via
SurfaceProvidertrait (CI/Benchmark ready)
Quick Start
Add to your Cargo.toml:
[]
= "0.3.2"
= "0.30" # Required for math types
Basic Usage
use *;
use ;
use *;
use ;
// use winit::window::Window; // Assumed available from context
// 1. Initialization (inside your winit event loop)
// Wraps the window to provide a Vulkan surface
let surface_provider = new;
// Renderer::new handles Vulkan instance, device, and swapchain creation.
let mut renderer = new?;
// 2. Resource Setup
// Create a built-in primitive mesh
let cube = create_cube;
// Define PBR material properties
let material = Material ;
// Assign resources to the renderer
renderer.set_mesh;
*renderer.material_mut = material;
// 3. Render Loop (e.g., inside RedrawRequested)
let aspect_ratio = width as f32 / height as f32;
// Camera Setup
let camera_pos = new;
let target = ZERO;
let view = look_at_rh;
// Projection Setup (Note: Vulkan requires Y-flip)
let mut proj = perspective_rh;
proj.y_axis.y *= -1.0;
// Render the frame with the current camera state
renderer.render_frame?;
// 4. Resize Handling
// Call this when the window is resized to recreate the swapchain
renderer.request_swapchain_resize;
Mesh Creation
// Built-in primitives
let cube = create_cube;
let sphere = create_sphere;
let plane = create_plane;
// Custom mesh
let mesh = new;
Materials
let material = Material ;
Examples
Run the provided examples to see the renderer in action:
# Simple triangle
# Textured cube with materials (Basic Usage)
# GLTF model loading
Architecture
ash_renderer/
├── src/
│ ├── vulkan/ # Low-level Vulkan abstractions
│ │ ├── device.rs # Logical device management
│ │ ├── pipeline.rs # Graphics/compute pipelines
│ │ ├── shader.rs # Shader loading & reflection
│ │ └── ...
│ ├── renderer/ # High-level rendering API
│ │ ├── renderer.rs # Main Renderer struct
│ │ ├── resources/ # GPU resources (mesh, texture, material)
│ │ ├── features/ # Extensible feature system
│ │ └── diagnostics/ # Profiling & debugging
│ └── shaders/ # GLSL shader sources
└── examples/ # Usage examples
Performance
| Metric | Target | Achieved |
|---|---|---|
| FPS @ 1080p | 60+ | ✅ |
| Objects | 1000+ | ✅ |
| Memory (idle) | < 200MB | ✅ |
| Frame time | < 16.6ms | ✅ |
Feature Flags
| Feature | Description | Default |
|---|---|---|
validation |
Vulkan validation layers | ✅ |
gltf_loading |
GLTF model loading | ✅ |
shader_compilation |
Runtime shader compilation | ❌ |
profiling |
GPU profiling queries | ❌ |
parallel |
Parallel command recording | ❌ |
Requirements
- Rust: 1.70+
- Vulkan: 1.2+ capable GPU
- Vulkan SDK: For validation layers (optional)
Author
Saptak Santra
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.
Made with ❤️ and Vulkan