move plugin to app module
This commit is contained in:
parent
e2393de97c
commit
3d261f72de
@ -364,7 +364,7 @@ pub fn derive_app_plugin(input: TokenStream) -> TokenStream {
|
|||||||
|
|
||||||
TokenStream::from(quote! {
|
TokenStream::from(quote! {
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn _create_plugin() -> *mut bevy::plugin::AppPlugin {
|
pub extern "C" fn _create_plugin() -> *mut bevy::app::plugin::AppPlugin {
|
||||||
// TODO: without this the assembly does nothing. why is that the case?
|
// TODO: without this the assembly does nothing. why is that the case?
|
||||||
print!("");
|
print!("");
|
||||||
// make sure the constructor is the correct type.
|
// make sure the constructor is the correct type.
|
||||||
|
|||||||
@ -1,110 +0,0 @@
|
|||||||
use bevy::prelude::*;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
App::build().add_defaults().setup(setup).run();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Uniforms, Default)]
|
|
||||||
struct MyMaterial {
|
|
||||||
pub color: Color,
|
|
||||||
#[uniform(ignore, shader_def)]
|
|
||||||
pub always_red: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn setup(world: &mut World, resources: &mut Resources) {
|
|
||||||
let mut render_graph = resources.get_mut::<RenderGraph>().unwrap();
|
|
||||||
let mut pipelines = resources.get_mut::<AssetStorage<PipelineDescriptor>>().unwrap();
|
|
||||||
let mut shaders = resources.get_mut::<AssetStorage<Shader>>().unwrap();
|
|
||||||
render_graph
|
|
||||||
.build(&mut pipelines, &mut shaders)
|
|
||||||
.add_resource_provider(UniformResourceProvider::<MyMaterial>::new(true))
|
|
||||||
.add_pipeline_to_pass(resource_name::pass::MAIN, "MyMaterial", |builder| {
|
|
||||||
builder
|
|
||||||
.with_vertex_shader(Shader::from_glsl(
|
|
||||||
ShaderStage::Vertex,
|
|
||||||
r#"
|
|
||||||
#version 450
|
|
||||||
layout(location = 0) in vec4 Vertex_Position;
|
|
||||||
layout(location = 0) out vec4 v_Position;
|
|
||||||
layout(set = 0, binding = 0) uniform Camera {
|
|
||||||
mat4 ViewProj;
|
|
||||||
};
|
|
||||||
layout(set = 1, binding = 0) uniform Object {
|
|
||||||
mat4 Model;
|
|
||||||
};
|
|
||||||
void main() {
|
|
||||||
v_Position = Model * Vertex_Position;
|
|
||||||
gl_Position = ViewProj * v_Position;
|
|
||||||
}
|
|
||||||
"#,
|
|
||||||
))
|
|
||||||
.with_fragment_shader(Shader::from_glsl(
|
|
||||||
ShaderStage::Fragment,
|
|
||||||
r#"
|
|
||||||
#version 450
|
|
||||||
layout(location = 0) in vec4 v_Position;
|
|
||||||
layout(location = 0) out vec4 o_Target;
|
|
||||||
layout(set = 1, binding = 1) uniform MyMaterial_color {
|
|
||||||
vec4 color;
|
|
||||||
};
|
|
||||||
void main() {
|
|
||||||
o_Target = color;
|
|
||||||
|
|
||||||
# ifdef MYMATERIAL_ALWAYS_RED
|
|
||||||
o_Target = vec4(0.8, 0.0, 0.0, 1.0);
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
"#,
|
|
||||||
))
|
|
||||||
.with_default_config();
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut mesh_storage = resources.get_mut::<AssetStorage<Mesh>>().unwrap();
|
|
||||||
let cube_handle = mesh_storage.add(Mesh::load(MeshType::Cube));
|
|
||||||
|
|
||||||
let mut pipeline_storage = resources
|
|
||||||
.get_mut::<AssetStorage<PipelineDescriptor>>()
|
|
||||||
.unwrap();
|
|
||||||
let material_handle = pipeline_storage.get_named("MyMaterial").unwrap();
|
|
||||||
|
|
||||||
world
|
|
||||||
.build()
|
|
||||||
// cube
|
|
||||||
.add_entity(MeshMaterialEntity::<MyMaterial> {
|
|
||||||
mesh: cube_handle,
|
|
||||||
renderable: Renderable {
|
|
||||||
pipelines: vec![material_handle],
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
material: MyMaterial {
|
|
||||||
color: Color::rgb(0.0, 0.8, 0.0),
|
|
||||||
always_red: false,
|
|
||||||
},
|
|
||||||
translation: Translation::new(-2.0, 0.0, 0.0),
|
|
||||||
..Default::default()
|
|
||||||
})
|
|
||||||
// cube
|
|
||||||
.add_entity(MeshMaterialEntity::<MyMaterial> {
|
|
||||||
mesh: cube_handle,
|
|
||||||
renderable: Renderable {
|
|
||||||
pipelines: vec![material_handle],
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
material: MyMaterial {
|
|
||||||
color: Color::rgb(0.0, 0.0, 0.0),
|
|
||||||
always_red: true,
|
|
||||||
},
|
|
||||||
translation: Translation::new(2.0, 0.0, 0.0),
|
|
||||||
..Default::default()
|
|
||||||
})
|
|
||||||
// camera
|
|
||||||
.add_entity(CameraEntity {
|
|
||||||
local_to_world: LocalToWorld(Mat4::look_at_rh(
|
|
||||||
Vec3::new(3.0, 8.0, 5.0),
|
|
||||||
Vec3::new(0.0, 0.0, 0.0),
|
|
||||||
Vec3::new(0.0, 0.0, 1.0),
|
|
||||||
)),
|
|
||||||
..Default::default()
|
|
||||||
})
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
app::{system_stage, App},
|
app::{system_stage, App, plugin::{AppPlugin, load_plugin}},
|
||||||
core::{plugin::{AppPlugin, load_plugin}, winit::WinitPlugin, CorePlugin},
|
core::{winit::WinitPlugin, CorePlugin},
|
||||||
legion::prelude::{Resources, Runnable, Schedulable, Schedule, Universe, World},
|
legion::prelude::{Resources, Runnable, Schedulable, Schedule, Universe, World},
|
||||||
render::{renderer::Renderer, *},
|
render::{renderer::Renderer, *},
|
||||||
ui,
|
ui,
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
mod app;
|
mod app;
|
||||||
mod app_builder;
|
mod app_builder;
|
||||||
pub mod system_stage;
|
pub mod system_stage;
|
||||||
|
pub mod plugin;
|
||||||
|
|
||||||
pub use app::App;
|
pub use app::App;
|
||||||
pub use app_builder::AppBuilder;
|
pub use app_builder::AppBuilder;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
use super::{Time, Window, plugin::AppPlugin};
|
use super::{Time, Window};
|
||||||
use crate::{app::AppBuilder};
|
use crate::{app::{AppBuilder, plugin::AppPlugin}};
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct CorePlugin;
|
pub struct CorePlugin;
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
pub mod bytes;
|
pub mod bytes;
|
||||||
mod time;
|
mod time;
|
||||||
pub mod window;
|
pub mod window;
|
||||||
pub mod plugin;
|
|
||||||
mod core_plugin;
|
mod core_plugin;
|
||||||
|
|
||||||
pub use bytes::*;
|
pub use bytes::*;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
app::{App, AppBuilder}, core::plugin::AppPlugin,
|
app::{App, AppBuilder}, app::plugin::AppPlugin,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::Window;
|
use super::Window;
|
||||||
|
|||||||
@ -2,7 +2,7 @@ use super::{
|
|||||||
diagnostics::{frame_time_diagnostic_system, print_diagnostics_system},
|
diagnostics::{frame_time_diagnostic_system, print_diagnostics_system},
|
||||||
Diagnostics,
|
Diagnostics,
|
||||||
};
|
};
|
||||||
use crate::{app::AppBuilder, core::plugin::AppPlugin};
|
use crate::{app::AppBuilder, app::plugin::AppPlugin};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
pub struct DiagnosticsPlugin {
|
pub struct DiagnosticsPlugin {
|
||||||
|
|||||||
@ -19,7 +19,7 @@ pub struct MeshEntity {
|
|||||||
#[derive(EntityArchetype, Default)]
|
#[derive(EntityArchetype, Default)]
|
||||||
pub struct MeshMaterialEntity<T: Default + Send + Sync + 'static> {
|
pub struct MeshMaterialEntity<T: Default + Send + Sync + 'static> {
|
||||||
pub mesh: Handle<Mesh>,
|
pub mesh: Handle<Mesh>,
|
||||||
pub material: T,
|
pub material: Handle<T>,
|
||||||
pub renderable: Renderable,
|
pub renderable: Renderable,
|
||||||
pub local_to_world: LocalToWorld,
|
pub local_to_world: LocalToWorld,
|
||||||
pub translation: Translation,
|
pub translation: Translation,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
pub use crate::{
|
pub use crate::{
|
||||||
app::{App, AppBuilder},
|
app::{App, AppBuilder, plugin::AppPlugin},
|
||||||
asset::{Asset, AssetStorage, Handle},
|
asset::{Asset, AssetStorage, Handle},
|
||||||
core::{Time, Window, plugin::AppPlugin},
|
core::{Time, Window},
|
||||||
ecs,
|
ecs,
|
||||||
ecs::{
|
ecs::{
|
||||||
default_archetypes::*, CommandBufferBuilderSource, EntityArchetype, WorldBuilder,
|
default_archetypes::*, CommandBufferBuilderSource, EntityArchetype, WorldBuilder,
|
||||||
@ -10,7 +10,7 @@ pub use crate::{
|
|||||||
render::{
|
render::{
|
||||||
mesh::{Mesh, MeshType},
|
mesh::{Mesh, MeshType},
|
||||||
pipeline::PipelineDescriptor,
|
pipeline::PipelineDescriptor,
|
||||||
render_resource::{resource_name, resource_providers::UniformResourceProvider},
|
render_resource::{resource_name, resource_providers::UniformResourceProvider, AssetBatchers},
|
||||||
render_graph::RenderGraph,
|
render_graph::RenderGraph,
|
||||||
shader::{uniforms::StandardMaterial, Shader, ShaderDefSuffixProvider, ShaderStage},
|
shader::{uniforms::StandardMaterial, Shader, ShaderDefSuffixProvider, ShaderStage},
|
||||||
texture::{Texture, TextureType},
|
texture::{Texture, TextureType},
|
||||||
|
|||||||
@ -16,7 +16,7 @@ use super::{
|
|||||||
use crate::{
|
use crate::{
|
||||||
app::AppBuilder,
|
app::AppBuilder,
|
||||||
asset::AssetStorage,
|
asset::AssetStorage,
|
||||||
core::plugin::AppPlugin,
|
app::plugin::AppPlugin,
|
||||||
prelude::{
|
prelude::{
|
||||||
LocalToWorld, Mesh, PipelineDescriptor, Shader, StandardMaterial, Texture,
|
LocalToWorld, Mesh, PipelineDescriptor, Shader, StandardMaterial, Texture,
|
||||||
UniformResourceProvider,
|
UniformResourceProvider,
|
||||||
|
|||||||
@ -7,7 +7,7 @@ pub use wgpu_render_pass::*;
|
|||||||
pub use wgpu_renderer::*;
|
pub use wgpu_renderer::*;
|
||||||
pub use wgpu_resources::*;
|
pub use wgpu_resources::*;
|
||||||
|
|
||||||
use crate::{app::AppBuilder, core::plugin::AppPlugin};
|
use crate::{app::AppBuilder, app::plugin::AppPlugin};
|
||||||
|
|
||||||
pub struct WgpuRendererPlugin;
|
pub struct WgpuRendererPlugin;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user