bevy_core_pipeline/deferred/
mod.rs1pub mod copy_lighting_id;
2pub mod node;
3
4use core::ops::Range;
5
6use crate::prepass::OpaqueNoLightmap3dBinKey;
7use bevy_ecs::prelude::*;
8use bevy_render::sync_world::MainEntity;
9use bevy_render::{
10 render_phase::{
11 BinnedPhaseItem, CachedRenderPipelinePhaseItem, DrawFunctionId, PhaseItem,
12 PhaseItemExtraIndex,
13 },
14 render_resource::{CachedRenderPipelineId, TextureFormat},
15};
16
17pub const DEFERRED_PREPASS_FORMAT: TextureFormat = TextureFormat::Rgba32Uint;
18pub const DEFERRED_LIGHTING_PASS_ID_FORMAT: TextureFormat = TextureFormat::R8Uint;
19pub const DEFERRED_LIGHTING_PASS_ID_DEPTH_FORMAT: TextureFormat = TextureFormat::Depth16Unorm;
20
21#[derive(PartialEq, Eq, Hash)]
27pub struct Opaque3dDeferred {
28 pub key: OpaqueNoLightmap3dBinKey,
29 pub representative_entity: (Entity, MainEntity),
30 pub batch_range: Range<u32>,
31 pub extra_index: PhaseItemExtraIndex,
32}
33
34impl PhaseItem for Opaque3dDeferred {
35 #[inline]
36 fn entity(&self) -> Entity {
37 self.representative_entity.0
38 }
39
40 fn main_entity(&self) -> MainEntity {
41 self.representative_entity.1
42 }
43
44 #[inline]
45 fn draw_function(&self) -> DrawFunctionId {
46 self.key.draw_function
47 }
48
49 #[inline]
50 fn batch_range(&self) -> &Range<u32> {
51 &self.batch_range
52 }
53
54 #[inline]
55 fn batch_range_mut(&mut self) -> &mut Range<u32> {
56 &mut self.batch_range
57 }
58
59 #[inline]
60 fn extra_index(&self) -> PhaseItemExtraIndex {
61 self.extra_index
62 }
63
64 #[inline]
65 fn batch_range_and_extra_index_mut(&mut self) -> (&mut Range<u32>, &mut PhaseItemExtraIndex) {
66 (&mut self.batch_range, &mut self.extra_index)
67 }
68}
69
70impl BinnedPhaseItem for Opaque3dDeferred {
71 type BinKey = OpaqueNoLightmap3dBinKey;
72
73 #[inline]
74 fn new(
75 key: Self::BinKey,
76 representative_entity: (Entity, MainEntity),
77 batch_range: Range<u32>,
78 extra_index: PhaseItemExtraIndex,
79 ) -> Self {
80 Self {
81 key,
82 representative_entity,
83 batch_range,
84 extra_index,
85 }
86 }
87}
88
89impl CachedRenderPipelinePhaseItem for Opaque3dDeferred {
90 #[inline]
91 fn cached_pipeline(&self) -> CachedRenderPipelineId {
92 self.key.pipeline
93 }
94}
95
96pub struct AlphaMask3dDeferred {
102 pub key: OpaqueNoLightmap3dBinKey,
103 pub representative_entity: (Entity, MainEntity),
104 pub batch_range: Range<u32>,
105 pub extra_index: PhaseItemExtraIndex,
106}
107
108impl PhaseItem for AlphaMask3dDeferred {
109 #[inline]
110 fn entity(&self) -> Entity {
111 self.representative_entity.0
112 }
113
114 #[inline]
115 fn main_entity(&self) -> MainEntity {
116 self.representative_entity.1
117 }
118
119 #[inline]
120 fn draw_function(&self) -> DrawFunctionId {
121 self.key.draw_function
122 }
123
124 #[inline]
125 fn batch_range(&self) -> &Range<u32> {
126 &self.batch_range
127 }
128
129 #[inline]
130 fn batch_range_mut(&mut self) -> &mut Range<u32> {
131 &mut self.batch_range
132 }
133
134 #[inline]
135 fn extra_index(&self) -> PhaseItemExtraIndex {
136 self.extra_index
137 }
138
139 #[inline]
140 fn batch_range_and_extra_index_mut(&mut self) -> (&mut Range<u32>, &mut PhaseItemExtraIndex) {
141 (&mut self.batch_range, &mut self.extra_index)
142 }
143}
144
145impl BinnedPhaseItem for AlphaMask3dDeferred {
146 type BinKey = OpaqueNoLightmap3dBinKey;
147
148 fn new(
149 key: Self::BinKey,
150 representative_entity: (Entity, MainEntity),
151 batch_range: Range<u32>,
152 extra_index: PhaseItemExtraIndex,
153 ) -> Self {
154 Self {
155 key,
156 representative_entity,
157 batch_range,
158 extra_index,
159 }
160 }
161}
162
163impl CachedRenderPipelinePhaseItem for AlphaMask3dDeferred {
164 #[inline]
165 fn cached_pipeline(&self) -> CachedRenderPipelineId {
166 self.key.pipeline
167 }
168}