aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/shader_element.rs
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-05-03 21:21:58 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-03 21:23:32 +0400
commit8ab50f9d1ca5795f4eef84ad423dc0d63d990b98 (patch)
tree547387d5d17f565791abf9ec3b5bd863a1257162 /src/render_helpers/shader_element.rs
parent5c32031111223cdfb7ad5e9c2766204445ac6492 (diff)
downloadniri-8ab50f9d1ca5795f4eef84ad423dc0d63d990b98.tar.gz
niri-8ab50f9d1ca5795f4eef84ad423dc0d63d990b98.tar.bz2
niri-8ab50f9d1ca5795f4eef84ad423dc0d63d990b98.zip
shader_element: Store program type instead of shader
Diffstat (limited to 'src/render_helpers/shader_element.rs')
-rw-r--r--src/render_helpers/shader_element.rs36
1 files changed, 14 insertions, 22 deletions
diff --git a/src/render_helpers/shader_element.rs b/src/render_helpers/shader_element.rs
index 75ed2780..4b4af625 100644
--- a/src/render_helpers/shader_element.rs
+++ b/src/render_helpers/shader_element.rs
@@ -14,12 +14,13 @@ use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Size};
use super::renderer::AsGlesFrame;
use super::resources::Resources;
+use super::shaders::{ProgramType, Shaders};
use crate::backend::tty::{TtyFrame, TtyRenderer, TtyRendererError};
/// Renders a shader with optional texture input, on the primary GPU.
#[derive(Debug, Clone)]
pub struct ShaderRenderElement {
- shader: Option<ShaderProgram>,
+ program: ProgramType,
id: Id,
commit_counter: CommitCounter,
area: Rectangle<i32, Logical>,
@@ -197,7 +198,7 @@ impl ShaderProgram {
impl ShaderRenderElement {
#[allow(clippy::too_many_arguments)]
pub fn new(
- shader: Option<ShaderProgram>,
+ program: ProgramType,
area: Rectangle<i32, Logical>,
size: Size<f64, Buffer>,
opaque_regions: Option<Vec<Rectangle<i32, Logical>>>,
@@ -207,7 +208,7 @@ impl ShaderRenderElement {
kind: Kind,
) -> Self {
Self {
- shader,
+ program,
id: Id::new(),
commit_counter: CommitCounter::default(),
area,
@@ -220,9 +221,9 @@ impl ShaderRenderElement {
}
}
- pub fn empty(kind: Kind) -> Self {
+ pub fn empty(program: ProgramType, kind: Kind) -> Self {
Self {
- shader: None,
+ program,
id: Id::new(),
commit_counter: CommitCounter::default(),
area: Rectangle::default(),
@@ -235,12 +236,7 @@ impl ShaderRenderElement {
}
}
- pub fn update_shader(&mut self, shader: Option<&ShaderProgram>) {
- if self.shader.as_ref() == shader {
- return;
- }
-
- self.shader = shader.cloned();
+ pub fn damage_all(&mut self) {
self.commit_counter.increment();
}
@@ -260,10 +256,6 @@ impl ShaderRenderElement {
self.commit_counter.increment();
}
-
- pub fn has_shader(&self) -> bool {
- self.shader.is_some()
- }
}
impl Element for ShaderRenderElement {
@@ -309,7 +301,7 @@ impl RenderElement<GlesRenderer> for ShaderRenderElement {
) -> Result<(), GlesError> {
let frame = frame.as_gles_frame();
- let Some(shader) = &self.shader else {
+ let Some(shader) = Shaders::get_from_frame(frame).program(self.program) else {
return Ok(());
};
@@ -389,14 +381,14 @@ impl RenderElement<GlesRenderer> for ShaderRenderElement {
let has_debug = !frame.debug_flags().is_empty();
let has_tint = frame.debug_flags().contains(DebugFlags::TINT);
- let program = if has_debug {
- &shader.0.debug
- } else {
- &shader.0.normal
- };
-
// render
frame.with_context(move |gl| -> Result<(), GlesError> {
+ let program = if has_debug {
+ &shader.0.debug
+ } else {
+ &shader.0.normal
+ };
+
unsafe {
for (i, texture) in self.textures.values().enumerate() {
gl.ActiveTexture(ffi::TEXTURE0 + i as u32);