DirectDraw在PrimarySurface和OverlaySurface之间blt数据的问题

Sodar 2009-04-12 07:25:36
先简单说一下程序的功能:
从Primary Surface上取得一个矩形区域的图像,Blit到Overlay Surface上。大概流程是这样的:
1. Create Primary Surface...
2. Create Overlay Surface...
3. 用Blt/BltFast把数据从PrimarySurface Blit 到OverlaySurface上。

这应该是一个不太复杂的程序,但是在实际测试中发现不同的显卡之间差别特别大,
* 在一个ATI的显卡上可以创建RGB32格式的Overlay Surface,所以工作完全正常;
* 在一个很老的显卡上,可以创建成功这两个Surface,其中Overlay为YUY2格式,Blt数据的时候返回的错误是DDERR_UNSUPPORTED。
* 在Vmware虚拟机上,可以创建成功这两个Surface,其中overlay为UYVY格式,Blt没有错误,但是得到的图像不正常,回来Lock以后查看了一下内存,发现Overlay Surface内存中的数据与Primary Surface的完全一样,也是RGB格式的。所以显示就肯定不正常了。


我也是刚接触DirectDraw,有些概念不太清楚,在此一并向大家请教:
1. Primary Surface的数据是不是一定是RGB格式的?有没有例外?
2. 如果显卡支持像素格式的自动转换(应该是DDCAPS_BLTFOURCC吧?),是不是意味这Blt的时候自动完成RGB<->YUV格式转换?

谢谢!
...全文
297 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
IONPhantom 2009-04-17
  • 打赏
  • 举报
回复
我回了你另一个帖子了,估计得你自己动手了
Sodar 2009-04-17
  • 打赏
  • 举报
回复
谁能告诉我 DDCAPS_BLTFOURCC 到底有什么用?
Sodar 2009-04-17
  • 打赏
  • 举报
回复
谢谢P_hantom兄弟
这么多天只有你一个人关注我的问题,555.....

不过有个好消息是,分都是你的啦!
Sodar 2009-04-15
  • 打赏
  • 举报
回复
看来希望通过硬件实现是没戏了,只能写代码实现RGB->YUV转换了。。。
Sodar 2009-04-14
  • 打赏
  • 举报
回复
谢谢P_hantom兄弟支持。

还有哪位高人发表点看法吧?
IONPhantom 2009-04-13
  • 打赏
  • 举报
回复
刚才看了一下,确实支持YUV,这下你可惨了...
IONPhantom 2009-04-13
  • 打赏
  • 举报
回复
可能是不支持转换
Sodar 2009-04-13
  • 打赏
  • 举报
回复
网上能够找到一些YUV->RGB转换的很精彩的文章,如:
http://blog.csdn.net/housisong/archive/2007/11/05/1866970.aspx

但是RGB->YUV的资料比较少啊,应该在编码等方面都要用到的吧?
Sodar 2009-04-13
  • 打赏
  • 举报
回复
要是不支持那YUV就好了,我试的几个Intel显卡都只能创建YUV格式的。。。如果需要软件实现RGB->YUV转换过程的话那就太影响效率了!

IONPhantom 2009-04-12
  • 打赏
  • 举报
回复
1.只有RGB格式.
2.不知道,DDraw支持 YUV 么?

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧