mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
cache present modes, add check for present modes in set_render_mode
and move present mode localization to hud
This commit is contained in:
parent
cfd0ffd7f6
commit
89d70cc932
@ -7,7 +7,7 @@ use crate::{
|
|||||||
},
|
},
|
||||||
render::{
|
render::{
|
||||||
AaMode, BloomConfig, BloomFactor, BloomMode, CloudMode, FluidMode, LightingMode,
|
AaMode, BloomConfig, BloomFactor, BloomMode, CloudMode, FluidMode, LightingMode,
|
||||||
ReflectionMode, RenderMode, ShadowMapMode, ShadowMode, UpscaleMode,
|
PresentMode, ReflectionMode, RenderMode, ShadowMapMode, ShadowMode, UpscaleMode,
|
||||||
},
|
},
|
||||||
session::settings_change::Graphics as GraphicsChange,
|
session::settings_change::Graphics as GraphicsChange,
|
||||||
settings::{Fps, GraphicsSettings},
|
settings::{Fps, GraphicsSettings},
|
||||||
@ -662,7 +662,14 @@ impl<'a> Widget for Video<'a> {
|
|||||||
let mode_list = self.global_state.window.renderer().present_modes();
|
let mode_list = self.global_state.window.renderer().present_modes();
|
||||||
let mode_label_list = mode_list
|
let mode_label_list = mode_list
|
||||||
.iter()
|
.iter()
|
||||||
.map(|mode| self.localized_strings.get_msg(mode.localize()))
|
.map(|mode| {
|
||||||
|
self.localized_strings.get_msg(match mode {
|
||||||
|
PresentMode::Fifo => "hud-settings-present_mode-vsync_capped",
|
||||||
|
PresentMode::FifoRelaxed => "hud-settings-present_mode-vsync_adaptive",
|
||||||
|
PresentMode::Mailbox => "hud-settings-present_mode-vsync_uncapped",
|
||||||
|
PresentMode::Immediate => "hud-settings-present_mode-vsync_off",
|
||||||
|
})
|
||||||
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
// Get which present mode is currently active
|
// Get which present mode is currently active
|
||||||
|
@ -298,17 +298,6 @@ pub enum PresentMode {
|
|||||||
Fifo, // has to be last for `#[serde(other)]`
|
Fifo, // has to be last for `#[serde(other)]`
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PresentMode {
|
|
||||||
pub fn localize(&self) -> &'static str {
|
|
||||||
match self {
|
|
||||||
Self::Fifo => "hud-settings-present_mode-vsync_capped",
|
|
||||||
Self::FifoRelaxed => "hud-settings-present_mode-vsync_adaptive",
|
|
||||||
Self::Mailbox => "hud-settings-present_mode-vsync_uncapped",
|
|
||||||
Self::Immediate => "hud-settings-present_mode-vsync_off",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<PresentMode> for wgpu::PresentMode {
|
impl From<PresentMode> for wgpu::PresentMode {
|
||||||
fn from(mode: PresentMode) -> Self {
|
fn from(mode: PresentMode) -> Self {
|
||||||
match mode {
|
match mode {
|
||||||
|
@ -135,7 +135,6 @@ enum State {
|
|||||||
pub struct Renderer {
|
pub struct Renderer {
|
||||||
device: Arc<wgpu::Device>,
|
device: Arc<wgpu::Device>,
|
||||||
queue: wgpu::Queue,
|
queue: wgpu::Queue,
|
||||||
adapter: wgpu::Adapter,
|
|
||||||
surface: wgpu::Surface,
|
surface: wgpu::Surface,
|
||||||
surface_config: wgpu::SurfaceConfiguration,
|
surface_config: wgpu::SurfaceConfiguration,
|
||||||
|
|
||||||
@ -185,6 +184,8 @@ pub struct Renderer {
|
|||||||
|
|
||||||
/// The texture format used for the intermediate rendering passes
|
/// The texture format used for the intermediate rendering passes
|
||||||
intermediate_format: wgpu::TextureFormat,
|
intermediate_format: wgpu::TextureFormat,
|
||||||
|
|
||||||
|
present_modes: Vec<PresentMode>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Renderer {
|
impl Renderer {
|
||||||
@ -562,10 +563,16 @@ impl Renderer {
|
|||||||
#[cfg(feature = "egui-ui")]
|
#[cfg(feature = "egui-ui")]
|
||||||
let egui_renderpass = egui_wgpu_backend::RenderPass::new(&device, format, 1);
|
let egui_renderpass = egui_wgpu_backend::RenderPass::new(&device, format, 1);
|
||||||
|
|
||||||
|
let present_modes = surface
|
||||||
|
.get_capabilities(&adapter)
|
||||||
|
.present_modes
|
||||||
|
.into_iter()
|
||||||
|
.filter_map(|present_mode| PresentMode::try_from(present_mode).ok())
|
||||||
|
.collect();
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
device,
|
device,
|
||||||
queue,
|
queue,
|
||||||
adapter,
|
|
||||||
surface,
|
surface,
|
||||||
surface_config,
|
surface_config,
|
||||||
|
|
||||||
@ -606,6 +613,7 @@ impl Renderer {
|
|||||||
graphics_backend,
|
graphics_backend,
|
||||||
|
|
||||||
intermediate_format,
|
intermediate_format,
|
||||||
|
present_modes,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -642,7 +650,16 @@ impl Renderer {
|
|||||||
self.other_modes = other_modes;
|
self.other_modes = other_modes;
|
||||||
|
|
||||||
// Update present mode in swap chain descriptor
|
// Update present mode in swap chain descriptor
|
||||||
self.surface_config.present_mode = self.other_modes.present_mode.into();
|
self.surface_config.present_mode =
|
||||||
|
if self.present_modes.contains(&self.other_modes.present_mode) {
|
||||||
|
self.other_modes.present_mode
|
||||||
|
} else {
|
||||||
|
*self
|
||||||
|
.present_modes
|
||||||
|
.first()
|
||||||
|
.expect("There should never be no supported present modes")
|
||||||
|
}
|
||||||
|
.into();
|
||||||
|
|
||||||
// Only enable profiling if the wgpu features are enabled
|
// Only enable profiling if the wgpu features are enabled
|
||||||
self.other_modes.profiler_enabled &= self.profiler_features_enabled;
|
self.other_modes.profiler_enabled &= self.profiler_features_enabled;
|
||||||
@ -687,14 +704,7 @@ impl Renderer {
|
|||||||
pub fn pipeline_modes(&self) -> &PipelineModes { &self.pipeline_modes }
|
pub fn pipeline_modes(&self) -> &PipelineModes { &self.pipeline_modes }
|
||||||
|
|
||||||
/// Get the supported present modes.
|
/// Get the supported present modes.
|
||||||
pub fn present_modes(&self) -> Vec<PresentMode> {
|
pub fn present_modes(&self) -> &[PresentMode] { &self.present_modes }
|
||||||
self.surface
|
|
||||||
.get_capabilities(&self.adapter)
|
|
||||||
.present_modes
|
|
||||||
.into_iter()
|
|
||||||
.filter_map(|present_mode| PresentMode::try_from(present_mode).ok())
|
|
||||||
.collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the current profiling times
|
/// Get the current profiling times
|
||||||
/// Nested timings immediately follow their parent
|
/// Nested timings immediately follow their parent
|
||||||
|
Loading…
Reference in New Issue
Block a user