diff options
-rw-r--r-- | README.md | 82 | ||||
-rw-r--r-- | src/lib.rs | 5 | ||||
-rw-r--r-- | src/nodes.rs | 2 | ||||
-rw-r--r-- | src/resources.rs | 0 | ||||
-rw-r--r-- | src/systems.rs | 2 |
5 files changed, 83 insertions, 8 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..4f0bf79 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# grex_framebuffer_extract + + +A plugin for the [Bevy](https://bevyengine.org) engine which allows for exporting framebuffer data from a camera. + +Currently it only supports cameras which render to a render texture. + +## Compatibility + +| Crate Version | Bevy Version | +|--- |--- | +| 0.1 | 0.13 | + +## Installation + +### Using git URL in Cargo.toml +```toml +[dependencies.grex_framebuffer_extract] +git = "https://github.com/exvacuum/grex_framebuffer_extract.git" +``` + +## Usage + +In `main.rs`: +```rs +use bevy::prelude::*; +use grex_framebuffer_extract; + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins, + grex_framebuffer_extract::FramebufferExtractPlugin, + )) + .run(); +} +``` + +When spawning a camera: +```rs +let size = Extent3d { + width: 640, + height: 480, + depth_or_array_layers: 1, +}; + +let mut image = Image { + texture_descriptor: TextureDescriptor { + label: None, + size, + dimension: TextureDimension::D2, + format: TextureFormat::R8Unorm, + mip_level_count: 1, + sample_count: 1, + usage: TextureUsages::TEXTURE_BINDING + | TextureUsages::COPY_SRC + | TextureUsages::RENDER_ATTACHMENT, + view_formats: &[], + }, + ..default() +}; + +image.resize(size); + +let image_handle = images.add(image); // ResMut<Assets<Image>> + +commands.spawn(( + Camera3dBundle { + camera: Camera { + target: image_handle.clone().into(); + ..Default::default() + }, + ..Default::default() + }, + grex_framebuffer_extract::ExtractFramebufferBundle { + source: framebuffer_extract_sources.add(FramebufferExtractSource(image_handle.clone())), // ResMut<Assets<FramebufferExtractSource>> + destination: FramebufferExtractDestination::default(), + }, +)); +``` + +The FramebufferExtractDestination component will contain the extracted image which can be used or saved for whatever you need. @@ -8,11 +8,6 @@ mod systems; mod nodes; pub mod render_assets; - -pub enum FramebufferExtractSet { - Set -} - pub struct FramebufferExtractPlugin; impl Plugin for FramebufferExtractPlugin { diff --git a/src/nodes.rs b/src/nodes.rs index bccd861..d069798 100644 --- a/src/nodes.rs +++ b/src/nodes.rs @@ -11,7 +11,7 @@ pub struct FramebufferExtractNode; impl Node for FramebufferExtractNode { fn run( &self, - graph: &mut RenderGraphContext, + _graph: &mut RenderGraphContext, render_context: &mut RenderContext, world: &World, ) -> Result<(), NodeRunError> { diff --git a/src/resources.rs b/src/resources.rs deleted file mode 100644 index e69de29..0000000 --- a/src/resources.rs +++ /dev/null diff --git a/src/systems.rs b/src/systems.rs index 25b25dc..244b82f 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -1,5 +1,3 @@ -use std::time::Duration; - use bevy::{prelude::*, render::{render_asset::{RenderAssets, RenderAssetUsages}, renderer::RenderDevice, render_resource::{MapMode, Maintain, Extent3d, TextureDimension}}}; use pollster::FutureExt; |