diff options
-rw-r--r-- | .cargo/config.toml | 34 | ||||
-rw-r--r-- | Cargo.toml | 4 | ||||
-rw-r--r-- | README.md | 10 | ||||
-rw-r--r-- | src/components.rs | 7 | ||||
-rw-r--r-- | src/lib.rs | 41 | ||||
-rw-r--r-- | src/nodes.rs | 19 | ||||
-rw-r--r-- | src/resources.rs | 67 |
7 files changed, 98 insertions, 84 deletions
diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index 6563c2a..0000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,34 +0,0 @@ - -# Add the contents of this file to `config.toml` to enable "fast build" configuration. Please read the notes below. - -# NOTE: For maximum performance, build using a nightly compiler -# If you are using rust stable, remove the "-Zshare-generics=y" below. - -[target.x86_64-unknown-linux-gnu] -linker = "clang" -rustflags = ["-Clink-arg=-fuse-ld=lld", "-Zshare-generics=y"] - -# NOTE: you must install [Mach-O LLD Port](https://lld.llvm.org/MachO/index.html) on mac. you can easily do this by installing llvm which includes lld with the "brew" package manager: -# `brew install llvm` -[target.x86_64-apple-darwin] -rustflags = [ - "-C", - "link-arg=-fuse-ld=/usr/local/opt/llvm/bin/ld64.lld", - "-Zshare-generics=y", -] - -[target.aarch64-apple-darwin] -rustflags = [ - "-C", - "link-arg=-fuse-ld=/opt/homebrew/opt/llvm/bin/ld64.lld", - "-Zshare-generics=y", -] - -[target.x86_64-pc-windows-msvc] -linker = "rust-lld.exe" -rustflags = ["-Zshare-generics=n"] - -# Optional: Uncommenting the following improves compile times, but reduces the amount of debug info to 'line number tables only' -# In most cases the gains are negligible, but if you are on macos and have slow compile times you should see significant gains. -#[profile.dev] -#debug = 1 @@ -1,6 +1,6 @@ [package] -name = "grex_outline_post_process" -version = "0.1.2" +name = "bevy_outline_post_process" +version = "0.1.3" edition = "2021" [dependencies.bevy] @@ -25,8 +25,8 @@ grex_outline_post_process::components::OutlinePostProcessSettings { ### Using git URL in Cargo.toml ```toml -[dependencies.grex_outline_post_process] -git = "https://github.com/exvacuum/grex_outline_post_process.git" +[dependencies.bevy_outline_post_process] +git = "https://github.com/exvacuum/bevy_outline_post_process.git" ``` ## Usage @@ -34,13 +34,13 @@ git = "https://github.com/exvacuum/grex_outline_post_process.git" In `main.rs`: ```rs use bevy::prelude::*; -use grex_outline_post_process; +use bevy_outline_post_process; fn main() { App::new() .add_plugins(( DefaultPlugins, - grex_outline_post_process::OutlinePostProcessPlugin, + bevy_outline_post_process::OutlinePostProcessPlugin, )) .insert_resource(Msaa::Off) .run(); @@ -52,7 +52,7 @@ When spawning a camera: commands.spawn(( // Camera3dBundle... NormalPrepass, - grex_outline_post_process::components::OutlinePostProcessSettings { + bevy_outline_post_process::components::OutlinePostProcessSettings { weight: 2.0, threshold: 0.0, } diff --git a/src/components.rs b/src/components.rs index 837ccd9..cc6c471 100644 --- a/src/components.rs +++ b/src/components.rs @@ -1,9 +1,10 @@ -use bevy::{prelude::*, render::{render_resource::ShaderType, extract_component::ExtractComponent}}; +use bevy::{ + prelude::*, + render::{extract_component::ExtractComponent, render_resource::ShaderType}, +}; #[derive(Component, ShaderType, ExtractComponent, PartialEq, Clone, Default)] pub struct OutlinePostProcessSettings { pub weight: f32, pub threshold: f32, - #[cfg(feature = "webgl2")] - _padding: Vec2, } @@ -1,12 +1,23 @@ -use bevy::{prelude::*, render::{RenderApp, extract_component::{UniformComponentPlugin, ExtractComponentPlugin}, render_graph::{RenderGraphApp, ViewNodeRunner}}, asset::embedded_asset, core_pipeline::core_3d::graph::{Core3d, Node3d}}; +#![warn(missing_docs)] + +use bevy::{ + asset::embedded_asset, + core_pipeline::core_3d::graph::{Core3d, Node3d}, + prelude::*, + render::{ + extract_component::{ExtractComponentPlugin, UniformComponentPlugin}, + render_graph::{RenderGraphApp, ViewNodeRunner}, + RenderApp, + }, +}; pub use nodes::OutlineRenderLabel; pub struct OutlinePostProcessPlugin; pub mod components; -mod resources; mod nodes; +mod resources; impl Plugin for OutlinePostProcessPlugin { fn build(&self, app: &mut App) { @@ -16,24 +27,26 @@ impl Plugin for OutlinePostProcessPlugin { UniformComponentPlugin::<components::OutlinePostProcessSettings>::default(), ExtractComponentPlugin::<components::OutlinePostProcessSettings>::default(), )); - + let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return; }; - render_app.add_render_graph_node::<ViewNodeRunner<nodes::OutlineRenderNode>>( - Core3d, - nodes::OutlineRenderLabel, - ).add_render_graph_edges( - Core3d, - ( - Node3d::Tonemapping, + render_app + .add_render_graph_node::<ViewNodeRunner<nodes::OutlineRenderNode>>( + Core3d, nodes::OutlineRenderLabel, - Node3d::EndMainPassPostProcessing, - ), - ); + ) + .add_render_graph_edges( + Core3d, + ( + Node3d::Tonemapping, + nodes::OutlineRenderLabel, + Node3d::EndMainPassPostProcessing, + ), + ); } - + fn finish(&self, app: &mut App) { let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return; diff --git a/src/nodes.rs b/src/nodes.rs index 56769e1..292c16d 100644 --- a/src/nodes.rs +++ b/src/nodes.rs @@ -1,4 +1,18 @@ -use bevy::{prelude::*, render::{render_graph::{ViewNode, NodeRunError, RenderGraphContext, RenderLabel}, view::ViewTarget, renderer::RenderContext, render_resource::{PipelineCache, BindGroupEntries, RenderPassDescriptor, RenderPassColorAttachment, Operations}, extract_component::ComponentUniforms}, core_pipeline::prepass::ViewPrepassTextures, ecs::query::QueryItem}; +use bevy::{ + core_pipeline::prepass::ViewPrepassTextures, + ecs::query::QueryItem, + prelude::*, + render::{ + extract_component::ComponentUniforms, + render_graph::{NodeRunError, RenderGraphContext, RenderLabel, ViewNode}, + render_resource::{ + BindGroupEntries, Operations, PipelineCache, RenderPassColorAttachment, + RenderPassDescriptor, + }, + renderer::RenderContext, + view::ViewTarget, + }, +}; use super::components; use super::resources; @@ -30,7 +44,8 @@ impl ViewNode for OutlineRenderNode { return Ok(()); }; - let uniforms = world.resource::<ComponentUniforms<components::OutlinePostProcessSettings>>(); + let uniforms = + world.resource::<ComponentUniforms<components::OutlinePostProcessSettings>>(); let Some(uniform_binding) = uniforms.uniforms().binding() else { error!("Failed to get settings uniform binding"); return Ok(()); diff --git a/src/resources.rs b/src/resources.rs index d755dc2..24aeeec 100644 --- a/src/resources.rs +++ b/src/resources.rs @@ -1,4 +1,18 @@ -use bevy::{prelude::*, render::{render_resource::{Sampler, BindGroupLayout, BindGroupLayoutEntries, ShaderStages, binding_types::{texture_2d, sampler, uniform_buffer}, TextureSampleType, SamplerBindingType, SamplerDescriptor, PipelineCache, RenderPipelineDescriptor, CachedRenderPipelineId, PrimitiveState, MultisampleState, FragmentState, ColorTargetState, TextureFormat, ColorWrites}, renderer::RenderDevice, texture::BevyDefault}, core_pipeline::fullscreen_vertex_shader::fullscreen_shader_vertex_state}; +use bevy::{ + core_pipeline::fullscreen_vertex_shader::fullscreen_shader_vertex_state, + prelude::*, + render::{ + render_resource::{ + binding_types::{sampler, texture_2d, uniform_buffer}, + BindGroupLayout, BindGroupLayoutEntries, CachedRenderPipelineId, ColorTargetState, + ColorWrites, FragmentState, MultisampleState, PipelineCache, PrimitiveState, + RenderPipelineDescriptor, Sampler, SamplerBindingType, SamplerDescriptor, ShaderStages, + TextureFormat, TextureSampleType, + }, + renderer::RenderDevice, + texture::BevyDefault, + }, +}; use super::components; @@ -19,9 +33,9 @@ impl FromWorld for OutlinePostProcessPipeline { &BindGroupLayoutEntries::sequential( ShaderStages::FRAGMENT, ( - texture_2d(TextureSampleType::Float{ filterable: true }), + texture_2d(TextureSampleType::Float { filterable: true }), sampler(SamplerBindingType::Filtering), - texture_2d(TextureSampleType::Float{ filterable: true }), + texture_2d(TextureSampleType::Float { filterable: true }), sampler(SamplerBindingType::Filtering), uniform_buffer::<components::OutlinePostProcessSettings>(false), ), @@ -31,27 +45,32 @@ impl FromWorld for OutlinePostProcessPipeline { let screen_sampler = render_device.create_sampler(&SamplerDescriptor::default()); let normal_sampler = render_device.create_sampler(&SamplerDescriptor::default()); - let shader = world.resource::<AssetServer>().load::<Shader>("embedded://grex_outline_post_process/../assets/shaders/outline_post_process.wgsl"); - - let pipeline_id = world.resource_mut::<PipelineCache>().queue_render_pipeline(RenderPipelineDescriptor { - label: Some("outline_post_process_render_pipeline".into()), - layout: vec![layout.clone()], - push_constant_ranges: vec![], - vertex: fullscreen_shader_vertex_state(), - primitive: PrimitiveState::default(), - depth_stencil: None, - multisample: MultisampleState::default(), - fragment: Some(FragmentState { - shader, - shader_defs: vec![], - entry_point: "fragment".into(), - targets: vec![Some(ColorTargetState { - format: TextureFormat::bevy_default(), - blend: None, - write_mask: ColorWrites::ALL, - })], - }), - }); + let shader = world.resource::<AssetServer>().load::<Shader>( + "embedded://bevy_outline_post_process/../assets/shaders/outline_post_process.wgsl", + ); + + let pipeline_id = + world + .resource_mut::<PipelineCache>() + .queue_render_pipeline(RenderPipelineDescriptor { + label: Some("outline_post_process_render_pipeline".into()), + layout: vec![layout.clone()], + push_constant_ranges: vec![], + vertex: fullscreen_shader_vertex_state(), + primitive: PrimitiveState::default(), + depth_stencil: None, + multisample: MultisampleState::default(), + fragment: Some(FragmentState { + shader, + shader_defs: vec![], + entry_point: "fragment".into(), + targets: vec![Some(ColorTargetState { + format: TextureFormat::bevy_default(), + blend: None, + write_mask: ColorWrites::ALL, + })], + }), + }); Self { layout, |