Skip to content

Commit

Permalink
Merge branch 'master' into emilk/wgpu-no-default-features
Browse files Browse the repository at this point in the history
  • Loading branch information
emilk authored Jan 24, 2024
2 parents 6602fdc + 4d1a736 commit 46b0210
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 25 deletions.
29 changes: 26 additions & 3 deletions crates/egui-wgpu/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,15 @@ pub struct WgpuConfiguration {
/// Present mode used for the primary surface.
pub present_mode: wgpu::PresentMode,

/// Desired maximum number of frames that the presentation engine should queue in advance.
///
/// Use `1` for low-latency, and `2` for high-throughput.
///
/// See [`wgpu::SurfaceConfiguration::desired_maximum_frame_latency`] for details.
///
/// `None` = `wgpu` default.
pub desired_maximum_frame_latency: Option<u32>,

/// Power preference for the adapter.
pub power_preference: wgpu::PowerPreference,

Expand All @@ -237,10 +246,22 @@ pub struct WgpuConfiguration {

impl std::fmt::Debug for WgpuConfiguration {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let Self {
supported_backends,
device_descriptor: _,
present_mode,
desired_maximum_frame_latency,
power_preference,
on_surface_error: _,
} = self;
f.debug_struct("WgpuConfiguration")
.field("supported_backends", &self.supported_backends)
.field("present_mode", &self.present_mode)
.field("power_preference", &self.power_preference)
.field("supported_backends", &supported_backends)
.field("present_mode", &present_mode)
.field(
"desired_maximum_frame_latency",
&desired_maximum_frame_latency,
)
.field("power_preference", &power_preference)
.finish_non_exhaustive()
}
}
Expand Down Expand Up @@ -274,6 +295,8 @@ impl Default for WgpuConfiguration {

present_mode: wgpu::PresentMode::AutoVsync,

desired_maximum_frame_latency: None,

power_preference: wgpu::util::power_preference_from_env()
.unwrap_or(wgpu::PowerPreference::HighPerformance),

Expand Down
44 changes: 22 additions & 22 deletions crates/egui-wgpu/src/winit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ impl Painter {
fn configure_surface(
surface_state: &SurfaceState,
render_state: &RenderState,
present_mode: wgpu::PresentMode,
config: &WgpuConfiguration,
) {
crate::profile_function!();

Expand All @@ -155,21 +155,25 @@ impl Painter {
let width = surface_state.width;
let height = surface_state.height;

surface_state.surface.configure(
&render_state.device,
&wgpu::SurfaceConfiguration {
// TODO(emilk): expose `desired_maximum_frame_latency` to eframe users
usage,
format: render_state.target_format,
present_mode,
alpha_mode: surface_state.alpha_mode,
view_formats: vec![render_state.target_format],
..surface_state
.surface
.get_default_config(&render_state.adapter, width, height)
.expect("The surface isn't supported by this adapter")
},
);
let mut surf_config = wgpu::SurfaceConfiguration {
usage,
format: render_state.target_format,
present_mode: config.present_mode,
alpha_mode: surface_state.alpha_mode,
view_formats: vec![render_state.target_format],
..surface_state
.surface
.get_default_config(&render_state.adapter, width, height)
.expect("The surface isn't supported by this adapter")
};

if let Some(desired_maximum_frame_latency) = config.desired_maximum_frame_latency {
surf_config.desired_maximum_frame_latency = desired_maximum_frame_latency;
}

surface_state
.surface
.configure(&render_state.device, &surf_config);
}

/// Updates (or clears) the [`winit::window::Window`] associated with the [`Painter`]
Expand Down Expand Up @@ -328,7 +332,7 @@ impl Painter {
surface_state.width = width;
surface_state.height = height;

Self::configure_surface(surface_state, render_state, self.configuration.present_mode);
Self::configure_surface(surface_state, render_state, &self.configuration);

if let Some(depth_format) = self.depth_format {
self.depth_texture_view.insert(
Expand Down Expand Up @@ -525,11 +529,7 @@ impl Painter {
Ok(frame) => frame,
Err(err) => match (*self.configuration.on_surface_error)(err) {
SurfaceErrorAction::RecreateSurface => {
Self::configure_surface(
surface_state,
render_state,
self.configuration.present_mode,
);
Self::configure_surface(surface_state, render_state, &self.configuration);
return None;
}
SurfaceErrorAction::SkipFrame => {
Expand Down
6 changes: 6 additions & 0 deletions crates/egui/src/memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,12 @@ impl Memory {
self.interaction().drag_id == Some(id)
}

/// Get the id of the widget being dragged, if any.
#[inline(always)]
pub fn dragged_id(&self) -> Option<Id> {
self.interaction().drag_id
}

/// Set which widget is being dragged.
#[inline(always)]
pub fn set_dragged_id(&mut self, id: Id) {
Expand Down
8 changes: 8 additions & 0 deletions crates/egui/src/response.rs
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,14 @@ impl Response {
self.dragged
}

/// The Widget is being decidedly dragged.
///
/// This helper function checks both the output of [`Self::dragged`] and [`crate::PointerState::is_decidedly_dragging`].
#[inline]
pub fn decidedly_dragged(&self) -> bool {
self.dragged() && self.ctx.input(|i| i.pointer.is_decidedly_dragging())
}

#[inline]
pub fn dragged_by(&self, button: PointerButton) -> bool {
self.dragged() && self.ctx.input(|i| i.pointer.button_down(button))
Expand Down

0 comments on commit 46b0210

Please sign in to comment.