//! # Direct3D 11 //! //! Consider [ID3D11DeviceContext](https://learn.microsoft.com/en-us/windows/win32/api/d3d11/nn-d3d11-id3d11devicecontext)::[PSSetShaderResources](https://learn.microsoft.com/en-us/windows/win32/api/d3d11/nf-d3d11-id3d11devicecontext-pssetshaderresources). //! Like many Direct3D11 APIs, it takes an array of pointers to COM interfaces, but does not consume your co-ownership of them. //! //! The [`windows` equivalent](https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Graphics/Direct3D11/struct.ID3D11DeviceContext.html#method.PSSetShaderResources), //! however, forces you to create an [`array`]/[`slice`]/[`Vec`] of *owning* pointers — presumably filled with temporary [`Clone`]s, forcing you to increment their refcounts, //! which are then [`Drop`]ped shortly after when your array is no longer necessary. //! This is a bunch of pointless refcounting churn! //! //! An alternative would be for [`ID3D11ShaderResourceView`](https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Graphics/Direct3D11/struct.ID3D11ShaderResourceView.html) //! to implement [valrow]::[Borrowable] and //! [PSSetShaderResources](https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Graphics/Direct3D11/struct.ID3D11DeviceContext.html#method.PSSetShaderResources) //! changed to accept &‍\[[Option]<[Valrow]<[ID3D11ShaderResourceView](https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Graphics/Direct3D11/struct.ID3D11ShaderResourceView.html)>>] instead. use crate::{self as valrow, *}; use alloc::vec::Vec;