Initial Commit
This commit is contained in:
parent
98d21d244b
commit
73316d02cc
82
README.md
Normal file
82
README.md
Normal file
@ -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 {
|
||||
|
@ -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> {
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user