Use system fns for all setup code
This commit is contained in:
parent
70f122b92a
commit
06f3a4efb9
@ -71,7 +71,7 @@ impl<'a> WorldBuilder<'a> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_children(&mut self, build_children: impl Fn(&mut Self)) -> &mut Self {
|
pub fn add_children(&mut self, build_children: impl Fn(&mut Self) -> &mut Self) -> &mut Self {
|
||||||
self.parent_entity = self.current_entity;
|
self.parent_entity = self.current_entity;
|
||||||
self.current_entity = None;
|
self.current_entity = None;
|
||||||
|
|
||||||
|
@ -27,15 +27,13 @@ impl ForwardPbrRenderGraphBuilder for RenderGraph {
|
|||||||
fn add_pbr_graph(&mut self, resources: &Resources) -> &mut Self {
|
fn add_pbr_graph(&mut self, resources: &Resources) -> &mut Self {
|
||||||
self.add_system_node_named(
|
self.add_system_node_named(
|
||||||
node::LOCAL_TO_WORLD,
|
node::LOCAL_TO_WORLD,
|
||||||
UniformNode::<LocalToWorld>::new(true),
|
UniformNode::<LocalToWorld>::new(true)
|
||||||
resources,
|
|
||||||
);
|
);
|
||||||
self.add_system_node_named(
|
self.add_system_node_named(
|
||||||
node::STANDARD_MATERIAL,
|
node::STANDARD_MATERIAL,
|
||||||
AssetUniformNode::<StandardMaterial>::new(true),
|
AssetUniformNode::<StandardMaterial>::new(true)
|
||||||
resources,
|
|
||||||
);
|
);
|
||||||
self.add_system_node_named(node::LIGHTS, LightsNode::new(10), resources);
|
self.add_system_node_named(node::LIGHTS, LightsNode::new(10));
|
||||||
let mut shaders = resources.get_mut::<Assets<Shader>>().unwrap();
|
let mut shaders = resources.get_mut::<Assets<Shader>>().unwrap();
|
||||||
let mut pipelines = resources
|
let mut pipelines = resources
|
||||||
.get_mut::<Assets<PipelineDescriptor>>()
|
.get_mut::<Assets<PipelineDescriptor>>()
|
||||||
|
@ -21,7 +21,7 @@ impl AppPlugin for PbrPlugin {
|
|||||||
fn build(&self, app: &mut AppBuilder) {
|
fn build(&self, app: &mut AppBuilder) {
|
||||||
app.add_asset::<StandardMaterial>().add_system_to_stage(
|
app.add_asset::<StandardMaterial>().add_system_to_stage(
|
||||||
stage::POST_UPDATE,
|
stage::POST_UPDATE,
|
||||||
shader::asset_handle_shader_def_system::<StandardMaterial>.system(),
|
shader::asset_shader_def_system::<StandardMaterial>.system(),
|
||||||
);
|
);
|
||||||
let resources = app.resources();
|
let resources = app.resources();
|
||||||
let mut render_graph = resources.get_mut::<RenderGraph>().unwrap();
|
let mut render_graph = resources.get_mut::<RenderGraph>().unwrap();
|
||||||
|
@ -46,7 +46,7 @@ pub struct LightCount {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl SystemNode for LightsNode {
|
impl SystemNode for LightsNode {
|
||||||
fn get_system(&self, _resources: &Resources) -> Box<dyn Schedulable> {
|
fn get_system(&self) -> Box<dyn Schedulable> {
|
||||||
let mut light_buffer = None;
|
let mut light_buffer = None;
|
||||||
let mut lights_are_dirty = true;
|
let mut lights_are_dirty = true;
|
||||||
// TODO: merge these
|
// TODO: merge these
|
||||||
|
@ -61,11 +61,11 @@ impl BaseRenderGraphBuilder for RenderGraph {
|
|||||||
config: &BaseRenderGraphConfig,
|
config: &BaseRenderGraphConfig,
|
||||||
) -> &mut Self {
|
) -> &mut Self {
|
||||||
if config.add_3d_camera {
|
if config.add_3d_camera {
|
||||||
self.add_system_node_named(node::CAMERA, CameraNode::default(), resources);
|
self.add_system_node_named(node::CAMERA, CameraNode::default());
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.add_2d_camera {
|
if config.add_2d_camera {
|
||||||
self.add_system_node_named(node::CAMERA2D, Camera2dNode::default(), resources);
|
self.add_system_node_named(node::CAMERA2D, Camera2dNode::default());
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.add_main_depth_texture {
|
if config.add_main_depth_texture {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use super::{Edge, Node, NodeId, NodeLabel, NodeState, RenderGraphError, SlotLabel, SystemNode};
|
use super::{Edge, Node, NodeId, NodeLabel, NodeState, RenderGraphError, SlotLabel, SystemNode};
|
||||||
use legion::prelude::{Executor, Resources, Schedulable};
|
use legion::prelude::{Executor, Schedulable};
|
||||||
use std::{borrow::Cow, collections::HashMap, fmt::Debug};
|
use std::{borrow::Cow, collections::HashMap, fmt::Debug};
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
@ -33,11 +33,11 @@ impl RenderGraph {
|
|||||||
id
|
id
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_system_node<T>(&mut self, node: T, resources: &mut Resources) -> NodeId
|
pub fn add_system_node<T>(&mut self, node: T) -> NodeId
|
||||||
where
|
where
|
||||||
T: SystemNode + 'static,
|
T: SystemNode + 'static,
|
||||||
{
|
{
|
||||||
self.new_node_systems.push(node.get_system(resources));
|
self.new_node_systems.push(node.get_system());
|
||||||
self.add_node(node)
|
self.add_node(node)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,12 +45,11 @@ impl RenderGraph {
|
|||||||
&mut self,
|
&mut self,
|
||||||
name: impl Into<Cow<'static, str>>,
|
name: impl Into<Cow<'static, str>>,
|
||||||
node: T,
|
node: T,
|
||||||
resources: &Resources,
|
|
||||||
) -> NodeId
|
) -> NodeId
|
||||||
where
|
where
|
||||||
T: SystemNode + 'static,
|
T: SystemNode + 'static,
|
||||||
{
|
{
|
||||||
self.new_node_systems.push(node.get_system(resources));
|
self.new_node_systems.push(node.get_system());
|
||||||
self.add_node_named(name, node)
|
self.add_node_named(name, node)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ pub trait Node: Downcast + Send + Sync + 'static {
|
|||||||
impl_downcast!(Node);
|
impl_downcast!(Node);
|
||||||
|
|
||||||
pub trait SystemNode: Node {
|
pub trait SystemNode: Node {
|
||||||
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable>;
|
fn get_system(&self) -> Box<dyn Schedulable>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Edges {
|
pub struct Edges {
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
use bevy_app::{Events, GetEventReader};
|
use bevy_app::Events;
|
||||||
use bevy_window::WindowResized;
|
use bevy_window::WindowResized;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
camera::{ActiveCamera2d, Camera},
|
camera::{ActiveCamera2d, Camera},
|
||||||
render_graph::{CommandQueue, Node, ResourceSlots, SystemNode},
|
render_graph::{CommandQueue, Node, ResourceSlots, SystemNode},
|
||||||
render_resource::{resource_name, BufferInfo, BufferUsage, RenderResourceAssignments, RenderResourceAssignment},
|
render_resource::{
|
||||||
|
resource_name, BufferInfo, BufferUsage, RenderResourceAssignment, RenderResourceAssignments,
|
||||||
|
},
|
||||||
renderer::{RenderContext, RenderResources},
|
renderer::{RenderContext, RenderResources},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -30,9 +32,9 @@ impl Node for Camera2dNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl SystemNode for Camera2dNode {
|
impl SystemNode for Camera2dNode {
|
||||||
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable> {
|
fn get_system(&self) -> Box<dyn Schedulable> {
|
||||||
let mut camera_buffer = None;
|
let mut camera_buffer = None;
|
||||||
let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>();
|
let mut window_resized_event_reader = None;
|
||||||
let mut command_queue = self.command_queue.clone();
|
let mut command_queue = self.command_queue.clone();
|
||||||
|
|
||||||
SystemBuilder::new("camera_2d_resource_provider")
|
SystemBuilder::new("camera_2d_resource_provider")
|
||||||
@ -69,7 +71,12 @@ impl SystemNode for Camera2dNode {
|
|||||||
camera_buffer = Some(buffer);
|
camera_buffer = Some(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if window_resized_event_reader.is_none() {
|
||||||
|
window_resized_event_reader = Some(window_resized_events.get_reader());
|
||||||
|
}
|
||||||
let primary_window_resized_event = window_resized_event_reader
|
let primary_window_resized_event = window_resized_event_reader
|
||||||
|
.as_mut()
|
||||||
|
.unwrap()
|
||||||
.find_latest(&window_resized_events, |event| event.is_primary);
|
.find_latest(&window_resized_events, |event| event.is_primary);
|
||||||
if let Some(_) = primary_window_resized_event {
|
if let Some(_) = primary_window_resized_event {
|
||||||
let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>();
|
let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>();
|
||||||
|
@ -7,7 +7,7 @@ use crate::{
|
|||||||
ActiveCamera, Camera,
|
ActiveCamera, Camera,
|
||||||
};
|
};
|
||||||
|
|
||||||
use bevy_app::{Events, GetEventReader};
|
use bevy_app::Events;
|
||||||
use bevy_transform::prelude::*;
|
use bevy_transform::prelude::*;
|
||||||
use bevy_window::WindowResized;
|
use bevy_window::WindowResized;
|
||||||
use legion::prelude::*;
|
use legion::prelude::*;
|
||||||
@ -32,9 +32,9 @@ impl Node for CameraNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl SystemNode for CameraNode {
|
impl SystemNode for CameraNode {
|
||||||
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable> {
|
fn get_system(&self) -> Box<dyn Schedulable> {
|
||||||
let mut camera_buffer = None;
|
let mut camera_buffer = None;
|
||||||
let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>();
|
let mut window_resized_event_reader = None;
|
||||||
let mut command_queue = self.command_queue.clone();
|
let mut command_queue = self.command_queue.clone();
|
||||||
|
|
||||||
SystemBuilder::new("camera_resource_provider")
|
SystemBuilder::new("camera_resource_provider")
|
||||||
@ -70,8 +70,12 @@ impl SystemNode for CameraNode {
|
|||||||
);
|
);
|
||||||
camera_buffer = Some(buffer);
|
camera_buffer = Some(buffer);
|
||||||
}
|
}
|
||||||
|
if window_resized_event_reader.is_none() {
|
||||||
|
window_resized_event_reader = Some(window_resized_events.get_reader());
|
||||||
|
}
|
||||||
let primary_window_resized_event = window_resized_event_reader
|
let primary_window_resized_event = window_resized_event_reader
|
||||||
|
.as_mut()
|
||||||
|
.unwrap()
|
||||||
.find_latest(&window_resized_events, |event| event.is_primary);
|
.find_latest(&window_resized_events, |event| event.is_primary);
|
||||||
if let Some(_) = primary_window_resized_event {
|
if let Some(_) = primary_window_resized_event {
|
||||||
let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>();
|
let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>();
|
||||||
|
@ -389,12 +389,10 @@ impl<T> SystemNode for UniformNode<T>
|
|||||||
where
|
where
|
||||||
T: AsUniforms,
|
T: AsUniforms,
|
||||||
{
|
{
|
||||||
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable> {
|
fn get_system(&self) -> Box<dyn Schedulable> {
|
||||||
let mut command_queue = self.command_queue.clone();
|
let mut command_queue = self.command_queue.clone();
|
||||||
let mut uniform_buffer_arrays = UniformBufferArrays::<T>::new();
|
let mut uniform_buffer_arrays = UniformBufferArrays::<T>::new();
|
||||||
let mut vertex_buffer_descriptors = resources.get_mut::<VertexBufferDescriptors>().unwrap();
|
|
||||||
let dynamic_uniforms = self.dynamic_uniforms;
|
let dynamic_uniforms = self.dynamic_uniforms;
|
||||||
initialize_vertex_buffer_descriptor::<T>(&mut vertex_buffer_descriptors);
|
|
||||||
// TODO: maybe run "update" here
|
// TODO: maybe run "update" here
|
||||||
SystemBuilder::new(format!(
|
SystemBuilder::new(format!(
|
||||||
"uniform_resource_provider::<{}>",
|
"uniform_resource_provider::<{}>",
|
||||||
@ -547,12 +545,10 @@ impl<T> SystemNode for AssetUniformNode<T>
|
|||||||
where
|
where
|
||||||
T: AsUniforms,
|
T: AsUniforms,
|
||||||
{
|
{
|
||||||
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable> {
|
fn get_system(&self) -> Box<dyn Schedulable> {
|
||||||
let mut command_queue = self.command_queue.clone();
|
let mut command_queue = self.command_queue.clone();
|
||||||
let mut uniform_buffer_arrays = UniformBufferArrays::<T>::new();
|
let mut uniform_buffer_arrays = UniformBufferArrays::<T>::new();
|
||||||
let mut vertex_buffer_descriptors = resources.get_mut::<VertexBufferDescriptors>().unwrap();
|
|
||||||
let dynamic_uniforms = self.dynamic_uniforms;
|
let dynamic_uniforms = self.dynamic_uniforms;
|
||||||
initialize_vertex_buffer_descriptor::<T>(&mut vertex_buffer_descriptors);
|
|
||||||
// TODO: maybe run "update" here
|
// TODO: maybe run "update" here
|
||||||
SystemBuilder::new("uniform_resource_provider")
|
SystemBuilder::new("uniform_resource_provider")
|
||||||
.read_resource::<Assets<T>>()
|
.read_resource::<Assets<T>>()
|
||||||
@ -674,6 +670,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
fn initialize_vertex_buffer_descriptor<T>(vertex_buffer_descriptors: &mut VertexBufferDescriptors)
|
fn initialize_vertex_buffer_descriptor<T>(vertex_buffer_descriptors: &mut VertexBufferDescriptors)
|
||||||
where
|
where
|
||||||
T: AsUniforms,
|
T: AsUniforms,
|
||||||
|
@ -33,7 +33,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn asset_handle_shader_def_system<T>(
|
pub fn asset_shader_def_system<T>(
|
||||||
assets: Resource<Assets<T>>,
|
assets: Resource<Assets<T>>,
|
||||||
asset_handle: Ref<Handle<T>>,
|
asset_handle: Ref<Handle<T>>,
|
||||||
mut renderable: RefMut<Renderable>,
|
mut renderable: RefMut<Renderable>,
|
||||||
|
@ -22,7 +22,7 @@ use bevy_asset::{AddAsset, Assets, Handle};
|
|||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
mesh::{shape::Quad, Mesh},
|
mesh::{shape::Quad, Mesh},
|
||||||
render_graph::RenderGraph,
|
render_graph::RenderGraph,
|
||||||
shader::asset_handle_shader_def_system,
|
shader::asset_shader_def_system,
|
||||||
};
|
};
|
||||||
use glam::Vec2;
|
use glam::Vec2;
|
||||||
use legion::prelude::IntoSystem;
|
use legion::prelude::IntoSystem;
|
||||||
@ -38,7 +38,7 @@ impl AppPlugin for UiPlugin {
|
|||||||
app.add_asset::<ColorMaterial>()
|
app.add_asset::<ColorMaterial>()
|
||||||
.add_system_to_stage(
|
.add_system_to_stage(
|
||||||
stage::POST_UPDATE,
|
stage::POST_UPDATE,
|
||||||
asset_handle_shader_def_system::<ColorMaterial>.system(),
|
asset_shader_def_system::<ColorMaterial>.system(),
|
||||||
)
|
)
|
||||||
.add_system_to_stage(stage::POST_UPDATE, sprite_system())
|
.add_system_to_stage(stage::POST_UPDATE, sprite_system())
|
||||||
.add_system_to_stage(stage::POST_UPDATE, ui_update_system());
|
.add_system_to_stage(stage::POST_UPDATE, ui_update_system());
|
||||||
|
@ -70,11 +70,10 @@ impl UiRenderGraphBuilder for RenderGraph {
|
|||||||
self.add_system_node_named(
|
self.add_system_node_named(
|
||||||
"color_material",
|
"color_material",
|
||||||
AssetUniformNode::<ColorMaterial>::new(false),
|
AssetUniformNode::<ColorMaterial>::new(false),
|
||||||
resources,
|
|
||||||
);
|
);
|
||||||
self.add_node_edge("color_material", base_render_graph::node::MAIN_PASS)
|
self.add_node_edge("color_material", base_render_graph::node::MAIN_PASS)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
self.add_system_node_named("rect", UniformNode::<Rect>::new(false), resources);
|
self.add_system_node_named("rect", UniformNode::<Rect>::new(false));
|
||||||
self.add_node_edge("rect", base_render_graph::node::MAIN_PASS)
|
self.add_node_edge("rect", base_render_graph::node::MAIN_PASS)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let mut pipelines = resources
|
let mut pipelines = resources
|
||||||
|
@ -3,18 +3,20 @@ use bevy::prelude::*;
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
let mut textures = resources.get_mut::<Assets<Texture>>().unwrap();
|
command_buffer: &mut CommandBuffer,
|
||||||
|
mut textures: ResourceMut<Assets<Texture>>,
|
||||||
|
mut materials: ResourceMut<Assets<ColorMaterial>>,
|
||||||
|
) {
|
||||||
let texture_path = concat!(env!("CARGO_MANIFEST_DIR"), "/assets/branding/icon.png");
|
let texture_path = concat!(env!("CARGO_MANIFEST_DIR"), "/assets/branding/icon.png");
|
||||||
let texture = Texture::load(TextureType::Png(texture_path.to_string()));
|
let texture = Texture::load(TextureType::Png(texture_path.to_string()));
|
||||||
let texture_handle = textures.add(texture);
|
let texture_handle = textures.add(texture);
|
||||||
let mut color_materials = resources.get_mut::<Assets<ColorMaterial>>().unwrap();
|
|
||||||
|
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
.add_entity(Camera2dEntity::default())
|
.add_entity(Camera2dEntity::default())
|
||||||
.add_entity(SpriteEntity {
|
.add_entity(SpriteEntity {
|
||||||
@ -23,7 +25,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
z_index: 0.5,
|
z_index: 0.5,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
material: color_materials.add(texture_handle.into()),
|
material: materials.add(texture_handle.into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3,28 +3,28 @@ use bevy::{gltf, prelude::*};
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
|
command_buffer: &mut CommandBuffer,
|
||||||
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
|
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
||||||
|
) {
|
||||||
// load the mesh
|
// load the mesh
|
||||||
let model_path = concat!(env!("CARGO_MANIFEST_DIR"), "/assets/models/Monkey.gltf");
|
let model_path = concat!(env!("CARGO_MANIFEST_DIR"), "/assets/models/Monkey.gltf");
|
||||||
let mesh = gltf::load_gltf(&model_path).unwrap().unwrap();
|
let mesh = gltf::load_gltf(&model_path).unwrap().unwrap();
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
|
||||||
let mesh_handle = meshes.add(mesh);
|
let mesh_handle = meshes.add(mesh);
|
||||||
|
|
||||||
// create a material for the mesh
|
// create a material for the mesh
|
||||||
let mut materials = resources
|
|
||||||
.get_mut::<Assets<StandardMaterial>>()
|
|
||||||
.unwrap();
|
|
||||||
let material_handle = materials.add(StandardMaterial {
|
let material_handle = materials.add(StandardMaterial {
|
||||||
albedo: Color::rgb(0.5, 0.4, 0.3),
|
albedo: Color::rgb(0.5, 0.4, 0.3),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
// add entities to the world
|
// add entities to the world
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// mesh
|
// mesh
|
||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
|
@ -5,7 +5,7 @@ struct Rotator;
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.add_system(rotator_system.system())
|
.add_system(rotator_system.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
@ -16,19 +16,18 @@ fn rotator_system(time: Resource<Time>, _rotator: RefMut<Rotator>, mut rotation:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// set up a simple scene with a "parent" cube and a "child" cube
|
/// set up a simple scene with a "parent" cube and a "child" cube
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
command_buffer: &mut CommandBuffer,
|
||||||
let mut material_storage = resources
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
.get_mut::<Assets<StandardMaterial>>()
|
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
||||||
.unwrap();
|
) {
|
||||||
|
|
||||||
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
||||||
let cube_material_handle = material_storage.add(StandardMaterial {
|
let cube_material_handle = materials.add(StandardMaterial {
|
||||||
albedo: Color::rgb(0.5, 0.4, 0.3),
|
albedo: Color::rgb(0.5, 0.4, 0.3),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// parent cube
|
// parent cube
|
||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
@ -45,7 +44,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
material: cube_material_handle,
|
material: cube_material_handle,
|
||||||
translation: Translation::new(0.0, 0.0, 3.0),
|
translation: Translation::new(0.0, 0.0, 3.0),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
})
|
||||||
})
|
})
|
||||||
// light
|
// light
|
||||||
.add_entity(LightEntity {
|
.add_entity(LightEntity {
|
||||||
|
@ -3,21 +3,21 @@ use bevy::prelude::*;
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// set up a simple scene
|
/// set up a simple scene
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
|
command_buffer: &mut CommandBuffer,
|
||||||
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
|
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
||||||
|
) {
|
||||||
// create a cube and a plane mesh
|
// create a cube and a plane mesh
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
|
||||||
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
||||||
let plane_handle = meshes.add(Mesh::from(shape::Plane { size: 10.0 }));
|
let plane_handle = meshes.add(Mesh::from(shape::Plane { size: 10.0 }));
|
||||||
|
|
||||||
// create materials for our cube and plane
|
// create materials for our cube and plane
|
||||||
let mut materials = resources
|
|
||||||
.get_mut::<Assets<StandardMaterial>>()
|
|
||||||
.unwrap();
|
|
||||||
let cube_material_handle = materials.add(StandardMaterial {
|
let cube_material_handle = materials.add(StandardMaterial {
|
||||||
albedo: Color::rgb(0.5, 0.4, 0.3),
|
albedo: Color::rgb(0.5, 0.4, 0.3),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -28,7 +28,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// add entities to the world
|
// add entities to the world
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// plane
|
// plane
|
||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
|
@ -9,12 +9,12 @@ fn main() {
|
|||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_plugin(FrameTimeDiagnosticsPlugin::default())
|
.add_plugin(FrameTimeDiagnosticsPlugin::default())
|
||||||
.add_plugin(PrintDiagnosticsPlugin::default())
|
.add_plugin(PrintDiagnosticsPlugin::default())
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.add_system(move_system.system())
|
.add_system(move_cubes.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn move_system(
|
fn move_cubes(
|
||||||
time: Resource<Time>,
|
time: Resource<Time>,
|
||||||
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
||||||
mut translation: RefMut<Translation>,
|
mut translation: RefMut<Translation>,
|
||||||
@ -25,11 +25,11 @@ fn move_system(
|
|||||||
material.albedo += Color::rgb(-time.delta_seconds, -time.delta_seconds, time.delta_seconds);
|
material.albedo += Color::rgb(-time.delta_seconds, -time.delta_seconds, time.delta_seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
command_buffer: &mut CommandBuffer,
|
||||||
let mut materials = resources
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
.get_mut::<Assets<StandardMaterial>>()
|
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
||||||
.unwrap();
|
) {
|
||||||
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
||||||
let plane_handle = meshes.add(Mesh::from(shape::Plane { size: 10.0 }));
|
let plane_handle = meshes.add(Mesh::from(shape::Plane { size: 10.0 }));
|
||||||
let cube_material_handle = materials.add(StandardMaterial {
|
let cube_material_handle = materials.add(StandardMaterial {
|
||||||
@ -41,7 +41,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
let mut builder = world.build();
|
let mut builder = command_buffer.build();
|
||||||
builder
|
builder
|
||||||
// plane
|
// plane
|
||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
|
@ -3,14 +3,18 @@ use bevy::prelude::*;
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// sets up a scene with textured entities
|
/// sets up a scene with textured entities
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
|
command_buffer: &mut CommandBuffer,
|
||||||
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
|
mut textures: ResourceMut<Assets<Texture>>,
|
||||||
|
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
||||||
|
) {
|
||||||
// load a texture
|
// load a texture
|
||||||
let mut textures = resources.get_mut::<Assets<Texture>>().unwrap();
|
|
||||||
let texture_path = concat!(
|
let texture_path = concat!(
|
||||||
env!("CARGO_MANIFEST_DIR"),
|
env!("CARGO_MANIFEST_DIR"),
|
||||||
"/assets/branding/bevy_logo_dark_big.png"
|
"/assets/branding/bevy_logo_dark_big.png"
|
||||||
@ -20,17 +24,11 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
let texture_handle = textures.add(texture);
|
let texture_handle = textures.add(texture);
|
||||||
|
|
||||||
// create a new quad mesh. this is what we will apply the texture to
|
// create a new quad mesh. this is what we will apply the texture to
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
|
||||||
let quad_width = 8.0;
|
let quad_width = 8.0;
|
||||||
let quad_handle = meshes.add(Mesh::from(shape::Quad {
|
let quad_handle = meshes.add(Mesh::from(shape::Quad {
|
||||||
size: Vec2::new(quad_width, quad_width * aspect),
|
size: Vec2::new(quad_width, quad_width * aspect),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// create materials that use our new texture
|
|
||||||
let mut materials = resources
|
|
||||||
.get_mut::<Assets<StandardMaterial>>()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
// this material renders the texture normally
|
// this material renders the texture normally
|
||||||
let material_handle = materials.add(StandardMaterial {
|
let material_handle = materials.add(StandardMaterial {
|
||||||
albedo_texture: Some(texture_handle),
|
albedo_texture: Some(texture_handle),
|
||||||
@ -45,7 +43,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// add entities to the world
|
// add entities to the world
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// textured quad - normal
|
// textured quad - normal
|
||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
|
@ -5,22 +5,22 @@ pub struct ExamplePlugin;
|
|||||||
|
|
||||||
impl AppPlugin for ExamplePlugin {
|
impl AppPlugin for ExamplePlugin {
|
||||||
fn build(&self, app: &mut AppBuilder) {
|
fn build(&self, app: &mut AppBuilder) {
|
||||||
app.add_startup_system(setup);
|
app.add_startup_system(setup.system());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
command_buffer: &mut CommandBuffer,
|
||||||
let mut materials = resources
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
.get_mut::<Assets<StandardMaterial>>()
|
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
||||||
.unwrap();
|
) {
|
||||||
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
||||||
let cube_material_handle = materials.add(StandardMaterial {
|
let cube_material_handle = materials.add(StandardMaterial {
|
||||||
albedo: Color::rgb(0.5, 0.4, 0.3),
|
albedo: Color::rgb(0.5, 0.4, 0.3),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// cube
|
// cube
|
||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
|
@ -7,9 +7,9 @@ fn main() {
|
|||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.init_resource::<State>()
|
.init_resource::<State>()
|
||||||
.add_system(collect_input_system.system())
|
.add_startup_system(setup.system())
|
||||||
.add_system(move_system.system())
|
.add_system(collect_input.system())
|
||||||
.add_startup_system(setup)
|
.add_system(move_on_input.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ struct State {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// adjusts move state based on keyboard input
|
/// adjusts move state based on keyboard input
|
||||||
fn collect_input_system(
|
fn collect_input(
|
||||||
mut state: ResourceMut<State>,
|
mut state: ResourceMut<State>,
|
||||||
keyboard_input_events: Resource<Events<KeyboardInput>>,
|
keyboard_input_events: Resource<Events<KeyboardInput>>,
|
||||||
) {
|
) {
|
||||||
@ -47,7 +47,7 @@ fn collect_input_system(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// moves our cube left when the "left" key is pressed. moves it right when the "right" key is pressed
|
/// moves our cube left when the "left" key is pressed. moves it right when the "right" key is pressed
|
||||||
fn move_system(
|
fn move_on_input(
|
||||||
state: Resource<State>,
|
state: Resource<State>,
|
||||||
time: Resource<Time>,
|
time: Resource<Time>,
|
||||||
mut translation: RefMut<Translation>,
|
mut translation: RefMut<Translation>,
|
||||||
@ -63,18 +63,18 @@ fn move_system(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// creates a simple scene
|
/// creates a simple scene
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
command_buffer: &mut CommandBuffer,
|
||||||
let mut materials = resources
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
.get_mut::<Assets<StandardMaterial>>()
|
mut materials: ResourceMut<Assets<StandardMaterial>>,
|
||||||
.unwrap();
|
) {
|
||||||
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
||||||
let cube_material_handle = materials.add(StandardMaterial {
|
let cube_material_handle = materials.add(StandardMaterial {
|
||||||
albedo: Color::rgb(0.5, 0.4, 0.3),
|
albedo: Color::rgb(0.5, 0.4, 0.3),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// cube
|
// cube
|
||||||
.add_entity(MeshEntity {
|
.add_entity(MeshEntity {
|
||||||
|
@ -4,7 +4,7 @@ fn main() {
|
|||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_asset::<MyMaterial>()
|
.add_asset::<MyMaterial>()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13,14 +13,16 @@ struct MyMaterial {
|
|||||||
pub color: Color,
|
pub color: Color,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
|
command_buffer: &mut CommandBuffer,
|
||||||
|
mut pipelines: ResourceMut<Assets<PipelineDescriptor>>,
|
||||||
|
mut shaders: ResourceMut<Assets<Shader>>,
|
||||||
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
|
mut materials: ResourceMut<Assets<MyMaterial>>,
|
||||||
|
mut render_graph: ResourceMut<RenderGraph>,
|
||||||
|
) {
|
||||||
// create new shader pipeline and add to main pass in Render Graph
|
// create new shader pipeline and add to main pass in Render Graph
|
||||||
let pipeline_handle = {
|
let pipeline_handle = {
|
||||||
let mut pipelines = resources
|
|
||||||
.get_mut::<Assets<PipelineDescriptor>>()
|
|
||||||
.unwrap();
|
|
||||||
let mut shaders = resources.get_mut::<Assets<Shader>>().unwrap();
|
|
||||||
|
|
||||||
let pipeline_handle = pipelines.add(PipelineDescriptor::default_config(ShaderStages {
|
let pipeline_handle = pipelines.add(PipelineDescriptor::default_config(ShaderStages {
|
||||||
vertex: shaders.add(Shader::from_glsl(
|
vertex: shaders.add(Shader::from_glsl(
|
||||||
ShaderStage::Vertex,
|
ShaderStage::Vertex,
|
||||||
@ -52,12 +54,9 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
"#,
|
"#,
|
||||||
))),
|
))),
|
||||||
}));
|
}));
|
||||||
let mut render_graph = resources.get_mut::<RenderGraph>().unwrap();
|
|
||||||
render_graph.add_system_node_named(
|
render_graph
|
||||||
"my_material",
|
.add_system_node_named("my_material", AssetUniformNode::<MyMaterial>::new(true));
|
||||||
AssetUniformNode::<MyMaterial>::new(true),
|
|
||||||
resources,
|
|
||||||
);
|
|
||||||
let main_pass: &mut PassNode = render_graph.get_node_mut("main_pass").unwrap();
|
let main_pass: &mut PassNode = render_graph.get_node_mut("main_pass").unwrap();
|
||||||
main_pass.add_pipeline(
|
main_pass.add_pipeline(
|
||||||
pipeline_handle,
|
pipeline_handle,
|
||||||
@ -67,15 +66,12 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// create materials
|
// create materials
|
||||||
let mut materials = resources.get_mut::<Assets<MyMaterial>>().unwrap();
|
|
||||||
let material = materials.add(MyMaterial {
|
let material = materials.add(MyMaterial {
|
||||||
color: Color::rgb(0.0, 0.8, 0.0),
|
color: Color::rgb(0.0, 0.8, 0.0),
|
||||||
});
|
});
|
||||||
|
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
|
||||||
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
||||||
|
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// cube
|
// cube
|
||||||
.add_entity(MeshMaterialEntity::<MyMaterial> {
|
.add_entity(MeshMaterialEntity::<MyMaterial> {
|
||||||
|
@ -4,10 +4,10 @@ fn main() {
|
|||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_asset::<MyMaterial>()
|
.add_asset::<MyMaterial>()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.add_system_to_stage(
|
.add_system_to_stage(
|
||||||
stage::POST_UPDATE,
|
stage::POST_UPDATE,
|
||||||
shader::asset_handle_shader_def_system::<MyMaterial>.system(),
|
shader::asset_shader_def_system::<MyMaterial>.system(),
|
||||||
)
|
)
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
@ -19,14 +19,16 @@ struct MyMaterial {
|
|||||||
pub always_red: bool,
|
pub always_red: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
|
command_buffer: &mut CommandBuffer,
|
||||||
|
mut pipelines: ResourceMut<Assets<PipelineDescriptor>>,
|
||||||
|
mut shaders: ResourceMut<Assets<Shader>>,
|
||||||
|
mut meshes: ResourceMut<Assets<Mesh>>,
|
||||||
|
mut materials: ResourceMut<Assets<MyMaterial>>,
|
||||||
|
mut render_graph: ResourceMut<RenderGraph>,
|
||||||
|
) {
|
||||||
// create new shader pipeline and add to main pass in Render Graph
|
// create new shader pipeline and add to main pass in Render Graph
|
||||||
let pipeline_handle = {
|
let pipeline_handle = {
|
||||||
let mut pipelines = resources
|
|
||||||
.get_mut::<Assets<PipelineDescriptor>>()
|
|
||||||
.unwrap();
|
|
||||||
let mut shaders = resources.get_mut::<Assets<Shader>>().unwrap();
|
|
||||||
|
|
||||||
let pipeline_handle = pipelines.add(PipelineDescriptor::default_config(ShaderStages {
|
let pipeline_handle = pipelines.add(PipelineDescriptor::default_config(ShaderStages {
|
||||||
vertex: shaders.add(Shader::from_glsl(
|
vertex: shaders.add(Shader::from_glsl(
|
||||||
ShaderStage::Vertex,
|
ShaderStage::Vertex,
|
||||||
@ -62,12 +64,8 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
"#,
|
"#,
|
||||||
))),
|
))),
|
||||||
}));
|
}));
|
||||||
let mut render_graph = resources.get_mut::<RenderGraph>().unwrap();
|
render_graph
|
||||||
render_graph.add_system_node_named(
|
.add_system_node_named("my_material", AssetUniformNode::<MyMaterial>::new(true));
|
||||||
"my_material",
|
|
||||||
AssetUniformNode::<MyMaterial>::new(true),
|
|
||||||
resources,
|
|
||||||
);
|
|
||||||
let main_pass: &mut PassNode = render_graph.get_node_mut("main_pass").unwrap();
|
let main_pass: &mut PassNode = render_graph.get_node_mut("main_pass").unwrap();
|
||||||
main_pass.add_pipeline(
|
main_pass.add_pipeline(
|
||||||
pipeline_handle,
|
pipeline_handle,
|
||||||
@ -77,7 +75,6 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// create materials
|
// create materials
|
||||||
let mut materials = resources.get_mut::<Assets<MyMaterial>>().unwrap();
|
|
||||||
let green_material = materials.add(MyMaterial {
|
let green_material = materials.add(MyMaterial {
|
||||||
color: Color::rgb(0.0, 0.8, 0.0),
|
color: Color::rgb(0.0, 0.8, 0.0),
|
||||||
always_red: false,
|
always_red: false,
|
||||||
@ -88,10 +85,9 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
always_red: true,
|
always_red: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
let mut meshes = resources.get_mut::<Assets<Mesh>>().unwrap();
|
|
||||||
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
let cube_handle = meshes.add(Mesh::from(shape::Cube));
|
||||||
|
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// cube
|
// cube
|
||||||
.add_entity(MeshMaterialEntity::<MyMaterial> {
|
.add_entity(MeshMaterialEntity::<MyMaterial> {
|
||||||
|
@ -4,12 +4,15 @@ use std::{fs::File, io::Read};
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
let mut textures = resources.get_mut::<Assets<Texture>>().unwrap();
|
command_buffer: &mut CommandBuffer,
|
||||||
|
mut textures: ResourceMut<Assets<Texture>>,
|
||||||
|
mut materials: ResourceMut<Assets<ColorMaterial>>,
|
||||||
|
) {
|
||||||
let font_path = concat!(
|
let font_path = concat!(
|
||||||
env!("CARGO_MANIFEST_DIR"),
|
env!("CARGO_MANIFEST_DIR"),
|
||||||
"/assets/fonts/FiraSans-Bold.ttf"
|
"/assets/fonts/FiraSans-Bold.ttf"
|
||||||
@ -23,8 +26,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
let half_width = texture.width as f32 / 2.0;
|
let half_width = texture.width as f32 / 2.0;
|
||||||
let half_height = texture.height as f32 / 2.0;
|
let half_height = texture.height as f32 / 2.0;
|
||||||
let texture_handle = textures.add(texture);
|
let texture_handle = textures.add(texture);
|
||||||
let mut color_materials = resources.get_mut::<Assets<ColorMaterial>>().unwrap();
|
command_buffer
|
||||||
world
|
|
||||||
.build()
|
.build()
|
||||||
// 2d camera
|
// 2d camera
|
||||||
.add_entity(Camera2dEntity::default())
|
.add_entity(Camera2dEntity::default())
|
||||||
@ -35,7 +37,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::CENTER,
|
Anchors::CENTER,
|
||||||
Margins::new(-half_width, half_width, -half_height, half_height),
|
Margins::new(-half_width, half_width, -half_height, half_height),
|
||||||
),
|
),
|
||||||
material: color_materials.add(ColorMaterial::texture(texture_handle)),
|
material: materials.add(ColorMaterial::texture(texture_handle)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,15 @@ use bevy::prelude::*;
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(
|
||||||
|
command_buffer: &mut CommandBuffer,
|
||||||
|
mut textures: ResourceMut<Assets<Texture>>,
|
||||||
|
mut materials: ResourceMut<Assets<ColorMaterial>>,
|
||||||
|
) {
|
||||||
// TODO: "background" 3D temporarily disabled until depth mismatch is fixed
|
// TODO: "background" 3D temporarily disabled until depth mismatch is fixed
|
||||||
// let mut mesh_storage = resources.get_mut::<AssetStorage<Mesh>>().unwrap();
|
// let mut mesh_storage = resources.get_mut::<AssetStorage<Mesh>>().unwrap();
|
||||||
// let mut material_storage = resources
|
// let mut material_storage = resources
|
||||||
@ -19,7 +23,6 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
// ..Default::default()
|
// ..Default::default()
|
||||||
// });
|
// });
|
||||||
|
|
||||||
let mut textures = resources.get_mut::<Assets<Texture>>().unwrap();
|
|
||||||
let texture_path = concat!(
|
let texture_path = concat!(
|
||||||
env!("CARGO_MANIFEST_DIR"),
|
env!("CARGO_MANIFEST_DIR"),
|
||||||
"/assets/branding/bevy_logo_dark_big.png"
|
"/assets/branding/bevy_logo_dark_big.png"
|
||||||
@ -28,10 +31,9 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
let aspect = texture.aspect();
|
let aspect = texture.aspect();
|
||||||
let texture_handle = textures.add(texture);
|
let texture_handle = textures.add(texture);
|
||||||
|
|
||||||
let mut color_materials = resources.get_mut::<Assets<ColorMaterial>>().unwrap();
|
let blue_material_handle = materials.add(Color::rgb(0.6, 0.6, 1.0).into());
|
||||||
let blue_material_handle = color_materials.add(Color::rgb(0.6, 0.6, 1.0).into());
|
|
||||||
|
|
||||||
world
|
command_buffer
|
||||||
.build()
|
.build()
|
||||||
// // cube
|
// // cube
|
||||||
// .add_entity(MeshEntity {
|
// .add_entity(MeshEntity {
|
||||||
@ -63,7 +65,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::LEFT_FULL,
|
Anchors::LEFT_FULL,
|
||||||
Margins::new(10.0, 200.0, 10.0, 10.0),
|
Margins::new(10.0, 200.0, 10.0, 10.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(Color::rgb(0.02, 0.02, 0.02).into()),
|
material: materials.add(Color::rgb(0.02, 0.02, 0.02).into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// right vertical fill
|
// right vertical fill
|
||||||
@ -73,7 +75,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::RIGHT_FULL,
|
Anchors::RIGHT_FULL,
|
||||||
Margins::new(10.0, 100.0, 100.0, 100.0),
|
Margins::new(10.0, 100.0, 100.0, 100.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(Color::rgb(0.02, 0.02, 0.02).into()),
|
material: materials.add(Color::rgb(0.02, 0.02, 0.02).into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// render order test: reddest in the back, whitest in the front
|
// render order test: reddest in the back, whitest in the front
|
||||||
@ -83,7 +85,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::CENTER,
|
Anchors::CENTER,
|
||||||
Margins::new(0.0, 100.0, 0.0, 100.0),
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(Color::rgb(1.0, 0.0, 0.0).into()),
|
material: materials.add(Color::rgb(1.0, 0.0, 0.0).into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.add_entity(UiEntity {
|
.add_entity(UiEntity {
|
||||||
@ -92,7 +94,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::CENTER,
|
Anchors::CENTER,
|
||||||
Margins::new(0.0, 100.0, 0.0, 100.0),
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(Color::rgb(1.0, 0.3, 0.3).into()),
|
material: materials.add(Color::rgb(1.0, 0.3, 0.3).into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.add_entity(UiEntity {
|
.add_entity(UiEntity {
|
||||||
@ -101,7 +103,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::CENTER,
|
Anchors::CENTER,
|
||||||
Margins::new(0.0, 100.0, 0.0, 100.0),
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(Color::rgb(1.0, 0.5, 0.5).into()),
|
material: materials.add(Color::rgb(1.0, 0.5, 0.5).into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.add_entity(UiEntity {
|
.add_entity(UiEntity {
|
||||||
@ -110,7 +112,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::CENTER,
|
Anchors::CENTER,
|
||||||
Margins::new(0.0, 100.0, 0.0, 100.0),
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(Color::rgb(1.0, 0.7, 0.7).into()),
|
material: materials.add(Color::rgb(1.0, 0.7, 0.7).into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// parenting
|
// parenting
|
||||||
@ -120,7 +122,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::BOTTOM_LEFT,
|
Anchors::BOTTOM_LEFT,
|
||||||
Margins::new(0.0, 200.0, 10.0, 210.0),
|
Margins::new(0.0, 200.0, 10.0, 210.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(Color::rgb(0.1, 0.1, 1.0).into()),
|
material: materials.add(Color::rgb(0.1, 0.1, 1.0).into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
.add_children(|builder| {
|
.add_children(|builder| {
|
||||||
@ -132,7 +134,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
),
|
),
|
||||||
material: blue_material_handle,
|
material: blue_material_handle,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
})
|
||||||
})
|
})
|
||||||
// alpha test
|
// alpha test
|
||||||
.add_entity(UiEntity {
|
.add_entity(UiEntity {
|
||||||
@ -141,7 +143,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::CENTER,
|
Anchors::CENTER,
|
||||||
Margins::new(0.0, 100.0, 0.0, 100.0),
|
Margins::new(0.0, 100.0, 0.0, 100.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(Color::rgba(1.0, 0.9, 0.9, 0.4).into()),
|
material: materials.add(Color::rgba(1.0, 0.9, 0.9, 0.4).into()),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
// texture
|
// texture
|
||||||
@ -151,7 +153,7 @@ fn setup(world: &mut World, resources: &mut Resources) {
|
|||||||
Anchors::CENTER_TOP,
|
Anchors::CENTER_TOP,
|
||||||
Margins::new(-250.0, 250.0, 510.0 * aspect, 10.0),
|
Margins::new(-250.0, 250.0, 510.0 * aspect, 10.0),
|
||||||
),
|
),
|
||||||
material: color_materials.add(ColorMaterial::texture(texture_handle)),
|
material: materials.add(ColorMaterial::texture(texture_handle)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ use bevy::prelude::*;
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.add_system(placement_system.system())
|
.add_system(placement_system.system())
|
||||||
.add_plugin(DiagnosticsPlugin::default())
|
.add_plugin(DiagnosticsPlugin::default())
|
||||||
.run();
|
.run();
|
||||||
@ -21,11 +21,10 @@ fn placement_system(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
fn setup(command_buffer: &mut CommandBuffer, mut materials: ResourceMut<Assets<ColorMaterial>>) {
|
||||||
let mut builder = world.build();
|
let mut builder = command_buffer.build();
|
||||||
builder.add_entity(Camera2dEntity::default());
|
builder.add_entity(Camera2dEntity::default());
|
||||||
|
|
||||||
let mut materials = resources.get_mut::<Assets<ColorMaterial>>().unwrap();
|
|
||||||
let mut prev = Vec2::default();
|
let mut prev = Vec2::default();
|
||||||
let count = 1000;
|
let count = 1000;
|
||||||
for i in 0..count {
|
for i in 0..count {
|
||||||
|
@ -3,13 +3,12 @@ use bevy::{prelude::*, window::CreateWindow};
|
|||||||
fn main() {
|
fn main() {
|
||||||
App::build()
|
App::build()
|
||||||
.add_default_plugins()
|
.add_default_plugins()
|
||||||
.add_startup_system(setup)
|
.add_startup_system(setup.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn setup(_world: &mut World, resources: &mut Resources) {
|
fn setup(mut create_window_events: ResourceMut<Events<CreateWindow>>) {
|
||||||
// sends out a "CreateWindow" event, which will be received by the windowing backend
|
// sends out a "CreateWindow" event, which will be received by the windowing backend
|
||||||
let mut create_window_events = resources.get_mut::<Events<CreateWindow>>().unwrap();
|
|
||||||
create_window_events.send(CreateWindow {
|
create_window_events.send(CreateWindow {
|
||||||
descriptor: WindowDescriptor {
|
descriptor: WindowDescriptor {
|
||||||
width: 800,
|
width: 800,
|
||||||
|
Loading…
Reference in New Issue
Block a user