render: add ClearColor resource
This commit is contained in:
		
							parent
							
								
									dfde160741
								
							
						
					
					
						commit
						8a8d01aa88
					
				@ -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 New Issue
	
	Block a user