M8 AlphaBlt使用方法

原文地址::http://blog.csdn.net/loseleo/article/details/4873649



相关网帖


1.100分求一个IDirectDrawSurface::AlphaBlt的例子----http://topic.csdn.net/u/20100528/13/6e389217-0fb4-4625-b3a6-900bda75057c.html?seed=374487230&r=80027050#r_80027050

AlphaBlend到底能不能进行逐像素的Alpha混合

2.AlphaBlend到底能不能进行像素级的Alpha混合---- http://topic.csdn.net/u/20091021/13/88832508-e01a-405f-acff-91f965439da2.html?seed=1962093460&r=80027131#r_80027131

3.有哪位用过DirectDraw的AlphaBlt----http://bbs.meizu.com/viewthread.php?tid=922873


啥也不说,先上代码

static int nAlpha = 0;
  int step = 10;//这个是用来设置步长的,也就是每次衰减或者增加多少

  DDALPHABLTFX alphatx;
  alphatx.dwSize = sizeof(alphatx);
  
  alphatx.ddargbScaleFactors.alpha = nAlpha;
  pDDSurface->AlphaBlt(NULL, m_pDDSBackground, NULL, DDBLT_WAITNOTBUSY, &alphatx);
  nAlpha = nAlpha + step;// set the alpha value

  if(nAlpha > UCHAR_MAX)
  {
   nAlpha = UCHAR_MAX;
   m_bStartButtonDown =false;//reset the value about transmate
   nAlpha = 0;
   theAPP.m_MainWnd.SwitchScene(1);//Change to scene 1
  }

应该很明显了,就不讲解了。另外提供一个清屏代码

 

{
 DDBLTFX ddbltfx;

 memset(&ddbltfx, 0, sizeof(ddbltfx));
 ddbltfx.dwSize = sizeof(ddbltfx);
 ddbltfx.dwFillColor = 0;
 pSurface->Blt(NULL, NULL, NULL, DDBLT_COLORFILL | DDBLT_WAITNOTBUSY, &ddbltfx);
}




//====================================================

备注::

1>不知道DirectDraw里面的Alphablt跟GDI的AlphaBlend函数比较起来,效率怎么样,那个更快,那个更慢!

2>不知道DirectDraw里面的Alphablt能不能调到系统的硬件加速功能

3>在一些地方看到如果不支持DirectDraw的硬件加速就会调Hardware Emulation Layer,其实也就是GDI接口

文章地址::http://www.cnblogs.com/wangkewei/archive/2009/12/24/1631667.html

下图是DirectDraw的架构,从中我们看到DirectDraw走最右边的一条线时即使用了硬件加速,硬件不支持需要用Software Emulation(软件模拟实现)时会走Hardware Emulation Layer这条线,其实调用的是GDI的API(因为需要CPU去处理,所以叫做软件模拟实现)。

clip_image002[7] 


4》DirectDraw中的AlphaBlt只能指定一个常量的ALPHA值进行混合?不能像AlphaBlend那样做到像素级的混合?


5》Alpha混合很多时候要进行混合的乘法运算,特别是像素级别的混合做的乘法运算就更多了,乘法运算一般很难通过GPU去完成而不需要CPU的参与,从这个层面

是不是可以说Alpha混合很难去用GPU来实现硬件的加速处理,不知道这样理解对不对?!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值