aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Silas Bartha <[email protected]>2024-04-24 23:56:11 -0400
committerLibravatar Silas Bartha <[email protected]>2024-04-24 23:56:11 -0400
commit73316d02cceeeb23f3082901d2541c987fa99ab5 (patch)
tree24a09abd7dddbac9b6754fcd2681030b3364b8b2
parent98d21d244bb92a1a8d35b1dff35d9c10bdcab19a (diff)
Initial Commit
-rw-r--r--README.md82
-rw-r--r--src/lib.rs5
-rw-r--r--src/nodes.rs2
-rw-r--r--src/resources.rs0
-rw-r--r--src/systems.rs2
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.
diff --git a/src/lib.rs b/src/lib.rs
index 9c6fb1b..c112610 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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;