webrender/prim_store/
backdrop.rs1use crate::intern::{Internable, InternDebug, Handle as InternHandle};
6use crate::internal_types::LayoutPrimitiveInfo;
7use crate::prim_store::{
8 InternablePrimitive, PrimitiveInstanceKind, PrimKey, PrimTemplate,
9 PrimTemplateCommonData, PrimitiveStore, PictureIndex,
10};
11use crate::scene_building::IsVisible;
12
13#[cfg_attr(feature = "capture", derive(Serialize))]
14#[cfg_attr(feature = "replay", derive(Deserialize))]
15#[derive(Debug, Clone, Eq, PartialEq, MallocSizeOf, Hash)]
16pub struct BackdropCapture {
17}
18
19#[cfg_attr(feature = "capture", derive(Serialize))]
20#[cfg_attr(feature = "replay", derive(Deserialize))]
21#[derive(Debug, Clone, Eq, PartialEq, MallocSizeOf, Hash)]
22pub struct BackdropRender {
23}
24
25impl From<BackdropCapture> for BackdropCaptureData {
26 fn from(_backdrop: BackdropCapture) -> Self {
27 BackdropCaptureData {
28 }
29 }
30}
31
32impl From<BackdropRender> for BackdropRenderData {
33 fn from(_backdrop: BackdropRender) -> Self {
34 BackdropRenderData {
35 }
36 }
37}
38
39pub type BackdropCaptureKey = PrimKey<BackdropCapture>;
40pub type BackdropRenderKey = PrimKey<BackdropRender>;
41
42impl BackdropCaptureKey {
43 pub fn new(
44 info: &LayoutPrimitiveInfo,
45 backdrop_capture: BackdropCapture,
46 ) -> Self {
47 BackdropCaptureKey {
48 common: info.into(),
49 kind: backdrop_capture,
50 }
51 }
52}
53
54impl BackdropRenderKey {
55 pub fn new(
56 info: &LayoutPrimitiveInfo,
57 backdrop_render: BackdropRender,
58 ) -> Self {
59 BackdropRenderKey {
60 common: info.into(),
61 kind: backdrop_render,
62 }
63 }
64}
65
66impl InternDebug for BackdropCaptureKey {}
67impl InternDebug for BackdropRenderKey {}
68
69#[cfg_attr(feature = "capture", derive(Serialize))]
70#[cfg_attr(feature = "replay", derive(Deserialize))]
71#[derive(Debug, MallocSizeOf)]
72pub struct BackdropCaptureData {
73}
74
75#[cfg_attr(feature = "capture", derive(Serialize))]
76#[cfg_attr(feature = "replay", derive(Deserialize))]
77#[derive(Debug, MallocSizeOf)]
78pub struct BackdropRenderData {
79}
80
81pub type BackdropCaptureTemplate = PrimTemplate<BackdropCaptureData>;
82pub type BackdropRenderTemplate = PrimTemplate<BackdropRenderData>;
83
84impl From<BackdropCaptureKey> for BackdropCaptureTemplate {
85 fn from(backdrop: BackdropCaptureKey) -> Self {
86 let common = PrimTemplateCommonData::with_key_common(backdrop.common);
87
88 BackdropCaptureTemplate {
89 common,
90 kind: backdrop.kind.into(),
91 }
92 }
93}
94
95impl From<BackdropRenderKey> for BackdropRenderTemplate {
96 fn from(backdrop: BackdropRenderKey) -> Self {
97 let common = PrimTemplateCommonData::with_key_common(backdrop.common);
98
99 BackdropRenderTemplate {
100 common,
101 kind: backdrop.kind.into(),
102 }
103 }
104}
105
106pub type BackdropCaptureDataHandle = InternHandle<BackdropCapture>;
107pub type BackdropRenderDataHandle = InternHandle<BackdropRender>;
108
109impl Internable for BackdropCapture {
110 type Key = BackdropCaptureKey;
111 type StoreData = BackdropCaptureTemplate;
112 type InternData = ();
113 const PROFILE_COUNTER: usize = crate::profiler::INTERNED_BACKDROP_CAPTURES;
114}
115
116impl Internable for BackdropRender {
117 type Key = BackdropRenderKey;
118 type StoreData = BackdropRenderTemplate;
119 type InternData = ();
120 const PROFILE_COUNTER: usize = crate::profiler::INTERNED_BACKDROP_RENDERS;
121}
122
123impl InternablePrimitive for BackdropCapture {
124 fn into_key(
125 self,
126 info: &LayoutPrimitiveInfo,
127 ) -> BackdropCaptureKey {
128 BackdropCaptureKey::new(info, self)
129 }
130
131 fn make_instance_kind(
132 _key: BackdropCaptureKey,
133 data_handle: BackdropCaptureDataHandle,
134 _prim_store: &mut PrimitiveStore,
135 ) -> PrimitiveInstanceKind {
136 PrimitiveInstanceKind::BackdropCapture {
137 data_handle,
138 }
139 }
140}
141
142impl InternablePrimitive for BackdropRender {
143 fn into_key(
144 self,
145 info: &LayoutPrimitiveInfo,
146 ) -> BackdropRenderKey {
147 BackdropRenderKey::new(info, self)
148 }
149
150 fn make_instance_kind(
151 _key: BackdropRenderKey,
152 data_handle: BackdropRenderDataHandle,
153 _prim_store: &mut PrimitiveStore,
154 ) -> PrimitiveInstanceKind {
155 PrimitiveInstanceKind::BackdropRender {
156 data_handle,
157 pic_index: PictureIndex::INVALID,
158 }
159 }
160}
161
162impl IsVisible for BackdropCapture {
163 fn is_visible(&self) -> bool {
164 true
165 }
166}
167
168impl IsVisible for BackdropRender {
169 fn is_visible(&self) -> bool {
170 true
171 }
172}