renderer: internal support for blend modes

This commit is contained in:
2024-09-10 10:36:00 +10:00
parent f8a80c6b38
commit 667201fe49
5 changed files with 227 additions and 26 deletions

View File

@ -0,0 +1,23 @@
public enum BlendMode: Hashable {
case none
case normal
case premultiplied
case additive
case screen
case multiply
case subtract
}
internal extension BlendMode {
var function: BlendFunc {
switch self {
case .none: .off
case .normal: .on(src: .srcAlpha, dst: .oneMinusSrcAlpha, equation: .add)
case .premultiplied: .on(src: .one, dst: .oneMinusSrcAlpha, equation: .add)
case .additive: .on(src: .srcAlpha, dst: .one, equation: .add)
case .screen: .on(src: .one, dst: .oneMinusSrcColor, equation: .add)
case .multiply: .on(src: .dstColor, dst: .one, equation: .add)
case .subtract: .on(src: .oneMinusSrcAlpha, dst: .one, equation: .subtract)
}
}
}