[iOS] fix additive, normal blending (#2822)

This commit is contained in:
Byeong Gwan 2025-05-05 18:57:51 +09:00 committed by GitHub
parent ae8c4792ba
commit 123426d3e3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -294,7 +294,8 @@ fileprivate extension BlendMode {
case SPINE_BLEND_MODE_NORMAL: case SPINE_BLEND_MODE_NORMAL:
return premultipliedAlpha ? .one : .sourceAlpha return premultipliedAlpha ? .one : .sourceAlpha
case SPINE_BLEND_MODE_ADDITIVE: case SPINE_BLEND_MODE_ADDITIVE:
return .sourceAlpha // additvie only needs sourceAlpha multiply if it is not pma
return premultipliedAlpha ? .one : .sourceAlpha
case SPINE_BLEND_MODE_MULTIPLY: case SPINE_BLEND_MODE_MULTIPLY:
return .destinationColor return .destinationColor
case SPINE_BLEND_MODE_SCREEN: case SPINE_BLEND_MODE_SCREEN:
@ -304,12 +305,13 @@ fileprivate extension BlendMode {
} }
} }
func sourceAlphaBlendFactor(premultipliedAlpha: Bool) -> MTLBlendFactor { var sourceAlphaBlendFactor: MTLBlendFactor {
// pma and non-pma has no-relation ship with alpha blending
switch self { switch self {
case SPINE_BLEND_MODE_NORMAL: case SPINE_BLEND_MODE_NORMAL:
return premultipliedAlpha ? .one : .sourceAlpha return .one
case SPINE_BLEND_MODE_ADDITIVE: case SPINE_BLEND_MODE_ADDITIVE:
return .sourceAlpha return .one
case SPINE_BLEND_MODE_MULTIPLY: case SPINE_BLEND_MODE_MULTIPLY:
return .oneMinusSourceAlpha return .oneMinusSourceAlpha
case SPINE_BLEND_MODE_SCREEN: case SPINE_BLEND_MODE_SCREEN:
@ -355,7 +357,7 @@ fileprivate extension MTLRenderPipelineColorAttachmentDescriptor {
func apply(blendMode: BlendMode, with premultipliedAlpha: Bool) { func apply(blendMode: BlendMode, with premultipliedAlpha: Bool) {
isBlendingEnabled = true isBlendingEnabled = true
sourceRGBBlendFactor = blendMode.sourceRGBBlendFactor(premultipliedAlpha: premultipliedAlpha) sourceRGBBlendFactor = blendMode.sourceRGBBlendFactor(premultipliedAlpha: premultipliedAlpha)
sourceAlphaBlendFactor = blendMode.sourceAlphaBlendFactor(premultipliedAlpha: premultipliedAlpha) sourceAlphaBlendFactor = blendMode.sourceAlphaBlendFactor
destinationRGBBlendFactor = blendMode.destinationRGBBlendFactor destinationRGBBlendFactor = blendMode.destinationRGBBlendFactor
destinationAlphaBlendFactor = blendMode.destinationAlphaBlendFactor destinationAlphaBlendFactor = blendMode.destinationAlphaBlendFactor
} }