Refactor texture image filtering
- Support only `Linear` or `Nearest` - Simplify `Layer` groups - Move `FilterMethod` to `Image` and `image::Viewer`
This commit is contained in:
parent
75c9afc608
commit
a5125d6fea
12 changed files with 250 additions and 160 deletions
|
|
@ -5,31 +5,11 @@ use std::hash::{Hash, Hasher as _};
|
|||
use std::path::PathBuf;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// Image filter method
|
||||
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub enum FilterMethod {
|
||||
/// Bilinear interpolation
|
||||
#[default]
|
||||
Linear,
|
||||
/// Nearest Neighbor
|
||||
Nearest,
|
||||
}
|
||||
|
||||
/// Texture filter settings
|
||||
#[derive(Default, Debug, Clone, PartialEq, Eq, Hash)]
|
||||
pub struct TextureFilter {
|
||||
/// Filter for scaling the image down.
|
||||
pub min: FilterMethod,
|
||||
/// Filter for scaling the image up.
|
||||
pub mag: FilterMethod,
|
||||
}
|
||||
|
||||
/// A handle of some image data.
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct Handle {
|
||||
id: u64,
|
||||
data: Data,
|
||||
filter: TextureFilter,
|
||||
}
|
||||
|
||||
impl Handle {
|
||||
|
|
@ -76,7 +56,6 @@ impl Handle {
|
|||
Handle {
|
||||
id: hasher.finish(),
|
||||
data,
|
||||
filter: TextureFilter::default(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -89,17 +68,6 @@ impl Handle {
|
|||
pub fn data(&self) -> &Data {
|
||||
&self.data
|
||||
}
|
||||
|
||||
/// Returns a reference to the [`TextureFilter`].
|
||||
pub fn filter(&self) -> &TextureFilter {
|
||||
&self.filter
|
||||
}
|
||||
|
||||
/// Sets the texture filtering methods.
|
||||
pub fn set_filter(mut self, filter: TextureFilter) -> Self {
|
||||
self.filter = filter;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> From<T> for Handle
|
||||
|
|
@ -196,6 +164,16 @@ impl std::fmt::Debug for Data {
|
|||
}
|
||||
}
|
||||
|
||||
/// Image filtering strategy.
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
|
||||
pub enum FilterMethod {
|
||||
/// Bilinear interpolation.
|
||||
#[default]
|
||||
Linear,
|
||||
/// Nearest neighbor.
|
||||
Nearest,
|
||||
}
|
||||
|
||||
/// A [`Renderer`] that can render raster graphics.
|
||||
///
|
||||
/// [renderer]: crate::renderer
|
||||
|
|
@ -210,5 +188,10 @@ pub trait Renderer: crate::Renderer {
|
|||
|
||||
/// Draws an image with the given [`Handle`] and inside the provided
|
||||
/// `bounds`.
|
||||
fn draw(&mut self, handle: Self::Handle, bounds: Rectangle);
|
||||
fn draw(
|
||||
&mut self,
|
||||
handle: Self::Handle,
|
||||
filter_method: FilterMethod,
|
||||
bounds: Rectangle,
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue