Define data types for ID-based resource handling (#4168)

* Add resource lib

* rename ResourceSource to ResourceInput

* Rename ResourceInput -> DataSource and improve API

* Review

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
This commit is contained in:
Timon
2026-05-25 10:50:57 +00:00
committed by GitHub
parent d0d9a350c7
commit bbbe04903f
28 changed files with 187 additions and 46 deletions

View File

@@ -4,18 +4,13 @@ use wgpu_executor::WgpuExecutor;
pub mod resource;
pub use graphene_application_io::{ApplicationIo, LoadResource, Resource, ResourceFuture, ResourceHash, ResourceStorage};
pub use resource::HashMapResourceStorage;
#[cfg(not(target_family = "wasm"))]
pub use resource::mmap::MmapResourceStorage;
#[cfg(target_family = "wasm")]
pub use resource::opfs::OpfsResourceStorage;
pub use graphene_application_io::ApplicationIo;
#[derive(Default)]
pub struct PlatformApplicationIo {
#[cfg(feature = "wgpu")]
pub(crate) gpu_executor: Option<WgpuExecutor>,
resources: Option<Box<dyn LoadResource>>,
resources: Option<Box<dyn resource::LoadResource>>,
}
impl PlatformApplicationIo {
@@ -49,7 +44,7 @@ impl PlatformApplicationIo {
}
}
pub fn inject_resource_proxy(&mut self, resources: Box<dyn LoadResource>) {
pub fn inject_resource_proxy(&mut self, resources: Box<dyn resource::LoadResource>) {
self.resources = Some(resources);
}
}
@@ -65,7 +60,7 @@ impl ApplicationIo for PlatformApplicationIo {
self.gpu_executor.as_ref()
}
fn load_resource(&self, hash: ResourceHash) -> graphene_application_io::ResourceFuture {
fn load_resource(&self, hash: resource::ResourceHash) -> resource::ResourceFuture {
self.resources.as_ref().expect("Resource storage not initialized").load(hash)
}
}

View File

@@ -1,12 +1,16 @@
#[cfg(not(target_family = "wasm"))]
pub mod mmap;
#[cfg(target_family = "wasm")]
pub mod opfs;
use graphene_application_io::{LoadResource, Resource, ResourceFuture, ResourceHash, ResourceStorage};
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
pub use graphene_application_io::resource::{LoadResource, Resource, ResourceFuture, ResourceHash, ResourceStorage};
#[cfg(not(target_family = "wasm"))]
pub mod mmap;
#[cfg(not(target_family = "wasm"))]
pub use mmap::MmapResourceStorage;
#[cfg(target_family = "wasm")]
pub mod opfs;
#[cfg(target_family = "wasm")]
pub use opfs::OpfsResourceStorage;
#[derive(Debug, Default)]
pub struct HashMapResourceStorage {
resources: Mutex<HashMap<ResourceHash, Resource>>,

View File

@@ -1,4 +1,4 @@
use graphene_application_io::{LoadResource, Resource, ResourceFuture, ResourceHash, ResourceStorage};
use graphene_application_io::resource::{LoadResource, Resource, ResourceFuture, ResourceHash, ResourceStorage};
use mmap_io::mmap::{MemoryMappedFile, MmapMode};
use std::collections::HashMap;
use std::fs;

View File

@@ -1,4 +1,4 @@
use graphene_application_io::{LoadResource, Resource, ResourceFuture, ResourceHash, ResourceStorage};
use graphene_application_io::resource::{LoadResource, Resource, ResourceFuture, ResourceHash, ResourceStorage};
use js_sys::Uint8Array;
use std::collections::{HashMap, HashSet, VecDeque};
use std::pin::Pin;

View File

@@ -396,7 +396,7 @@ tagged_value! {
Footprint(Footprint),
VectorModification(Box<VectorModification>),
ImageData(Image<Color>),
Resource(graphene_application_io::ResourceHash),
Resource(graphene_application_io::resource::ResourceHash),
// ==========
// ENUM TYPES
// ==========