amethyst / amethyst/rfcs

Loader/Asset API Ergonomics

Abierto
#15 9 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Sin datos de lenguaje
Estrellas
32
Forks
10
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

The current loader API is (subjectively) a little heavy.

For example, to load a GLTF file:
```rust
let loader = world.read_resource();
let progress = ();
let format = GltfSceneFormat;
let options = Default::default();
let storage = &world.read_resource();

let asset = loader.load("path/to/gltf.gltf", GltfSceneFormat, options, progress, storage);
```

And to load a GLTF file from a custom source:
```rust
let loader = world.read_resource();
let progress = ();
let format = GltfSceneFormat;
let options = Default::default();
let source = /*...*/;
let storage = &world.read_resource();

let asset = loader.load_from("path/to/gltf.gltf", GltfSceneFormat, options, source, progress, storage);
```

I think this API could be made slightly cleaner by doing (any subset of) a few things:
- Dynamically dispatch on the resource URL to determine the source and format (maybe integrating with the `vnodes` system)
- Put the storages within the Loader / give the Loader some way to get handles to the storages, so that the user doesn't have to
- Use the builder pattern

Then, a simple asset load can look like just:
```rust
let asset = loader.asset("/io/assets/path/to/texture.png").load();
```

And a complex load can look like:
```rust
let asset = loader
.asset("/io/assets/special_source/path_to_scene.gltf")
.progress(progress_counter)
.options(GltfSceneOptions { /* ... */ })
.custom_storage(custom_storage) // not sure if this would be needed
.load();
```

Since loading assets is something that you do a lot, I think it's worth it to make the API nice to use.

Downsides:
- Makes things slightly more prone to runtime errors (can have file-type mismatches)
- Gives Loader more responsibilities

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.