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 and texture-source id
spaces stay reserved against every such mint by construction (see
Self::for_shader_program and Self::for_texture_source).
§Panics
After 2^62 - 1 mints, rather than handing out an id inside a reserved namespace — a count no process reaches.
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 and from
Self::for_texture_source’s by construction — see
[SHADER_PROGRAM_NAMESPACE] — so a host texture, a texture source and
a shader target can never answer to the same id. A program_id large
enough to reach a reserved bit itself is impossible for the same
counting reason its minter is.
Sourcepub const fn for_texture_source(source: u64) -> Self
pub const fn for_texture_source(source: u64) -> Self
The id under which the external-texture frame bus registers its
source-th frame source.
Derived from an ordinal the bus counts itself rather than minted, for
the same reason Self::for_shader_program is: the namespace is the
bus’s own, so an ordinary external pass can be refused an id inside it
and a bus registration can never displace one a caller minted. The
ordinal is masked below both reserved bits before the namespace bit is
set, so the result is never a shader-program id either — disjoint from
Self::mint and Self::for_shader_program by construction (see
[SHADER_PROGRAM_NAMESPACE]).
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.
Sourcepub const fn is_texture_source(self) -> bool
pub const fn is_texture_source(self) -> bool
Whether self names a texture-bus frame source
(Self::for_texture_source) rather than something an ordinary
caller minted or a shader program’s target.
The namespace counterpart of Self::is_shader_program, for the same
reason: a registry that must refuse the bus’s ids to anyone but the bus
tests membership without the reserved bit being exported.
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.