Skip to main content

CaptureMode

Enum CaptureMode 

Source
pub enum CaptureMode {
    Cpu {
        include_cursor: bool,
    },
    Gpu,
}
Available on Windows and crate feature dxgi-capture and (crate features dxgi-capture or wasapi-capture) only.
Expand description

Variants§

§

Cpu

The original behavior: AcquireNextFrame’s resource is copied into a CPU-readable staging texture, Mapped, and copied row-by-row into a plain Pixel::BGRA CPU frame. No external device required — open creates its own, internal to this element, from the chosen output’s own adapter.

include_cursor composites the mouse cursor onto every emitted frame. Off by default: the base capture path (desktop pixels only) needs no extra work, and most consumers (recording, streaming a presentation) don’t want the cursor baked in at all. Only exists on this variant — cursor compositing is CPU-side pixel blending (composite_cursor), which has nothing to run against under CaptureMode::Gpu, where the captured image never touches the CPU at all; putting the field here instead of as a separate DxgiCaptureOptions flag makes that combination unrepresentable rather than a runtime error to guard against. Also unsupported (a hard open-time error, see DxgiCaptureSourceError::CursorUnsupportedForRegion) when DxgiCaptureOptions::area is a CaptureArea::Region spanning more than one output — see that variant’s own docs on why.

Fields

§include_cursor: bool
§

Gpu

Captures straight to a GPU-resident frame tagged Pixel::D3D11 (BGRA — desktop content has no reason to go through YUV) — no Map, no CPU pixel copy at all, just GPU-side CopyResource/ CopySubresourceRegion calls (each contributing output’s duplication resource -> this element’s own per-output “latest capture” texture, then those -> a fresh per-emission composite texture every tick, so an in-flight pushed frame’s content can’t change under whatever’s still reading it — same reasoning crate::elements::D3d11Upload documents for building a fresh texture per call rather than reusing one).

Unlike CaptureMode::Cpu, this variant carries no device of its own to inject: open always builds the device itself, from whichever adapter DxgiCaptureOptions::area actually selects (the only place that resolves “which adapter” — see resolve_area), and hands it back as open’s own return value for the caller to reuse. That’s the one ID3D11Device every other D3D11 element sharing this capture’s output should be built from (e.g. render_common::D3d11GpuContext::new(Some(device))) — for open’s own zero-copy path to mean anything, see crate::elements::D3d11Renderer’s own docs on why. Taking a caller-supplied device here instead would only reopen the exact adapter-mismatch problem this design avoids: two independently resolved “which adapter” answers that would need to be checked against each other instead of structurally being the same one.

No cursor option — see CaptureMode::Cpu’s own docs on why.

Trait Implementations§

Source§

impl Clone for CaptureMode

Source§

fn clone(&self) -> CaptureMode

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CaptureMode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> CryptoSafe for T
where T: Send + Sync + Debug,

§

impl<T> CryptoSafe for T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more