mirror of
https://github.com/bevyengine/bevy
synced 2024-11-22 20:53:53 +00:00
render: add ClearColor resource
This commit is contained in:
parent
dfde160741
commit
8a8d01aa88
6 changed files with 49 additions and 1 deletions
|
@ -187,6 +187,10 @@ path = "examples/ui/ui.rs"
|
||||||
name = "ui_bench"
|
name = "ui_bench"
|
||||||
path = "examples/ui/ui_bench.rs"
|
path = "examples/ui/ui_bench.rs"
|
||||||
|
|
||||||
|
[[example]]
|
||||||
|
name = "clear_color"
|
||||||
|
path = "examples/window/clear_color.rs"
|
||||||
|
|
||||||
[[example]]
|
[[example]]
|
||||||
name = "multiple_windows"
|
name = "multiple_windows"
|
||||||
path = "examples/window/multiple_windows.rs"
|
path = "examples/window/multiple_windows.rs"
|
|
@ -114,6 +114,8 @@ impl BaseRenderGraphBuilder for RenderGraph {
|
||||||
sample_count: 1,
|
sample_count: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
main_pass_node.use_default_clear_color(0);
|
||||||
|
|
||||||
if config.add_3d_camera {
|
if config.add_3d_camera {
|
||||||
main_pass_node.add_camera(camera::CAMERA);
|
main_pass_node.add_camera(camera::CAMERA);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,28 @@ impl TextureAttachment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct ClearColor {
|
||||||
|
pub color: Color,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ClearColor {
|
||||||
|
pub fn new(color: Color) -> Self {
|
||||||
|
ClearColor {
|
||||||
|
color,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for ClearColor {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
color: Color::rgb(0.1, 0.1, 0.1),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct RenderPassColorAttachmentDescriptor {
|
pub struct RenderPassColorAttachmentDescriptor {
|
||||||
/// The actual color attachment.
|
/// The actual color attachment.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
draw::{Draw, RenderCommand},
|
draw::{Draw, RenderCommand},
|
||||||
pass::{PassDescriptor, TextureAttachment},
|
pass::{PassDescriptor, TextureAttachment, ClearColor},
|
||||||
pipeline::PipelineDescriptor,
|
pipeline::PipelineDescriptor,
|
||||||
render_graph::{Node, ResourceSlotInfo, ResourceSlots},
|
render_graph::{Node, ResourceSlotInfo, ResourceSlots},
|
||||||
render_resource::{BindGroupId, BufferId, RenderResourceBindings, RenderResourceType},
|
render_resource::{BindGroupId, BufferId, RenderResourceBindings, RenderResourceType},
|
||||||
|
@ -15,6 +15,7 @@ pub struct PassNode {
|
||||||
cameras: Vec<String>,
|
cameras: Vec<String>,
|
||||||
color_attachment_input_indices: Vec<Option<usize>>,
|
color_attachment_input_indices: Vec<Option<usize>>,
|
||||||
depth_stencil_attachment_input_index: Option<usize>,
|
depth_stencil_attachment_input_index: Option<usize>,
|
||||||
|
default_clear_color_inputs: Vec<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PassNode {
|
impl PassNode {
|
||||||
|
@ -50,12 +51,17 @@ impl PassNode {
|
||||||
cameras: Vec::new(),
|
cameras: Vec::new(),
|
||||||
color_attachment_input_indices,
|
color_attachment_input_indices,
|
||||||
depth_stencil_attachment_input_index,
|
depth_stencil_attachment_input_index,
|
||||||
|
default_clear_color_inputs: Vec::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn add_camera(&mut self, camera_name: &str) {
|
pub fn add_camera(&mut self, camera_name: &str) {
|
||||||
self.cameras.push(camera_name.to_string());
|
self.cameras.push(camera_name.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn use_default_clear_color(&mut self, color_attachment_index: usize) {
|
||||||
|
self.default_clear_color_inputs.push(color_attachment_index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Node for PassNode {
|
impl Node for PassNode {
|
||||||
|
@ -76,6 +82,11 @@ impl Node for PassNode {
|
||||||
let active_cameras= resources.get::<ActiveCameras>().unwrap();
|
let active_cameras= resources.get::<ActiveCameras>().unwrap();
|
||||||
|
|
||||||
for (i, color_attachment) in self.descriptor.color_attachments.iter_mut().enumerate() {
|
for (i, color_attachment) in self.descriptor.color_attachments.iter_mut().enumerate() {
|
||||||
|
if self.default_clear_color_inputs.contains(&i) {
|
||||||
|
if let Some(default_clear_color) = resources.get::<ClearColor>() {
|
||||||
|
color_attachment.clear_color = default_clear_color.color;
|
||||||
|
}
|
||||||
|
}
|
||||||
if let Some(input_index) = self.color_attachment_input_indices[i] {
|
if let Some(input_index) = self.color_attachment_input_indices[i] {
|
||||||
color_attachment.attachment =
|
color_attachment.attachment =
|
||||||
TextureAttachment::Id(input.get(input_index).unwrap().get_texture().unwrap());
|
TextureAttachment::Id(input.get(input_index).unwrap().get_texture().unwrap());
|
||||||
|
|
8
examples/window/clear_color.rs
Normal file
8
examples/window/clear_color.rs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
use bevy::prelude::*;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
App::build()
|
||||||
|
.add_resource(ClearColor::new(Color::rgb(0.2, 0.2, 0.8)))
|
||||||
|
.add_default_plugins()
|
||||||
|
.run();
|
||||||
|
}
|
|
@ -17,6 +17,7 @@ pub use crate::{
|
||||||
draw::Draw,
|
draw::Draw,
|
||||||
entity::*,
|
entity::*,
|
||||||
mesh::{shape, Mesh},
|
mesh::{shape, Mesh},
|
||||||
|
pass::ClearColor,
|
||||||
pipeline::{PipelineDescriptor, RenderPipelines},
|
pipeline::{PipelineDescriptor, RenderPipelines},
|
||||||
render_graph::{
|
render_graph::{
|
||||||
nodes::{
|
nodes::{
|
||||||
|
|
Loading…
Reference in a new issue