Skip to main content

RuntimeShader

Struct RuntimeShader 

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

A custom WGSL shader effect, analogous to Android’s RuntimeShader.

The shader source must be a complete WGSL module that declares:

@group(0) @binding(0) var input_texture: texture_2d<f32>;
@group(0) @binding(1) var input_sampler: sampler;
@group(1) @binding(0) var<uniform> u: array<vec4<f32>, 64>;

Float uniforms are packed linearly into the u array. Access them in WGSL as u[index / 4][index % 4] for individual floats, or u[index / 4].xy for vec2, etc. User uniforms may use indices 0..248; slots 248..256 are reserved for renderer metadata.

RuntimeShader pipelines operate on premultiplied-alpha textures. Custom shaders should preserve premultiplied output semantics.

Implementations§

Source§

impl RuntimeShader

Source

pub const MAX_UNIFORMS: usize = 256

Total uniform storage size in floats (64 vec4s = 256 floats).

The final slots are reserved for renderer-managed data.

Source

pub const RESERVED_UNIFORM_START: usize = 248

First renderer-reserved uniform slot.

Source

pub const MAX_USER_UNIFORMS: usize = Self::RESERVED_UNIFORM_START

Maximum user-addressable uniform count.

Source

pub fn new(wgsl_source: &str) -> RuntimeShader

Create a new RuntimeShader from WGSL source code.

Source

pub fn from_shared_source(source: Arc<str>) -> RuntimeShader

Create a RuntimeShader from shared WGSL source code.

This avoids repeatedly copying large shader modules for animated effects that rebuild only their uniform payload every frame.

Source

pub fn set_input_padding(&mut self, padding: f32)

Declares how far the shader may sample outside its effect rect, in logical pixels. Backdrop rendering uses this to capture enough input around refractive and displacement shaders.

Source

pub fn input_padding(&self) -> f32

Returns the declared input padding in logical pixels.

Source

pub fn set_float(&mut self, index: usize, value: f32)

Set a single float uniform at the given index.

Invalid renderer-reserved ranges are ignored. Use Self::try_set_float when the caller needs to handle invalid uniform writes explicitly.

Source

pub fn try_set_float( &mut self, index: usize, value: f32, ) -> Result<(), RuntimeShaderUniformError>

Set a single float uniform at the given index.

Source

pub fn set_float2(&mut self, index: usize, x: f32, y: f32)

Set a vec2 uniform at the given index (consumes indices [index, index+1]).

Invalid renderer-reserved ranges are ignored. Use Self::try_set_float2 when the caller needs to handle invalid uniform writes explicitly.

Source

pub fn try_set_float2( &mut self, index: usize, x: f32, y: f32, ) -> Result<(), RuntimeShaderUniformError>

Set a vec2 uniform at the given index (consumes indices [index, index+1]).

Source

pub fn set_float4(&mut self, index: usize, x: f32, y: f32, z: f32, w: f32)

Set a vec4 uniform at the given index (consumes indices [index..index+4]).

Invalid renderer-reserved ranges are ignored. Use Self::try_set_float4 when the caller needs to handle invalid uniform writes explicitly.

Source

pub fn try_set_float4( &mut self, index: usize, x: f32, y: f32, z: f32, w: f32, ) -> Result<(), RuntimeShaderUniformError>

Set a vec4 uniform at the given index (consumes indices [index..index+4]).

Source

pub fn source(&self) -> &str

Get the WGSL source code.

Source

pub fn uniforms(&self) -> &[f32]

Get the uniform data as a float slice (for uploading to GPU).

Source

pub fn uniforms_padded(&self) -> [f32; 256]

Get the uniform data padded to full 256-float array (for GPU uniform buffer).

Source

pub fn source_hash(&self) -> u64

Compute a hash of the shader source for pipeline caching.

Trait Implementations§

Source§

impl Clone for RuntimeShader

Source§

fn clone(&self) -> RuntimeShader

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 RuntimeShader

Source§

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

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

impl PartialEq for RuntimeShader

Source§

fn eq(&self, other: &RuntimeShader) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RenderHash for RuntimeShader

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

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.