Async mesh loading works
This commit is contained in:
parent
4e1abea161
commit
35adad6556
@ -346,30 +346,34 @@ fn setup_mesh_resource(
|
|||||||
render_resources.get_asset_resource(handle, INDEX_BUFFER_ASSET_INDEX),
|
render_resources.get_asset_resource(handle, INDEX_BUFFER_ASSET_INDEX),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
let mesh_asset = meshes.get(&handle).unwrap();
|
if let Some(mesh_asset) = meshes.get(&handle) {
|
||||||
let vertex_bytes = mesh_asset
|
let vertex_bytes = mesh_asset
|
||||||
.get_vertex_buffer_bytes(&vertex_buffer_descriptor)
|
.get_vertex_buffer_bytes(&vertex_buffer_descriptor)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
// TODO: use a staging buffer here
|
// TODO: use a staging buffer here
|
||||||
let vertex_buffer = render_resources.create_buffer_with_data(
|
let vertex_buffer = render_resources.create_buffer_with_data(
|
||||||
BufferInfo {
|
BufferInfo {
|
||||||
buffer_usage: BufferUsage::VERTEX,
|
buffer_usage: BufferUsage::VERTEX,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
&vertex_bytes,
|
&vertex_bytes,
|
||||||
);
|
);
|
||||||
let index_bytes = mesh_asset.get_index_buffer_bytes(index_format).unwrap();
|
let index_bytes = mesh_asset.get_index_buffer_bytes(index_format).unwrap();
|
||||||
let index_buffer = render_resources.create_buffer_with_data(
|
let index_buffer = render_resources.create_buffer_with_data(
|
||||||
BufferInfo {
|
BufferInfo {
|
||||||
buffer_usage: BufferUsage::INDEX,
|
buffer_usage: BufferUsage::INDEX,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
&index_bytes,
|
&index_bytes,
|
||||||
);
|
);
|
||||||
|
|
||||||
render_resources.set_asset_resource(handle, vertex_buffer, VERTEX_BUFFER_ASSET_INDEX);
|
render_resources.set_asset_resource(handle, vertex_buffer, VERTEX_BUFFER_ASSET_INDEX);
|
||||||
render_resources.set_asset_resource(handle, index_buffer, INDEX_BUFFER_ASSET_INDEX);
|
render_resources.set_asset_resource(handle, index_buffer, INDEX_BUFFER_ASSET_INDEX);
|
||||||
(vertex_buffer, Some(index_buffer))
|
(vertex_buffer, Some(index_buffer))
|
||||||
|
} else {
|
||||||
|
// mesh doesn't exist. it probably hasn't loaded yet
|
||||||
|
return;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
render_resource_assignments.set_vertex_buffer("Vertex", vertex_buffer, index_buffer);
|
render_resource_assignments.set_vertex_buffer("Vertex", vertex_buffer, index_buffer);
|
||||||
|
@ -11,12 +11,11 @@ fn main() {
|
|||||||
fn setup(
|
fn setup(
|
||||||
command_buffer: &mut CommandBuffer,
|
command_buffer: &mut CommandBuffer,
|
||||||
asset_server: ResMut<AssetServer>,
|
asset_server: ResMut<AssetServer>,
|
||||||
mut meshes: ResMut<Assets<Mesh>>,
|
|
||||||
mut materials: ResMut<Assets<StandardMaterial>>,
|
mut materials: ResMut<Assets<StandardMaterial>>,
|
||||||
) {
|
) {
|
||||||
// load the mesh
|
// load the mesh
|
||||||
let mesh_handle = asset_server
|
let mesh_handle = asset_server
|
||||||
.load_sync(&mut meshes, "assets/models/monkey/Monkey.gltf")
|
.load("assets/models/monkey/Monkey.gltf")
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
// create a material for the mesh
|
// create a material for the mesh
|
||||||
|
Loading…
Reference in New Issue
Block a user