pub struct D3D11Texture { /* private fields */ }Expand description
ID3D11Texture2D* keyed-mutex / shared-handle resource.
Implementations§
Source§impl D3D11Texture
impl D3D11Texture
Sourcepub unsafe fn try_from_raw(
texture: *mut c_void,
luid: Option<(i32, u32)>,
row_pitch: u32,
keep_alive: Option<KeepAlive>,
) -> Result<Self, InvalidHandleError>
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
texturemust point to a liveID3D11Texture2D(or anID3D11ResourcewhoseQueryInterfaceforID3D11Texture2Dsucceeds). 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 asInvalidHandleError::NullPointerand is not a caller obligation.- Refcount: this does not
AddRef, and there is noDropthat wouldRelease. The caller keeps its own reference and must notReleaseit while this value or anyCloneof it is reachable — every clone copies the bare interface pointer, so a prematureReleaseleaves live clones pointing at freed memory. Pass akeep_aliveanchor holding the producer’s reference to discharge this; withNonethe caller carries it. - Cross-thread:
D3D11TextureisSend + Sync, and that is sound only because the caller asserts the producer enabled D3D11’s multithread protection for this resource — eitherD3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX/D3D11_RESOURCE_MISC_SHARED_NTHANDLEon the texture, orID3D11Multithread::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, whenSome, must be theLUIDof the adapter the texture lives on; importers use it to refuse cross-adapter opens.row_pitchmust be the producer’s mapped row pitch in bytes, or0when unknown — consumers size staging copies from it.
Sourcepub fn with_array_slice(self, slice: u32) -> Self
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).
pub fn texture(&self) -> *mut c_void
pub fn luid(&self) -> Option<(i32, u32)>
pub fn row_pitch(&self) -> u32
pub fn array_slice(&self) -> u32
pub fn keep_alive(&self) -> Option<&KeepAlive>
Trait Implementations§
Source§impl Clone for D3D11Texture
impl Clone for D3D11Texture
Source§impl Debug for D3D11Texture
impl Debug for D3D11Texture
impl Send for D3D11Texture
impl Sync for D3D11Texture
Auto Trait Implementations§
impl !RefUnwindSafe for D3D11Texture
impl !UnwindSafe for D3D11Texture
impl Freeze for D3D11Texture
impl Unpin for D3D11Texture
impl UnsafeUnpin for D3D11Texture
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more