pub struct CustomShaderRenderer { /* private fields */ }Expand description
Custom shader renderer that applies post-processing effects
Implementations§
Source§impl CustomShaderRenderer
impl CustomShaderRenderer
Sourcepub fn new(
device: &Device,
queue: &Queue,
surface_format: TextureFormat,
shader_path: &Path,
width: u32,
height: u32,
animation_enabled: bool,
animation_speed: f32,
window_opacity: f32,
text_opacity: f32,
full_content_mode: bool,
channel_paths: &[Option<PathBuf>; 4],
) -> Result<Self>
pub fn new( device: &Device, queue: &Queue, surface_format: TextureFormat, shader_path: &Path, width: u32, height: u32, animation_enabled: bool, animation_speed: f32, window_opacity: f32, text_opacity: f32, full_content_mode: bool, channel_paths: &[Option<PathBuf>; 4], ) -> Result<Self>
Create a new custom shader renderer from a GLSL shader file
§Arguments
device- The wgpu devicequeue- The wgpu queuesurface_format- The surface texture formatshader_path- Path to the GLSL shader filewidth- Initial viewport widthheight- Initial viewport heightanimation_enabled- Whether to animate iTimeanimation_speed- Animation speed multiplierwindow_opacity- Window opacitytext_opacity- Text opacityfull_content_mode- Whether shader receives full terminal contentchannel_paths- Optional paths for iChannel1-4 textures
Sourcepub fn intermediate_texture_view(&self) -> &TextureView
pub fn intermediate_texture_view(&self) -> &TextureView
Get a view of the intermediate texture for rendering terminal content into
Sourcepub fn resize(&mut self, device: &Device, width: u32, height: u32)
pub fn resize(&mut self, device: &Device, width: u32, height: u32)
Resize the intermediate texture when window size changes
Sourcepub fn render(
&mut self,
device: &Device,
queue: &Queue,
output_view: &TextureView,
) -> Result<()>
pub fn render( &mut self, device: &Device, queue: &Queue, output_view: &TextureView, ) -> Result<()>
Render the custom shader effect to the output texture
This should be called after the terminal content has been rendered to the
intermediate texture obtained via intermediate_texture_view().
Sourcepub fn animation_enabled(&self) -> bool
pub fn animation_enabled(&self) -> bool
Check if animation is enabled
Sourcepub fn set_animation_enabled(&mut self, enabled: bool)
pub fn set_animation_enabled(&mut self, enabled: bool)
Set animation enabled state
Sourcepub fn set_animation_speed(&mut self, speed: f32)
pub fn set_animation_speed(&mut self, speed: f32)
Update animation speed multiplier
Sourcepub fn set_opacity(&mut self, opacity: f32)
pub fn set_opacity(&mut self, opacity: f32)
Update window opacity (content alpha passed to shader)
Sourcepub fn set_brightness(&mut self, brightness: f32)
pub fn set_brightness(&mut self, brightness: f32)
Update shader brightness multiplier (dims shader background for readability)
Sourcepub fn set_full_content_mode(&mut self, enabled: bool)
pub fn set_full_content_mode(&mut self, enabled: bool)
Update full content mode
Sourcepub fn full_content_mode(&self) -> bool
pub fn full_content_mode(&self) -> bool
Check if full content mode is enabled
Sourcepub fn set_mouse_position(&mut self, x: f32, y: f32)
pub fn set_mouse_position(&mut self, x: f32, y: f32)
Update mouse position in pixel coordinates
§Arguments
x- Mouse X position in pixels (0 = left edge)y- Mouse Y position in pixels (0 = top edge, will be flipped for shader)
Update mouse button state and click position
Call this when the left mouse button is pressed or released.
§Arguments
pressed- True if mouse button is now pressed, false if releasedx- Mouse X position in pixels at time of click/releasey- Mouse Y position in pixels at time of click/release (will be flipped for shader)
Sourcepub fn update_cursor(
&mut self,
col: usize,
row: usize,
opacity: f32,
cursor_color: [f32; 4],
style: CursorStyle,
)
pub fn update_cursor( &mut self, col: usize, row: usize, opacity: f32, cursor_color: [f32; 4], style: CursorStyle, )
Update cursor position and appearance for shader effects
This method tracks cursor movement and records the time of change, enabling Ghostty-compatible cursor trail effects and animations.
§Arguments
col- Cursor column position (0-based)row- Cursor row position (0-based)opacity- Cursor opacity (0.0 = invisible, 1.0 = fully visible)cursor_color- Cursor RGBA colorstyle- Cursor style (Block, Beam, Underline)
Sourcepub fn update_cell_dimensions(
&mut self,
cell_width: f32,
cell_height: f32,
padding: f32,
)
pub fn update_cell_dimensions( &mut self, cell_width: f32, cell_height: f32, padding: f32, )
Update cell dimensions for cursor pixel position calculation
§Arguments
cell_width- Cell width in pixelscell_height- Cell height in pixelspadding- Window padding in pixels
Sourcepub fn cursor_needs_animation(&self) -> bool
pub fn cursor_needs_animation(&self) -> bool
Check if cursor animation might need continuous rendering
Returns true if a cursor trail animation is likely still in progress (within 1 second of the last cursor movement).
Sourcepub fn update_channel_texture(
&mut self,
device: &Device,
queue: &Queue,
channel: u8,
path: Option<&Path>,
) -> Result<()>
pub fn update_channel_texture( &mut self, device: &Device, queue: &Queue, channel: u8, path: Option<&Path>, ) -> Result<()>
Sourcepub fn update_cursor_shader_config(
&mut self,
color: [u8; 3],
trail_duration: f32,
glow_radius: f32,
glow_intensity: f32,
)
pub fn update_cursor_shader_config( &mut self, color: [u8; 3], trail_duration: f32, glow_radius: f32, glow_intensity: f32, )
Update cursor shader configuration from config values
§Arguments
color- Cursor color for shader effects [R, G, B] (0-255)trail_duration- Duration of cursor trail effect in secondsglow_radius- Radius of cursor glow effect in pixelsglow_intensity- Intensity of cursor glow effect (0.0-1.0)
Sourcepub fn reload_from_source(
&mut self,
device: &Device,
source: &str,
name: &str,
) -> Result<()>
pub fn reload_from_source( &mut self, device: &Device, source: &str, name: &str, ) -> Result<()>
Reload the shader from a source string
This method compiles the new shader source and replaces the current pipeline. If compilation fails, returns an error and the old shader remains active.
§Arguments
device- The wgpu devicesource- The GLSL shader source codename- A name for error messages (e.g., “editor”)
§Returns
Ok(()) if successful, Err with error message if compilation fails
Auto Trait Implementations§
impl Freeze for CustomShaderRenderer
impl !RefUnwindSafe for CustomShaderRenderer
impl Send for CustomShaderRenderer
impl Sync for CustomShaderRenderer
impl Unpin for CustomShaderRenderer
impl !UnwindSafe for CustomShaderRenderer
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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