游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2387|回复: 6

DDraw求救

[复制链接]

10

主题

95

帖子

95

积分

注册会员

Rank: 2

积分
95
QQ
发表于 2006-5-17 22:52:00 | 显示全部楼层 |阅读模式
这个问题已经有一定进展,请直接看4楼
/////////////////////////////////////////////////////////////
请问在DirectDraw下设置显示模式时,设置颜色深度是否只负责主表面的颜色深度,而离屏表面还是默认颜色深度?
因为我最近16位的DDraw代码中涉及从主表面blit到离屏表面,发生了错位(表面第一行的像素只在屏幕第一行2/3处就到了尽头,屏幕第一行的后1/3是表面第二行的像素了,导致图像一片混乱),目测是3:2的错位,所以猜想主表面深度是16的同时,离屏表面的深度是24,所以发生了3:2的错位
想了好几天了,大哥们救救我啊,如果猜想是对的,那怎么把离屏也设置为16位的,如果不对,错位又是什么原因呢?
////////////////////////////////////////////////////////////

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2006-5-17 23:50:00 | 显示全部楼层

Re:DDraw求救

不是全屏模式的时候是会受到系统默认设置的影响的。

不过 应该是主表面色深无法改变,很久没用过ddraw,不一定准确。

而且,你应该可以通过取得表面的desc直接判断出来呀。

10

主题

95

帖子

95

积分

注册会员

Rank: 2

积分
95
QQ
 楼主| 发表于 2006-5-18 19:56:00 | 显示全部楼层

Re:DDraw求救

谢谢楼上的,我调了一下,发现主表面和离屏的颜色深度是一样的,只有另想办法了

10

主题

95

帖子

95

积分

注册会员

Rank: 2

积分
95
QQ
 楼主| 发表于 2006-5-18 20:55:00 | 显示全部楼层

Re:DDraw求救

对问题有了更深入的了解,真正的原因应该是这样的,我为了实现一个特效,从一个 离屏表面 到 lpDDSBack 进行位拷贝, 位拷贝是自己写的, 但检查后才知道离屏表面和lpDDSBack的宽距(lPitch)不同(他们颜色深度和宽度(Width)都相同),所以发生了错位,但是系统自己写的blit却是很正常的运行,不知道他是怎么做的

64

主题

855

帖子

856

积分

高级会员

Rank: 4

积分
856
QQ
发表于 2006-5-19 09:42:00 | 显示全部楼层

Re:DDraw求救

Blit就是一个memcpy()

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2006-5-19 16:43:00 | 显示全部楼层

Re:DDraw求救

我的做法是自己建立一块BackSurface(建立在系统内存中,不是显存中),然后将所有的图形绘制在这个Surface里面,不管是自己作拷贝功能还是用MMX都行,然后需要Flip之前将这个Surface用Blt拷贝到真正的BackSurface中。同时,如果你使用了MMX(SSE)作拷贝,因为这些是CPU指令,在内存到内存之间拷贝的速度很快,但在内存到显存拷贝却很满,所以我们可以将绘制图形在自己定义的BackSurface中,然后拷贝到真正的BackSurface(执行一次内存到显存的拷贝)。你的问题可以使用这种方法,可以自己编写拷贝函数。

10

主题

95

帖子

95

积分

注册会员

Rank: 2

积分
95
QQ
 楼主| 发表于 2006-5-19 20:27:00 | 显示全部楼层

Re:DDraw求救

太感谢了,完全正常了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 12:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表