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//! - **Gamma correction**: Automatic sRGB format detection and gamma correction
10//! - **Multi-frame buffering**: Support for multiple frames in flight
11//! - **Device object management**: Proper handling of device loss and recovery
12//! - **Multi-viewport support**: Support for multiple windows (feature-gated)
13//!
14//! # Example
15//!
16//! ```rust,no_run
17//! use dear_imgui_rs::Context;
18//! use dear_imgui_wgpu::{WgpuRenderer, WgpuInitInfo};
19//! use wgpu::*;
20//!
21//! // Initialize WGPU device and queue
22//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
23//! let instance = Instance::new(&InstanceDescriptor::default());
24//! let adapter = instance.request_adapter(&RequestAdapterOptions::default()).await.unwrap();
25//! let (device, queue) = adapter.request_device(&DeviceDescriptor::default()).await?;
26//!
27//! // Create Dear ImGui context
28//! let mut imgui = Context::create();
29//!
30//! // Create renderer
31//! let init_info = WgpuInitInfo::new(device, queue, TextureFormat::Bgra8UnormSrgb);
32//! let mut renderer = WgpuRenderer::new();
33//! renderer.init(init_info)?;
34//! renderer.configure_imgui_context(&mut imgui);
35//! renderer.prepare_font_atlas(&mut imgui)?;
36//!
37//! // In your render loop:
38//! // imgui.new_frame();
39//! // ... build your UI ...
40//! // let draw_data = imgui.render();
41//! // renderer.render_draw_data(&draw_data, &mut render_pass)?;
42//! # Ok(())
43//! # }
44//! ```
45
46// Module declarations
47mod data;
48mod error;
49mod frame_resources;
50mod render_resources;
51mod renderer;
52mod shaders;
53mod texture;
54mod uniforms;
55
56// Re-exports
57pub use data::*;
58pub use error::*;
59pub use frame_resources::*;
60pub use render_resources::*;
61pub use renderer::*;
62pub use shaders::*;
63pub use texture::*;
64pub use uniforms::*;
65
66/// Gamma correction mode for the WGPU renderer
67#[derive(Debug, Clone, Copy, PartialEq, Eq)]
68pub enum GammaMode {
69 /// Automatically pick gamma based on render target format (default)
70 Auto,
71 /// Force linear output (gamma = 1.0)
72 Linear,
73 /// Force gamma 2.2 curve (gamma = 2.2)
74 Gamma22,
75}