基于S3C6410 的windows ce 6.0 DirectDraw使用三缓冲

      S3c6410 使用DirectDraw画图时老是闪屏,网上收了好久说是使用双缓冲就可以解决闪屏问题,搞了2天图画多了还是会闪屏,帧数也达不到要求,很是郁闷!

     在网上寻觅了好久说是可以使用三缓冲技术,终于解决了闪屏问题,动画帧还能达到34帧。还要感谢《M8SDK教程-游戏开发心得》作者gzdanny。

    使用三缓冲代码如下:

     其实只要把ddsd.dwBackBufferCount的值由原来的1改成2就是使用3缓冲,这样DDraw会自动为我们提供2BackBuffer交替使用,同时省去了上一次Flip的等待时间.三缓冲比双缓冲虽然要多消耗一些资源,但是依据微软的说法,速度能再快20%左右,是一种比较好的方案。

    使用双缓冲还闪屏,据我个人猜测可能是在flip返回DD_OK的时候,6410其实还没有真正的把图片画出去,只把执行命令放进2D引擎的32-word command FIFO,由于6410有一个16KB的指令Cache,程序执行的速度远远高于SDRAM拷贝的的速度,这时你再使用Blt数据块拷贝还是把命令放进FIFO,多执行几个Blt再flip时就要等待上一次的指令执行完才能再次画图,这样一来程序会有一个比较长等待时间因此降低效率,使用三缓冲可以有效降低此过程的等待时间。

    但ddsd.dwBackBufferCount=3在速度上不会提升,可能是受到SDRAM拷贝速率的影响。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值