wince5下directdraw初体验

嵌入式操作系统

57人已加入

描述

 

  因项目下一步应用的需求,需要用directdraw来实现相应功能,因此先行做初步尝试,建立一个感性的认识。

  众所周知wince5支持directdraw,只是和PC下的还是有所不同的,在学习directdraw的时候就以public下的mosquito为例子进行学习,要让这个程序在wince5下跑起来,还是要做一点改动的。

  实现前提:

  (1)要加入directdraw组件

  (2)定制系统并生成SDK,并用此SDK编译应用程序

  (3)链接gxguid.lib,网上说的还需要uuid.lib和ddraw.lib,实际上在此例子中是不需要的,原因在下面描述。

  修改

  (1)在运行到DirectDrawCreate时会报0xc0000005错误,原因可能与ddraw.lib有关。用从 ddraw.dll动态获取DirectDrawCreate指针来调用的方法,因此ddraw.lib不再需要链接。而在此例中,没有其它的uuid使用,因此uuid.lib也不需要进行链接。

  (2)DirectDrawCreate的第二个参数在使用上面的办法获取后,要由LPDIRECTDRAW改为LPDIRECTDRAW4

  (3)执行CreateSurface创建overlay surface失败,原因有两个,如下

  主要原因:显示驱动ddraw功能有错,改用另一个BSP带的显示驱动问题解决,需要对两个驱动进行比较找出问题所在。

  次要原因:dwBackBufferCount由2改为1,为什么只能有一个buffer还需要深入了解。

  (4)经过上述修改图片可以动态显示,但底色没有透明,去掉ddpfOverlayFormats中关于YUV的两个格式,只保留RGB565和RGBA555两种。

  (5)前景色为绿色,而不是原有的黄色,估计与驱动中颜色索引有关,待深入了解。

  从此例子来看,directdraw开发是先要创建一个directdraw对象,然后创建prime surface和overlay surface,通过surface的操作显示图片来达到动画效果。

  附:MOSQUITO的基本流程

  1、创建窗口

  2、创建directdraw实例对象

  3、设置屏幕为Normal模式

  4、创建主表面

  5、判断驱动是不否有overlay功能

  6、创建overlay表面

  7、加载位图资源

  8、配置overlay表面

  9、设置计时器,循环变换位置并显示

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分