dear_imgui_wgpu/lib.rs
1//! WGPU backend for Dear ImGui
2//!
3//! This crate provides a WGPU-based renderer for Dear ImGui, allowing you to
4//! render Dear ImGui interfaces using the WGPU graphics API.
5//!
6//! # Features
7//!
8//! - **Modern texture management**: Full integration with Dear ImGui's ImTextureData system
9//! - **External textures**: Register existing `wgpu::Texture` resources for UI display,
10//! with optional per-texture custom samplers.
11//! - **Gamma correction**: Automatic sRGB format detection and gamma correction
12//! - **Multi-frame buffering**: Support for multiple frames in flight
13//! - **Device object management**: Helpers to recreate device objects (pipelines/buffers/textures) after loss
14//! - **Multi-viewport support**: Support for multiple windows (feature-gated via `multi-viewport-winit` for winit or `multi-viewport-sdl3` for SDL3 on native targets)
15//!
16//! # Example
17//!
18//! ```rust,no_run
19//! use dear_imgui_rs::Context;
20//! use dear_imgui_wgpu::{WgpuRenderer, WgpuInitInfo};
21//! use wgpu::*;
22//!
23//! // Initialize WGPU device and queue
24//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
25//! let instance = Instance::new(&InstanceDescriptor::default());
26//! let adapter = instance.request_adapter(&RequestAdapterOptions::default()).await.unwrap();
27//! let (device, queue) = adapter.request_device(&DeviceDescriptor::default()).await?;
28//!
29//! // Create Dear ImGui context
30//! let mut imgui = Context::create();
31//!
32//! // Create renderer (recommended path)
33//! let init_info = WgpuInitInfo::new(device, queue, TextureFormat::Bgra8UnormSrgb);
34//! let mut renderer = WgpuRenderer::new(init_info, &mut imgui)?;
35//!
36//! // In your render loop:
37//! // imgui.new_frame();
38//! // ... build your UI ...
39//! // let draw_data = imgui.render();
40//! // renderer.render_draw_data(&draw_data, &mut render_pass)?;
41//! # Ok(())
42//! # }
43//! ```
44
45// Module declarations
46mod data;
47mod error;
48mod frame_resources;
49mod render_resources;
50mod renderer;
51mod shaders;
52mod texture;
53mod uniforms;
54
55// Re-exports
56pub use data::*;
57pub use error::*;
58pub use frame_resources::*;
59pub use render_resources::*;
60pub use renderer::*;
61pub use shaders::*;
62pub use texture::*;
63pub use uniforms::*;
64
65// Re-export multi-viewport helpers when enabled
66#[cfg(feature = "multi-viewport-winit")]
67pub use renderer::multi_viewport;
68#[cfg(feature = "multi-viewport-sdl3")]
69pub use renderer::multi_viewport_sdl3;
70
71/// Gamma correction mode for the WGPU renderer
72#[derive(Debug, Clone, Copy, PartialEq, Eq)]
73pub enum GammaMode {
74 /// Automatically pick gamma based on render target format (default)
75 Auto,
76 /// Force linear output (gamma = 1.0)
77 Linear,
78 /// Force gamma 2.2 curve (gamma = 2.2)
79 Gamma22,
80}