
* basic working wgpu @ webgl on websys * fix glow compile error * introduced WebPainter trait, provide wgpu renderstate * WebPainterWgpu destroy implemented * make custom3d demo work on wgpu backend * changelog entry for wgpu support eframe wasm * remove temporary logging hack * stop using pollster for web we're actually not allowed to block - this only worked because wgpu on webgl doesn't actually cause anything blocking. However, when trying webgpu this became an issue * revert cargo update * compile error if neither glow nor wgpu features are enabled * code cleanup * Error handling * Update changelog with link * Make sure --all-features work * Select best framebuffer format from the available ones * update to wasm-bindgen 0.2.83 * Fix typo * Clean up Cargo.toml * Log about using the wgpu painter * fixup wgpu labels * fix custom3d_wgpu_shader ub padding * remove duplicated uniforms struct in wgsl shader for custom3d * Update docs: add async/await to the web 'start' function Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
44 lines
1.3 KiB
Rust
44 lines
1.3 KiB
Rust
//! This crates provides bindings between [`egui`](https://github.com/emilk/egui) and [wgpu](https://crates.io/crates/wgpu).
|
|
//!
|
|
//! ## Feature flags
|
|
#![cfg_attr(feature = "document-features", doc = document_features::document_features!())]
|
|
//!
|
|
|
|
#![allow(unsafe_code)]
|
|
|
|
pub use wgpu;
|
|
|
|
/// Low-level painting of [`egui`] on [`wgpu`].
|
|
pub mod renderer;
|
|
pub use renderer::CallbackFn;
|
|
pub use renderer::Renderer;
|
|
|
|
/// Module for painting [`egui`] with [`wgpu`] on [`winit`].
|
|
#[cfg(feature = "winit")]
|
|
pub mod winit;
|
|
|
|
use egui::mutex::RwLock;
|
|
use std::sync::Arc;
|
|
|
|
/// Access to the render state for egui, which can be useful in combination with
|
|
/// [`egui::PaintCallback`]s for custom rendering using WGPU.
|
|
#[derive(Clone)]
|
|
pub struct RenderState {
|
|
pub device: Arc<wgpu::Device>,
|
|
pub queue: Arc<wgpu::Queue>,
|
|
pub target_format: wgpu::TextureFormat,
|
|
pub renderer: Arc<RwLock<Renderer>>,
|
|
}
|
|
|
|
/// Find the framebuffer format that egui prefers
|
|
pub fn preferred_framebuffer_format(formats: &[wgpu::TextureFormat]) -> wgpu::TextureFormat {
|
|
for &format in formats {
|
|
if matches!(
|
|
format,
|
|
wgpu::TextureFormat::Rgba8Unorm | wgpu::TextureFormat::Bgra8Unorm
|
|
) {
|
|
return format;
|
|
}
|
|
}
|
|
formats[0] // take the first
|
|
}
|