32位/64兼容 VC inline 汇编极限优化范例之颜色混合: AlphaBlendPixel

写给底层搬运工看的 : )

__forceinline void AlphaBlendPixel( ULONG& dst_bgra,ULONG src_bgra ){
	register ULONG src_Alpha = ULongToBGRA(src_bgra)->Alpha;
	if( src_Alpha <= 1 )return; // 完全透明的点就不需要处理了
	if( src_Alpha >= 254 ){ dst_bgra = src_bgra; return; }
	__m128i src_alpha, dst_alpha, _mZero = _mm_setzero_si128();
	src_alpha.m128i_u16[0] = src_alpha.m128i_u16[1] = src_alpha.m128i_u16[2] = src_alpha.m128i_u16[3] = (USHORT)src_Alpha;
	dst_alpha.m128i_u64[0] = 0xFF00FF00FF00FF;
	dst_bgra = _mm_packus_epi16(
				_mm_srl_epi16(
					_mm_add_epi16(
						_mm_mullo_epi16( _mm_unpacklo_epi8( _mm_cvtsi32_si128( dst_bgra ), _mZero),  _mm_sub_epi16( dst_alpha, src_alpha ) ), 
						_mm_mullo_epi16( _mm_unpacklo_epi8( _mm_cvtsi32_si128( src_bgra ), _mZero), src_alpha )
					),
					_mm_cvtsi32_si128( 8 )
				),
				_mZero
			).m128i_u32[0];
}

转载请注明出处。多谢.


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值