pub struct Shader {
pub workers: Workers,
pub id: u32,
pub is_compute: bool,
pub tex_ids: Vec<Option<u32>>,
pub sbo_ids: Vec<Option<u32>>,
}Expand description
A handle to an OpenGL shader program.
Supports both pipeline (vertex+fragment) and compute shaders. Manages texture and storage-buffer bindings for automatic binding during rendering or compute dispatch.
§Uniform setters
The set_* family of methods sets uniform variables by name. They will
panic if the uniform does not exist (use uniform_location
for optional lookups).
Fields§
§workers: Workers§id: u32§is_compute: bool§tex_ids: Vec<Option<u32>>§sbo_ids: Vec<Option<u32>>Implementations§
Source§impl Shader
impl Shader
Sourcepub fn new(id: u32, is_compute: bool) -> Self
pub fn new(id: u32, is_compute: bool) -> Self
Wraps an existing GL program ID.
is_compute controls whether textures are bound via BindImageTexture
(compute) or glActiveTexture / glBindTexture (render).
Sourcepub fn attach_tex(&mut self, tex: &Texture2D)
pub fn attach_tex(&mut self, tex: &Texture2D)
Attaches a texture to the first available (empty) texture slot.
Sourcepub fn attach_sbo(&mut self, sbo: &StorageBuffer)
pub fn attach_sbo(&mut self, sbo: &StorageBuffer)
Attaches a storage buffer to the first available (empty) SSBO slot.
Sourcepub fn set_tex_at_slot(&mut self, tex: &Texture2D, slot: Slot)
pub fn set_tex_at_slot(&mut self, tex: &Texture2D, slot: Slot)
Binds a texture to a specific slot.
Sourcepub fn set_sbo_at_slot(&mut self, sbo: &StorageBuffer, slot: Slot)
pub fn set_sbo_at_slot(&mut self, sbo: &StorageBuffer, slot: Slot)
Binds a storage buffer to a specific slot.
Sourcepub fn compute(&self)
pub fn compute(&self)
Dispatches compute with the currently bound textures and SSBOs.
Calls glDispatchCompute(workers) followed by a memory barrier for
shader image access and shader storage access.
Sourcepub fn uniform_location(&self, name: &str) -> Option<u32>
pub fn uniform_location(&self, name: &str) -> Option<u32>
Looks up a uniform location by name, returning None if not found.
Sourcepub fn texture_binds(&self) -> Vec<(u32, u32)>
pub fn texture_binds(&self) -> Vec<(u32, u32)>
Returns all (slot, tex_id) pairs for currently bound textures.
Sourcepub fn storage_binds(&self) -> Vec<(u32, u32)>
pub fn storage_binds(&self) -> Vec<(u32, u32)>
Returns all (slot, sbo_id) pairs for currently bound storage buffers.
Sourcepub fn bind_textures(&self)
pub fn bind_textures(&self)
Binds all attached textures (image uniforms for compute, sampler2D for pipeline).
Sourcepub fn bind_storages(&self)
pub fn bind_storages(&self)
Binds all attached storage buffers to their slots.
Sourcepub fn set_vec2_f32(&self, name: &str, v: Vector2<f32>)
pub fn set_vec2_f32(&self, name: &str, v: Vector2<f32>)
Sets a vec2 uniform.
Sourcepub fn set_vec3_f32(&self, name: &str, v: Vector3<f32>)
pub fn set_vec3_f32(&self, name: &str, v: Vector3<f32>)
Sets a vec3 uniform.
Sourcepub fn set_vec4_f32(&self, name: &str, v: Vector4<f32>)
pub fn set_vec4_f32(&self, name: &str, v: Vector4<f32>)
Sets a vec4 uniform.
Sourcepub fn set_vec2_i32(&self, name: &str, v: Vector2<i32>)
pub fn set_vec2_i32(&self, name: &str, v: Vector2<i32>)
Sets an ivec2 uniform.
Sourcepub fn set_vec3_i32(&self, name: &str, v: Vector3<i32>)
pub fn set_vec3_i32(&self, name: &str, v: Vector3<i32>)
Sets an ivec3 uniform.
Sourcepub fn set_vec4_i32(&self, name: &str, v: Vector4<i32>)
pub fn set_vec4_i32(&self, name: &str, v: Vector4<i32>)
Sets an ivec4 uniform.
Sourcepub fn set_vec2_u32(&self, name: &str, v: Vector2<u32>)
pub fn set_vec2_u32(&self, name: &str, v: Vector2<u32>)
Sets a uvec2 uniform.
Sourcepub fn set_vec3_u32(&self, name: &str, v: Vector3<u32>)
pub fn set_vec3_u32(&self, name: &str, v: Vector3<u32>)
Sets a uvec3 uniform.
Sourcepub fn set_vec4_u32(&self, name: &str, v: Vector4<u32>)
pub fn set_vec4_u32(&self, name: &str, v: Vector4<u32>)
Sets a uvec4 uniform.
Sourcepub fn set_m2_f32(&self, name: &str, m: Matrix2<f32>)
pub fn set_m2_f32(&self, name: &str, m: Matrix2<f32>)
Sets a mat2 uniform.
Sourcepub fn set_m3_f32(&self, name: &str, m: Matrix3<f32>)
pub fn set_m3_f32(&self, name: &str, m: Matrix3<f32>)
Sets a mat3 uniform.
Sourcepub fn set_m4_f32(&self, name: &str, m: Matrix4<f32>)
pub fn set_m4_f32(&self, name: &str, m: Matrix4<f32>)
Sets a mat4 uniform.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Shader
impl RefUnwindSafe for Shader
impl Send for Shader
impl Sync for Shader
impl Unpin for Shader
impl UnsafeUnpin for Shader
impl UnwindSafe for Shader
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<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more