@@ -159,12 +159,61 @@ class ContentContext {
159159 color0.src_alpha_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
160160 color0.src_color_blend_factor = BlendFactor::kOneMinusDestinationAlpha ;
161161 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 :
163187 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 ;
164206 color0.dst_color_blend_factor = BlendFactor::kOne ;
165- color0.src_alpha_blend_factor = BlendFactor::kSourceAlpha ;
207+ color0.src_alpha_blend_factor = BlendFactor::kOne ;
166208 color0.src_color_blend_factor = BlendFactor::kOne ;
167209 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 ;
168217 }
169218 desc.SetColorAttachmentDescriptor (0u , std::move (color0));
170219 }
0 commit comments