mirror of
https://github.com/GayPizzaSpecifications/voxelotl-engine.git
synced 2025-08-03 05:10:57 +00:00
88 lines
3.3 KiB
Swift
88 lines
3.3 KiB
Swift
import Metal
|
|
|
|
internal extension BlendFunc {
|
|
func setBlend(colorAttachment: inout MTLRenderPipelineColorAttachmentDescriptor) {
|
|
switch self {
|
|
case .off:
|
|
colorAttachment.isBlendingEnabled = false
|
|
case .on(let srcFactor, let dstFactor, let equation):
|
|
colorAttachment.isBlendingEnabled = true
|
|
colorAttachment.rgbBlendOperation = .init(equation)
|
|
colorAttachment.alphaBlendOperation = .init(equation)
|
|
colorAttachment.sourceRGBBlendFactor = .init(srcFactor)
|
|
colorAttachment.sourceAlphaBlendFactor = .init(srcFactor)
|
|
colorAttachment.destinationRGBBlendFactor = .init(dstFactor)
|
|
colorAttachment.destinationAlphaBlendFactor = .init(dstFactor)
|
|
case .separate(let srcColor, let srcAlpha, let dstColor, let dstAlpha, let equColor, let equAlpha):
|
|
colorAttachment.isBlendingEnabled = true
|
|
colorAttachment.rgbBlendOperation = .init(equColor)
|
|
colorAttachment.alphaBlendOperation = .init(equAlpha)
|
|
colorAttachment.sourceRGBBlendFactor = .init(srcColor)
|
|
colorAttachment.sourceAlphaBlendFactor = .init(srcAlpha)
|
|
colorAttachment.destinationRGBBlendFactor = .init(dstColor)
|
|
colorAttachment.destinationAlphaBlendFactor = .init(dstAlpha)
|
|
}
|
|
}
|
|
}
|
|
|
|
internal extension MTLBlendOperation {
|
|
init(_ equation: BlendFuncEquation) {
|
|
self = switch equation {
|
|
case .add: .add
|
|
case .subtract: .subtract
|
|
case .reverseSubtract: .reverseSubtract
|
|
case .min: .min
|
|
case .max: .max
|
|
}
|
|
}
|
|
}
|
|
|
|
internal extension MTLBlendFactor {
|
|
init(_ source: BlendFuncSourceFactor) {
|
|
self = switch source {
|
|
case .zero: .zero
|
|
case .one: .one
|
|
case .srcColor: .sourceColor
|
|
case .oneMinusSrcColor: .oneMinusSourceColor
|
|
case .srcAlpha: .sourceAlpha
|
|
case .oneMinusSrcAlpha: .oneMinusSourceAlpha
|
|
case .dstColor: .destinationColor
|
|
case .oneMinusDstColor: .oneMinusDestinationColor
|
|
case .dstAlpha: .destinationAlpha
|
|
case .oneMinusDstAlpha: .oneMinusDestinationAlpha
|
|
case .srcAlphaSaturate: .sourceAlphaSaturated
|
|
/*
|
|
case .constantColor: .blendColor
|
|
case .oneMinusConstantColor: .oneMinusBlendColor
|
|
case .constantAlpha: .blendAlpha
|
|
case .oneMinusConstantAlpha: .oneMinusBlendAlpha
|
|
*/
|
|
case .src1Color: .source1Color
|
|
case .oneMinusSrc1Color: .oneMinusSource1Color
|
|
case .src1Alpha: .source1Alpha
|
|
case .oneMinusSrc1Alpha: .oneMinusSource1Alpha
|
|
}
|
|
}
|
|
|
|
init(_ destination: BlendFuncDestinationFactor) {
|
|
self = switch destination {
|
|
case .zero: .zero
|
|
case .one: .one
|
|
case .srcColor: .sourceColor
|
|
case .oneMinusSrcColor: .oneMinusSourceColor
|
|
case .srcAlpha: .sourceAlpha
|
|
case .oneMinusSrcAlpha: .oneMinusSourceAlpha
|
|
case .dstColor: .destinationColor
|
|
case .oneMinusDstColor: .oneMinusDestinationColor
|
|
case .dstAlpha: .destinationAlpha
|
|
case .oneMinusDstAlpha: .oneMinusDestinationAlpha
|
|
/*
|
|
case .constantColor: .blendColor
|
|
case .oneMinusConstantColor: .oneMinusBlendColor
|
|
case .constantAlpha: .blendAlpha
|
|
case .oneMinusConstantAlpha: .oneMinusBlendAlpha
|
|
*/
|
|
}
|
|
}
|
|
}
|