游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3636|回复: 14

求教一个directdraw的问题。

[复制链接]

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2004-11-13 21:48:00 | 显示全部楼层 |阅读模式
      我用vb60调用directx7,想实现半透明效果。
      我用的方法是直接改写显存,计算每一个像素的RGB值,再合成新的RGB值(getlockedpixel和setlockedpixel)。
      可是,我发现这样速度慢的要命,640x480的两幅图片,如此处理,只能达到每秒1帧左右的速度,我晕。
      我一开始认为可能是我的算法有问题,于是试试只复制显存,不计算,这样也比较慢!而且每过几帧就有一帧停顿很长时间,不知道为什么。
      我又认为是频繁的lock\unlock一定是影响速度的主要原因,于是只是每次lock\unlock,不复制也不计算,但这样却很快,这种假设排除了。
      综上所述,我认为是数组运算本身就很慢,640x480的数组要操作好长时间。这个是vb本身的问题吗?请各位高手指点一下。另外,我是个外行,以上说错了请指出,不要笑话我哦。 [em24]

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2004-11-13 22:12:00 | 显示全部楼层

Re:求教一个directdraw的问题。

可能还是你算法上的问题吧

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2004-11-13 22:24:00 | 显示全部楼层

Re: 求教一个directdraw的问题。

lock显存,在取数据就是慢。
很简单的方法就能测试出来

aaa = GetTickCount();
lock()
取数据
unlock()
GetTickCount()-aaa;

bbb = GetTickCount();
计算新的数据
GetTickCount()-bbb;

ccc = GetTickCount();
lock
填写数据
unlock
GetTickCount()-ccc;

GetTickCount()-aaa = 总耗时间

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2004-11-13 22:26:00 | 显示全部楼层

不是算法的问题

我已经说过了,只是复制显存数组依然很慢,就算是算法好了,每秒也没多少帧。 [em24]

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2004-11-13 22:29:00 | 显示全部楼层

Re: 不是算法的问题

Utunnels: 不是算法的问题

我已经说过了,只是复制显存数组依然很慢,就算是算法好了,每秒也没多少帧。 [em24]


我回复的第一句话,就是从显存取数据,就是很慢。建议不要用这样的方法。

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2004-11-13 22:32:00 | 显示全部楼层

Re: Re: 求教一个directdraw的问题。

lock显存,在取数据就是慢。
很简单的方法就能测试出来

哦,耗时我已测试过了。我想知道怎样解决,请教一下啊。
我的qq 5831530,加我说明一下原因,谢谢。
[em1]

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2004-11-13 22:47:00 | 显示全部楼层

Re:求教一个directdraw的问题。

好象使用数据缓冲BUFFER 然后翻转到显示就可以了

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2004-11-13 22:51:00 | 显示全部楼层

Re: Re: Re: 求教一个directdraw的问题。

Utunnels: Re: Re: 求教一个directdraw的问题。


哦,耗时我已测试过了。我想知道怎样解决,请教一下啊。
我的qq 5831530,加我说明一下原因,谢谢。
[em1]


用这个方法来做透明处理,我的能力太差,帮不你了。
建议最好不要用此方法。

17

主题

65

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2004-11-13 22:58:00 | 显示全部楼层

Re:求教一个directdraw的问题。

不要用Filp了,不要用有隶属页面的方法,这样都会很慢的。你建立一个和主表面同大的页面,直接BLT在其上就可以了。
还有就是,把所有除主页面外的页面建在内存之中,这样可以加速。把主页面建在显存中,这样也可以提速。不一定要汇编,现在的机子只要是1G以上的,都可以很快的。
当然可以用一些优化的方法,用32级进行半透明等等。具体的我也有点忘了。
现在D3D9做二维也可以,而且做半透明,缩放等特效也很不错,而且D3D9的表面和纹理可以读很多种格式,比起用DDRAW的用GDI来提图片要好得多。
我也是初学D3D9,不足之处请多多指正。

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2004-11-13 22:59:00 | 显示全部楼层

那么要怎样才好呢?

建议最好不要用此方法。

我也是没办法才用这个方法,总觉得用vb局限性太大了。
请问大家都是用什么方法实现半透明的啊?(c++就不要说了)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 07:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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