aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.cargo/config.toml34
-rw-r--r--Cargo.toml4
-rw-r--r--README.md12
-rw-r--r--src/components.rs7
-rw-r--r--src/lib.rs41
-rw-r--r--src/nodes.rs19
-rw-r--r--src/resources.rs67
7 files changed, 99 insertions, 85 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
diff --git a/Cargo.toml b/Cargo.toml
index 6735b34..87ccf91 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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]
diff --git a/README.md b/README.md
index 56b74fa..117333a 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# grex_outline_post_process
+# bevy_outline_post_process
A plugin for the [Bevy](https://bevyengine.org) engine which adds an outline post-processing effect.
@@ -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,
}
diff --git a/src/lib.rs b/src/lib.rs
index 12dd5bb..144dfe8 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,