From de74c71eb6d6a67e8c7ac006a1e906175ca32a72 Mon Sep 17 00:00:00 2001 From: HampusM Date: Wed, 25 Mar 2026 20:09:13 +0100 Subject: refactor(engine): store textures as assets instead of images --- engine/src/texture.rs | 90 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 67 insertions(+), 23 deletions(-) (limited to 'engine/src/texture.rs') diff --git a/engine/src/texture.rs b/engine/src/texture.rs index d02b9ff..b92bc2e 100644 --- a/engine/src/texture.rs +++ b/engine/src/texture.rs @@ -1,34 +1,24 @@ -use crate::asset::Handle as AssetHandle; -use crate::image::Image; +use std::path::Path; +use std::sync::LazyLock; + +use crate::asset::{Assets, Label as AssetLabel, Submitter as AssetSubmitter}; use crate::builder; +use crate::color::Color; +use crate::data_types::dimens::Dimens; +use crate::image::{Error as ImageError, Image}; + +pub static WHITE_1X1_ASSET_LABEL: LazyLock = LazyLock::new(|| AssetLabel { + path: Path::new("").into(), + name: Some("white_1x1_texture".into()), +}); #[derive(Debug, Clone)] -#[non_exhaustive] pub struct Texture { - pub asset_handle: AssetHandle, + pub image: Image, pub properties: Properties, } -impl Texture -{ - pub fn new(asset_handle: AssetHandle) -> Self - { - Self { - asset_handle, - properties: Properties::default(), - } - } - - pub fn with_properties( - asset_handle: AssetHandle, - properties: Properties, - ) -> Self - { - Self { asset_handle, properties } - } -} - builder! { /// Texture properties #[builder(name = PropertiesBuilder, derives=(Debug, Clone))] @@ -88,3 +78,57 @@ pub enum Wrapping ClampToEdge, ClampToBorder, } + +builder! { +#[builder(name = ImportSettingsBuilder, derives=(Debug, Clone))] +#[derive(Debug, Default, Clone)] +#[non_exhaustive] +pub struct ImportSettings { + properties: Properties, +} +} + +impl ImportSettings +{ + pub fn builder() -> ImportSettingsBuilder + { + ImportSettingsBuilder::default() + } +} + +impl Default for ImportSettingsBuilder +{ + fn default() -> Self + { + ImportSettings::default().into() + } +} + +pub(crate) fn initialize(assets: &mut Assets) +{ + assets.set_importer::<_, _>(["png", "jpg"], import); + + assets.store_with_label( + WHITE_1X1_ASSET_LABEL.clone(), + Texture { + image: Image::from_color(Dimens { width: 1, height: 1 }, Color::WHITE_U8), + properties: Properties::default(), + }, + ); +} + +fn import( + asset_submitter: &mut AssetSubmitter<'_>, + path: &Path, + settings: Option<&'_ ImportSettings>, +) -> Result<(), ImageError> +{ + asset_submitter.submit_store(Texture { + image: Image::open(path)?, + properties: settings + .map(|settings| settings.properties.clone()) + .unwrap_or_default(), + }); + + Ok(()) +} -- cgit v1.2.3-18-g5258