renderdoc/
settings.rs

1//! Types for configuring the behavior of RenderDoc frame captures.
2
3use std::u32;
4
5use bitflags::bitflags;
6
7/// RenderDoc capture options.
8#[repr(u32)]
9#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
10pub enum CaptureOption {
11    /// Let the application enable vertical synchronization.
12    AllowVSync = renderdoc_sys::eRENDERDOC_Option_AllowVSync,
13    /// Let the application enter fullscreen mode.
14    AllowFullscreen = renderdoc_sys::eRENDERDOC_Option_AllowFullscreen,
15    /// Record API debugging events and messages.
16    ///
17    /// This option also goes by the deprecated name of `DebugDeviceMode`.
18    ApiValidation = renderdoc_sys::eRENDERDOC_Option_APIValidation,
19    /// Capture CPU callstacks for API events.
20    CaptureCallstacks = renderdoc_sys::eRENDERDOC_Option_CaptureCallstacks,
21    /// When capturing CPU callstacks, only capture them from drawcalls.
22    ///
23    /// This option does nothing without the above option being enabled.
24    CaptureCallstacksOnlyDraws = renderdoc_sys::eRENDERDOC_Option_CaptureCallstacksOnlyDraws,
25    /// Specify a delay, measured in seconds, to wait for a debugger to attach to the application
26    /// after being injected.
27    DelayForDebugger = renderdoc_sys::eRENDERDOC_Option_DelayForDebugger,
28    /// Verify any writes to mapped buffers by checking the memory after the bounds of the
29    /// returned pointer to detect any modification.
30    VerifyMapWrites = renderdoc_sys::eRENDERDOC_Option_VerifyMapWrites,
31    /// Hooks any system API calls that create child processes and injects RenderDoc into them
32    /// recursively with the same options.
33    HookIntoChildren = renderdoc_sys::eRENDERDOC_Option_HookIntoChildren,
34    /// Reference all resources available at the time of capture.
35    ///
36    /// By default, RenderDoc only includes resources in the final capture file necessary for that
37    /// frame. This option allows you to override that behavior.
38    RefAllResources = renderdoc_sys::eRENDERDOC_Option_RefAllResources,
39    /// Save the initial state for all resources, regardless of usage.
40    ///
41    /// By default, RenderDoc skips saving initial states for resources where the previous
42    /// contents don't appear to be used (assuming that writes before reads indicate the previous
43    /// contents aren't used).
44    SaveAllInitials = renderdoc_sys::eRENDERDOC_Option_SaveAllInitials,
45    /// Capture all command lists generated from the start of the application.
46    ///
47    /// In APIs that allow for recording of command lists to be replayed later, RenderDoc may
48    /// choose to not capture command lists before a frame capture is triggered to reduce
49    /// overhead. This means any command lists that are recorded one and replayed many times will
50    /// not be available, potentially causing a failure to capture.
51    ///
52    /// Note that this is only true for APIs where multithreading is difficult or otherwise
53    /// discouraged. Newer APIs, e.g. Vulkan and D3D12, will ignore this option and always capture
54    /// all command lists since they are heavily oriented around them and the associated overhead
55    /// is mostly reduced due to superior API design.
56    CaptureAllCmdLists = renderdoc_sys::eRENDERDOC_Option_CaptureAllCmdLists,
57    /// Mute API debug output when `CaptureOption::ApiValidation` is enabled.
58    DebugOutputMute = renderdoc_sys::eRENDERDOC_Option_DebugOutputMute,
59    /// Allow all vendor extensions to be used, even when they may be incompatible with RenderDoc
60    /// and could potentially cause corrupted replays or crashes.
61    AllowUnsupportedVendorExtensions =
62        renderdoc_sys::eRENDERDOC_Option_AllowUnsupportedVendorExtensions,
63}
64
65/// User input key codes.
66#[allow(missing_docs)]
67#[repr(u32)]
68#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
69pub enum InputButton {
70    /// The '0' key over the letters.
71    Key0 = renderdoc_sys::eRENDERDOC_Key_0,
72    /// The '1' key over the letters.
73    Key1 = renderdoc_sys::eRENDERDOC_Key_1,
74    /// The '2' key over the letters.
75    Key2 = renderdoc_sys::eRENDERDOC_Key_2,
76    /// The '3' key over the letters.
77    Key3 = renderdoc_sys::eRENDERDOC_Key_3,
78    /// The '4' key over the letters.
79    Key4 = renderdoc_sys::eRENDERDOC_Key_4,
80    /// The '5' key over the letters.
81    Key5 = renderdoc_sys::eRENDERDOC_Key_5,
82    /// The '6' key over the letters.
83    Key6 = renderdoc_sys::eRENDERDOC_Key_6,
84    /// The '7' key over the letters.
85    Key7 = renderdoc_sys::eRENDERDOC_Key_7,
86    /// The '8' key over the letters.
87    Key8 = renderdoc_sys::eRENDERDOC_Key_8,
88    /// The '9' key over the letters.
89    Key9 = renderdoc_sys::eRENDERDOC_Key_9,
90
91    A = renderdoc_sys::eRENDERDOC_Key_A,
92    B = renderdoc_sys::eRENDERDOC_Key_B,
93    C = renderdoc_sys::eRENDERDOC_Key_C,
94    D = renderdoc_sys::eRENDERDOC_Key_D,
95    E = renderdoc_sys::eRENDERDOC_Key_E,
96    F = renderdoc_sys::eRENDERDOC_Key_F,
97    G = renderdoc_sys::eRENDERDOC_Key_G,
98    H = renderdoc_sys::eRENDERDOC_Key_H,
99    I = renderdoc_sys::eRENDERDOC_Key_I,
100    J = renderdoc_sys::eRENDERDOC_Key_J,
101    K = renderdoc_sys::eRENDERDOC_Key_K,
102    L = renderdoc_sys::eRENDERDOC_Key_L,
103    M = renderdoc_sys::eRENDERDOC_Key_M,
104    N = renderdoc_sys::eRENDERDOC_Key_N,
105    O = renderdoc_sys::eRENDERDOC_Key_O,
106    P = renderdoc_sys::eRENDERDOC_Key_P,
107    Q = renderdoc_sys::eRENDERDOC_Key_Q,
108    R = renderdoc_sys::eRENDERDOC_Key_R,
109    S = renderdoc_sys::eRENDERDOC_Key_S,
110    T = renderdoc_sys::eRENDERDOC_Key_T,
111    U = renderdoc_sys::eRENDERDOC_Key_U,
112    V = renderdoc_sys::eRENDERDOC_Key_V,
113    W = renderdoc_sys::eRENDERDOC_Key_W,
114    X = renderdoc_sys::eRENDERDOC_Key_X,
115    Y = renderdoc_sys::eRENDERDOC_Key_Y,
116    Z = renderdoc_sys::eRENDERDOC_Key_Z,
117
118    /// Leave the rest of the ASCII range free, in case the RenderDoc developers decide to use it
119    /// later.
120    NonPrintable = renderdoc_sys::eRENDERDOC_Key_NonPrintable,
121
122    /// Division key on the numpad.
123    Divide = renderdoc_sys::eRENDERDOC_Key_Divide,
124    /// Multiplication key on the numpad.
125    Multiply = renderdoc_sys::eRENDERDOC_Key_Multiply,
126    /// Subtraction key on the numpad.
127    Subtract = renderdoc_sys::eRENDERDOC_Key_Subtract,
128    /// Addition key on the numpad.
129    Plus = renderdoc_sys::eRENDERDOC_Key_Plus,
130
131    F1 = renderdoc_sys::eRENDERDOC_Key_F1,
132    F2 = renderdoc_sys::eRENDERDOC_Key_F2,
133    F3 = renderdoc_sys::eRENDERDOC_Key_F3,
134    F4 = renderdoc_sys::eRENDERDOC_Key_F4,
135    F5 = renderdoc_sys::eRENDERDOC_Key_F5,
136    F6 = renderdoc_sys::eRENDERDOC_Key_F6,
137    F7 = renderdoc_sys::eRENDERDOC_Key_F7,
138    F8 = renderdoc_sys::eRENDERDOC_Key_F8,
139    F9 = renderdoc_sys::eRENDERDOC_Key_F9,
140    F10 = renderdoc_sys::eRENDERDOC_Key_F10,
141    F11 = renderdoc_sys::eRENDERDOC_Key_F11,
142    F12 = renderdoc_sys::eRENDERDOC_Key_F12,
143
144    Home = renderdoc_sys::eRENDERDOC_Key_Home,
145    End = renderdoc_sys::eRENDERDOC_Key_End,
146    Insert = renderdoc_sys::eRENDERDOC_Key_Insert,
147    Delete = renderdoc_sys::eRENDERDOC_Key_Delete,
148    PageUp = renderdoc_sys::eRENDERDOC_Key_PageUp,
149    PageDn = renderdoc_sys::eRENDERDOC_Key_PageDn,
150
151    Backspace = renderdoc_sys::eRENDERDOC_Key_Backspace,
152    Tab = renderdoc_sys::eRENDERDOC_Key_Tab,
153    PrtScrn = renderdoc_sys::eRENDERDOC_Key_PrtScrn,
154    Pause = renderdoc_sys::eRENDERDOC_Key_Pause,
155
156    Max = renderdoc_sys::eRENDERDOC_Key_Max,
157}
158
159#[cfg(feature = "winit")]
160impl From<winit::event::VirtualKeyCode> for InputButton {
161    fn from(code: winit::event::VirtualKeyCode) -> InputButton {
162        use winit::event::VirtualKeyCode;
163        match code {
164            VirtualKeyCode::Key1 => InputButton::Key1,
165            VirtualKeyCode::Key2 => InputButton::Key2,
166            VirtualKeyCode::Key3 => InputButton::Key3,
167            VirtualKeyCode::Key4 => InputButton::Key4,
168            VirtualKeyCode::Key5 => InputButton::Key5,
169            VirtualKeyCode::Key6 => InputButton::Key6,
170            VirtualKeyCode::Key7 => InputButton::Key7,
171            VirtualKeyCode::Key8 => InputButton::Key8,
172            VirtualKeyCode::Key9 => InputButton::Key9,
173            VirtualKeyCode::Key0 => InputButton::Key0,
174            VirtualKeyCode::A => InputButton::A,
175            VirtualKeyCode::B => InputButton::B,
176            VirtualKeyCode::C => InputButton::C,
177            VirtualKeyCode::D => InputButton::D,
178            VirtualKeyCode::E => InputButton::E,
179            VirtualKeyCode::F => InputButton::F,
180            VirtualKeyCode::G => InputButton::G,
181            VirtualKeyCode::H => InputButton::H,
182            VirtualKeyCode::I => InputButton::I,
183            VirtualKeyCode::J => InputButton::J,
184            VirtualKeyCode::K => InputButton::K,
185            VirtualKeyCode::L => InputButton::L,
186            VirtualKeyCode::M => InputButton::M,
187            VirtualKeyCode::N => InputButton::N,
188            VirtualKeyCode::O => InputButton::O,
189            VirtualKeyCode::P => InputButton::P,
190            VirtualKeyCode::Q => InputButton::Q,
191            VirtualKeyCode::R => InputButton::R,
192            VirtualKeyCode::S => InputButton::S,
193            VirtualKeyCode::T => InputButton::T,
194            VirtualKeyCode::U => InputButton::U,
195            VirtualKeyCode::V => InputButton::V,
196            VirtualKeyCode::W => InputButton::W,
197            VirtualKeyCode::X => InputButton::X,
198            VirtualKeyCode::Y => InputButton::Y,
199            VirtualKeyCode::Z => InputButton::Z,
200            VirtualKeyCode::NumpadDivide => InputButton::Divide,
201            VirtualKeyCode::NumpadMultiply => InputButton::Multiply,
202            VirtualKeyCode::NumpadSubtract => InputButton::Subtract,
203            VirtualKeyCode::NumpadAdd => InputButton::Plus,
204            VirtualKeyCode::F1 => InputButton::F1,
205            VirtualKeyCode::F2 => InputButton::F2,
206            VirtualKeyCode::F3 => InputButton::F3,
207            VirtualKeyCode::F4 => InputButton::F4,
208            VirtualKeyCode::F5 => InputButton::F5,
209            VirtualKeyCode::F6 => InputButton::F6,
210            VirtualKeyCode::F7 => InputButton::F7,
211            VirtualKeyCode::F8 => InputButton::F8,
212            VirtualKeyCode::F9 => InputButton::F9,
213            VirtualKeyCode::F10 => InputButton::F10,
214            VirtualKeyCode::F11 => InputButton::F11,
215            VirtualKeyCode::F12 => InputButton::F12,
216            VirtualKeyCode::Home => InputButton::Home,
217            VirtualKeyCode::End => InputButton::End,
218            VirtualKeyCode::Insert => InputButton::Insert,
219            VirtualKeyCode::Delete => InputButton::Delete,
220            VirtualKeyCode::PageUp => InputButton::PageUp,
221            VirtualKeyCode::PageDown => InputButton::PageDn,
222            VirtualKeyCode::Back => InputButton::Backspace,
223            VirtualKeyCode::Tab => InputButton::Tab,
224            VirtualKeyCode::Snapshot => InputButton::PrtScrn,
225            VirtualKeyCode::Pause => InputButton::Pause,
226            _ => InputButton::Max,
227        }
228    }
229}
230
231bitflags! {
232    /// Bit flags for customizing the RenderDoc overlay.
233    pub struct OverlayBits: u32 {
234        /// Controls whether the overlay is enabled or disabled globally.
235        const ENABLED = renderdoc_sys::eRENDERDOC_Overlay_Enabled;
236        /// Shows the average, minimum, and maximum sampled frame rate.
237        const FRAME_RATE = renderdoc_sys::eRENDERDOC_Overlay_FrameRate;
238        /// Shows the current frame number.
239        const FRAME_NUMBER = renderdoc_sys::eRENDERDOC_Overlay_FrameNumber;
240        /// Shows a list of recent captures, out of the total captures made.
241        const CAPTURE_LIST = renderdoc_sys::eRENDERDOC_Overlay_CaptureList;
242        /// Sets the default configuration for the overlay.
243        const DEFAULT = renderdoc_sys::eRENDERDOC_Overlay_Default;
244        /// Enables all overlay configuration bits.
245        const ALL = u32::MAX;
246        /// Disables all overlay configuration bits.
247        const NONE = u32::MIN;
248    }
249}