mirror of
https://github.com/emilk/egui.git
synced 2026-08-31 05:40:03 -04:00
Add depth buffer support for egui-wgpu's render pass (#2002)
* add a depth texture for wgpu callbacks * egui-wgpu: use depth from native_options * add wgpu caveat to depth_buffer docstring
This commit is contained in:
@@ -259,6 +259,10 @@ pub struct NativeOptions {
|
||||
/// Sets the number of bits in the depth buffer.
|
||||
///
|
||||
/// `egui` doesn't need the depth buffer, so the default value is 0.
|
||||
///
|
||||
/// On `wgpu` backends, due to limited depth texture format options, this
|
||||
/// will be interpreted as a boolean (non-zero = true) for whether or not
|
||||
/// specifically a `Depth32Float` buffer is used.
|
||||
pub depth_buffer: u8,
|
||||
|
||||
/// Sets the number of bits in the stencil buffer.
|
||||
@@ -266,7 +270,7 @@ pub struct NativeOptions {
|
||||
/// `egui` doesn't need the stencil buffer, so the default value is 0.
|
||||
pub stencil_buffer: u8,
|
||||
|
||||
/// Specify wether or not hardware acceleration is preferred, required, or not.
|
||||
/// Specify whether or not hardware acceleration is preferred, required, or not.
|
||||
///
|
||||
/// Default: [`HardwareAcceleration::Preferred`].
|
||||
pub hardware_acceleration: HardwareAcceleration,
|
||||
|
||||
@@ -683,6 +683,12 @@ mod wgpu_integration {
|
||||
storage: Option<Box<dyn epi::Storage>>,
|
||||
window: winit::window::Window,
|
||||
) {
|
||||
let mut limits = wgpu::Limits::downlevel_webgl2_defaults();
|
||||
if self.native_options.depth_buffer > 0 {
|
||||
// When using a depth buffer, we have to be able to create a texture large enough for the entire surface.
|
||||
limits.max_texture_dimension_2d = 8192;
|
||||
}
|
||||
|
||||
#[allow(unsafe_code, unused_mut, unused_unsafe)]
|
||||
let painter = unsafe {
|
||||
let mut painter = egui_wgpu::winit::Painter::new(
|
||||
@@ -691,10 +697,11 @@ mod wgpu_integration {
|
||||
wgpu::DeviceDescriptor {
|
||||
label: None,
|
||||
features: wgpu::Features::default(),
|
||||
limits: wgpu::Limits::downlevel_webgl2_defaults(),
|
||||
limits,
|
||||
},
|
||||
wgpu::PresentMode::Fifo,
|
||||
self.native_options.multisampling.max(1) as _,
|
||||
self.native_options.depth_buffer,
|
||||
);
|
||||
painter.set_window(Some(&window));
|
||||
painter
|
||||
|
||||
Reference in New Issue
Block a user