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格式转换?
谢谢!