pub struct SceneTextureId(/* private fields */);Expand description
A process-unique id Texture::as_scene_texture mints once per
Texture and shares across Clone — the TextureRegistry key
Command::SceneTexture resolves against.
Mirrors frust_scene::ShaderProgram::id: minted fresh only at
construction (never re-minted on Clone), off a process-wide
AtomicU64 so two distinct textures never collide even when built on
different threads.
Implementations§
Source§impl SceneTextureId
impl SceneTextureId
Sourcepub fn mint() -> Self
pub fn mint() -> Self
Mints a fresh, process-unique id.
Texture::new mints one per texture and shares it across Clone,
and that stays the ordinary route. This is public for the caller that
has no Texture to mint from: a texture rendered externally — one
whose wgpu::TextureView its owner creates, re-creates and binds
itself every frame — still needs one stable id to be named by across
those re-creations, and minting here is what hands it one out of the
same process-wide counter. The shader-program id space stays reserved
against every such mint by construction (see
Self::for_shader_program).
Sourcepub const fn for_shader_program(program_id: u64) -> Self
pub const fn for_shader_program(program_id: u64) -> Self
The id under which the offscreen target of the fragment program
program_id is registered.
Derived from the program’s own ordinal rather than minted, because both
halves of the seam have to name the same texture while holding
different things: the pre-pass that renders the program has the target,
and the display-list walk that draws it has only
frust_scene::ShaderProgram::id. A pure function of the program id
lets each compute the id the other used, with no shared side table to
keep in step.
Disjoint from Self::mint’s range by construction — see
[SHADER_PROGRAM_NAMESPACE] — so a host texture and a shader target
can never answer to the same id. A program_id large enough to reach
the reserved bit itself is impossible for the same counting reason its
minter is.
Sourcepub const fn get(self) -> u64
pub const fn get(self) -> u64
The opaque value this id wraps.
The counterpart of frust_scene::ShaderProgram::id, and for the same
reason: the scene layer carries an externally owned texture as a plain
u64 so it depends on no GPU crate, and a caller that registered a
Texture needs some way to say which one a display-list command
means. This only reads back what Self::mint handed out; it never
mints.
Sourcepub const fn is_shader_program(self) -> bool
pub const fn is_shader_program(self) -> bool
Whether self carries the bit Self::for_shader_program sets —
i.e. whether it names a shader program’s own offscreen target rather
than something an ordinary caller minted.
Lets a caller outside this module test which namespace an id belongs to without the reserved bit itself being exported — a check on the id stays valid even if the bit’s exact value ever changed.
Trait Implementations§
Source§impl Clone for SceneTextureId
impl Clone for SceneTextureId
impl Copy for SceneTextureId
Source§impl Debug for SceneTextureId
impl Debug for SceneTextureId
impl Eq for SceneTextureId
Source§impl Hash for SceneTextureId
impl Hash for SceneTextureId
Source§impl PartialEq for SceneTextureId
impl PartialEq for SceneTextureId
impl StructuralPartialEq for SceneTextureId
Auto Trait Implementations§
impl Freeze for SceneTextureId
impl RefUnwindSafe for SceneTextureId
impl Send for SceneTextureId
impl Sync for SceneTextureId
impl Unpin for SceneTextureId
impl UnsafeUnpin for SceneTextureId
impl UnwindSafe for SceneTextureId
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.