Skip to main content

D3D11Texture

Struct D3D11Texture 

Source
pub struct D3D11Texture { /* private fields */ }
Expand description

ID3D11Texture2D* keyed-mutex / shared-handle resource.

Implementations§

Source§

impl D3D11Texture

Source

pub unsafe fn try_from_raw( texture: *mut c_void, luid: Option<(i32, u32)>, row_pitch: u32, keep_alive: Option<KeepAlive>, ) -> Result<Self, InvalidHandleError>

Wrap a raw ID3D11Texture2D*. Borrowing: the handle is stored non-owningly, this type has no Drop, and every obligation below extends to each Clone.

§Safety
  • texture must point to a live ID3D11Texture2D (or an ID3D11Resource whose QueryInterface for ID3D11Texture2D succeeds). It is stored verbatim, and the importer calls COM methods through the vtable at that address, so any other object type is undefined behaviour. Null is rejected as InvalidHandleError::NullPointer and is not a caller obligation.
  • Refcount: this does not AddRef, and there is no Drop that would Release. The caller keeps its own reference and must not Release it while this value or any Clone of it is reachable — every clone copies the bare interface pointer, so a premature Release leaves live clones pointing at freed memory. Pass a keep_alive anchor holding the producer’s reference to discharge this; with None the caller carries it.
  • Cross-thread: D3D11Texture is Send + Sync, and that is sound only because the caller asserts the producer enabled D3D11’s multithread protection for this resource — either D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX / D3D11_RESOURCE_MISC_SHARED_NTHANDLE on the texture, or ID3D11Multithread::SetMultithreadProtected(TRUE) on the owning device. D3D11 device contexts are otherwise not free-threaded; without one of these the interop threads race the producer’s immediate context.
  • luid, when Some, must be the LUID of the adapter the texture lives on; importers use it to refuse cross-adapter opens.
  • row_pitch must be the producer’s mapped row pitch in bytes, or 0 when unknown — consumers size staging copies from it.
Source

pub fn with_array_slice(self, slice: u32) -> Self

Pin the producer-side array slice index on a pool-array ID3D11Texture2D. Mirrors the producer’s AVFrame.data[1] (or equivalent) so the importer can copy or view the right slice. No-op on non-array sources (importers check the resource’s own ArraySize first).

Source

pub fn texture(&self) -> *mut c_void

Source

pub fn luid(&self) -> Option<(i32, u32)>

Source

pub fn row_pitch(&self) -> u32

Source

pub fn array_slice(&self) -> u32

Source

pub fn keep_alive(&self) -> Option<&KeepAlive>

Trait Implementations§

Source§

impl Clone for D3D11Texture

Source§

fn clone(&self) -> Self

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 D3D11Texture

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Send for D3D11Texture

Source§

impl Sync for D3D11Texture

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
Source§

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

Source§

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
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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.

Source§

impl<T> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSendSync for T
where T: Send + Sync + ?Sized,

Source§

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

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 = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,