@@ -159,12 +159,61 @@ class ContentContext {
159
159
color0.src_alpha_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
160
160
color0.src_color_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
161
161
break ;
162
- case Entity::BlendMode::kPlus :
162
+ case Entity::BlendMode::kSourceIn :
163
+ color0.dst_alpha_blend_factor = BlendFactor::kZero ;
164
+ color0.dst_color_blend_factor = BlendFactor::kZero ;
165
+ color0.src_alpha_blend_factor = BlendFactor::kDestinationAlpha ;
166
+ color0.src_color_blend_factor = BlendFactor::kDestinationAlpha ;
167
+ break ;
168
+ case Entity::BlendMode::kDestinationIn :
169
+ color0.dst_alpha_blend_factor = BlendFactor::kSourceAlpha ;
170
+ color0.dst_color_blend_factor = BlendFactor::kSourceAlpha ;
171
+ color0.src_alpha_blend_factor = BlendFactor::kZero ;
172
+ color0.src_color_blend_factor = BlendFactor::kZero ;
173
+ break ;
174
+ case Entity::BlendMode::kSourceOut :
175
+ color0.dst_alpha_blend_factor = BlendFactor::kZero ;
176
+ color0.dst_color_blend_factor = BlendFactor::kZero ;
177
+ color0.src_alpha_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
178
+ color0.src_color_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
179
+ break ;
180
+ case Entity::BlendMode::kDestinationOut :
181
+ color0.dst_alpha_blend_factor = BlendFactor::kOneMinusSourceAlpha ;
182
+ color0.dst_color_blend_factor = BlendFactor::kOneMinusSourceAlpha ;
183
+ color0.src_alpha_blend_factor = BlendFactor::kZero ;
184
+ color0.src_color_blend_factor = BlendFactor::kZero ;
185
+ break ;
186
+ case Entity::BlendMode::kSourceATop :
163
187
color0.dst_alpha_blend_factor = BlendFactor::kOneMinusSourceAlpha ;
188
+ color0.dst_color_blend_factor = BlendFactor::kOneMinusSourceAlpha ;
189
+ color0.src_alpha_blend_factor = BlendFactor::kDestinationAlpha ;
190
+ color0.src_color_blend_factor = BlendFactor::kDestinationAlpha ;
191
+ break ;
192
+ case Entity::BlendMode::kDestinationATop :
193
+ color0.dst_alpha_blend_factor = BlendFactor::kSourceAlpha ;
194
+ color0.dst_color_blend_factor = BlendFactor::kSourceAlpha ;
195
+ color0.src_alpha_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
196
+ color0.src_color_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
197
+ break ;
198
+ case Entity::BlendMode::kXor :
199
+ color0.dst_alpha_blend_factor = BlendFactor::kOneMinusSourceAlpha ;
200
+ color0.dst_color_blend_factor = BlendFactor::kOneMinusSourceAlpha ;
201
+ color0.src_alpha_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
202
+ color0.src_color_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
203
+ break ;
204
+ case Entity::BlendMode::kPlus :
205
+ color0.dst_alpha_blend_factor = BlendFactor::kOne ;
164
206
color0.dst_color_blend_factor = BlendFactor::kOne ;
165
- color0.src_alpha_blend_factor = BlendFactor::kSourceAlpha ;
207
+ color0.src_alpha_blend_factor = BlendFactor::kOne ;
166
208
color0.src_color_blend_factor = BlendFactor::kOne ;
167
209
break ;
210
+ case Entity::BlendMode::kModulate :
211
+ // kSourceColor and kDestinationColor override the alpha blend factor.
212
+ color0.dst_alpha_blend_factor = BlendFactor::kZero ;
213
+ color0.dst_color_blend_factor = BlendFactor::kSourceColor ;
214
+ color0.src_alpha_blend_factor = BlendFactor::kZero ;
215
+ color0.src_color_blend_factor = BlendFactor::kZero ;
216
+ break ;
168
217
}
169
218
desc.SetColorAttachmentDescriptor (0u , std::move (color0));
170
219
}
0 commit comments