summaryrefslogtreecommitdiff
path: root/engine/src/texture.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/texture.rs')
-rw-r--r--engine/src/texture.rs90
1 files changed, 67 insertions, 23 deletions
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<AssetLabel> = 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<Image>,
+ pub image: Image,
pub properties: Properties,
}
-impl Texture
-{
- pub fn new(asset_handle: AssetHandle<Image>) -> Self
- {
- Self {
- asset_handle,
- properties: Properties::default(),
- }
- }
-
- pub fn with_properties(
- asset_handle: AssetHandle<Image>,
- 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(())
+}