bevy/crates/bevy_render/src
Peter Hayman 6ce4bf5181
Add RenderTarget::TextureView (#8042)
# Objective

We can currently set `camera.target` to either an `Image` or `Window`.
For OpenXR & WebXR we need to be able to render to a `TextureView`.

This partially addresses #115 as with the addition we can create
internal and external xr crates.

## Solution

A `TextureView` item is added to the `RenderTarget` enum. It holds an id
which is looked up by a `ManualTextureViews` resource, much like how
`Assets<Image>` works.
I believe this approach was first used by @kcking in their [xr
fork](eb39afd51b/crates/bevy_render/src/camera/camera.rs (L322)).
The only change is that a `u32` is used to index the textures as
`FromReflect` does not support `uuid` and I don't know how to implement
that.

---

## Changelog

### Added
Render: Added `RenderTarget::TextureView` as a `camera.target` option,
enabling rendering directly to a `TextureView`.

## Migration Guide

References to the `RenderTarget` enum will need to handle the additional
field, ie in `match` statements.

---

## Comments
- The [wgpu
work](c039a74884)
done by @expenses allows us to create framebuffer texture views from
`wgpu v0.15, bevy 0.10`.
- I got the WebXR techniques from the [xr
fork](https://github.com/dekuraan/xr-bevy) by @dekuraan.
- I have tested this with a wip [external webxr
crate](018e22bb06/crates/bevy_webxr/src/bevy_utils/xr_render.rs (L50))
on an Oculus Quest 2.

![Screenshot 2023-03-11
230651](https://user-images.githubusercontent.com/25616826/224483696-c176c06f-a806-4abe-a494-b2e096ac96b7.png)

---------

Co-authored-by: Carter Anderson <mcanders1@gmail.com>
Co-authored-by: Paul Hansen <mail@paul.rs>
2023-06-19 13:53:05 +00:00
..
camera Add RenderTarget::TextureView (#8042) 2023-06-19 13:53:05 +00:00
color conversions between [u8; 4] and Color (#8564) 2023-05-08 16:36:46 +00:00
mesh Fix Plane UVs / texture flip (#8878) 2023-06-18 19:35:46 +00:00
primitives Rename Plane struct to HalfSpace (#8744) 2023-06-12 19:27:41 +00:00
render_graph Add ViewNode to simplify render node management (#8118) 2023-05-08 19:42:23 +00:00
render_phase Apply codebase changes in preparation for StandardMaterial transmission (#8704) 2023-05-30 14:21:53 +00:00
render_resource reflect: stable type path v2 (#7184) 2023-06-05 20:31:20 +00:00
renderer Fixed several missing links in docs. (#8117) 2023-04-23 17:28:36 +00:00
texture update bitflags to 2.3 (#8728) 2023-06-01 08:41:42 +00:00
view Add RenderTarget::TextureView (#8042) 2023-06-19 13:53:05 +00:00
extract_component.rs Schedule-First: the new and improved add_systems (#8079) 2023-03-18 01:45:34 +00:00
extract_param.rs Use UnsafeWorldCell to increase code quality for SystemParam (#8174) 2023-04-01 15:45:07 +00:00
extract_resource.rs Schedule-First: the new and improved add_systems (#8079) 2023-03-18 01:45:34 +00:00
globals.rs Webgpu support (#8336) 2023-05-04 22:07:57 +00:00
globals.wgsl Refactor Globals and View structs into separate shaders (#7512) 2023-02-11 17:55:18 +00:00
lib.rs Rename apply_system_buffers to apply_deferred (#8726) 2023-06-02 14:04:13 +00:00
pipelined_rendering.rs Webgpu support (#8336) 2023-05-04 22:07:57 +00:00
render_asset.rs Schedule-First: the new and improved add_systems (#8079) 2023-03-18 01:45:34 +00:00
settings.rs Webgpu support (#8336) 2023-05-04 22:07:57 +00:00
spatial_bundle.rs enum Visibility component (#6320) 2022-12-25 00:39:29 +00:00