游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2852|回复: 7

求教一个directdraw的问题。

[复制链接]

10

主题

88

帖子

88

积分

注册会员

Rank: 2

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

         我在别的版快发过这个贴子,热心人很多,只是我的水平……,而大家都是c++高手,
只好移到此版了。
         另外,非vb范畴的不要说了,再就是,我的qq 5831530,希望结交vb爱好者,加我请说明原因,谢谢。



[em1]

6

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2004-11-14 08:30:00 | 显示全部楼层

Re: 求教一个directdraw的问题。

用getlockedpixel肯定慢啊。。。。。vb的计算本来就慢
16位色下我记得我以前做的好像有30多祯啊。。

一般来说要处理整个屏幕还是用 getlockedArray比较快一点

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2004-11-14 14:15:00 | 显示全部楼层

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

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

用getlockedpixel肯定慢啊。。。。。vb的计算本来就慢
16位色下我记得我以前做的好像有30多祯啊。。

一般来说要处理整个屏幕还是用 getlockedArray比较快一点

把我的原码贴上吧
Private Sub testeffect()
On Error GoTo Err
Dim i As Long, j As Long, d As DDSURFACEDESC2, rx As Long, ry As_
Long, v As Long, c As Long, array1() As Byte, array2() As Byte
pics.Lock rectga, d, DDLOCK_WAIT, 0
gapics.Lock rectga, d, DDLOCK_WAIT, 0
pics.GetLockedArray array1()
gapics.GetLockedArray array2()
For i = 0 To d.lPitch - 1
    For j = 0 To 479
    array1(i, j) = ColorMix(array1(i, j), array2(i, j))
    Next j
Next i
gapics.Unlock rectga
pics.Unlock rectga
'''bs.BltFx rectga, gapics, rectga, DDBLT_KEYSRC Or DDBLT_WAIT, bf
bs.Blt rectga, pics, rectga, DDBLT_WAIT
'''bs.DrawText 200, 100, CStr(cnt), False
ps.Blt rectall, bs, rectall, DDBLT_WAIT
Err:
Exit Sub
Unload Me
End Sub

这样了,还是慢,就算那句改array1=array2还是慢,vb处理数组效率也太低了吧。 [em20]

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2004-11-14 16:16:00 | 显示全部楼层

Re:求教一个directdraw的问题。

晕倒,时代在进步,同志!
目前有两种解决方案!
一\最慢的部分用c++写!
二\换d3d,做透明很方便的!

10

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2004-11-14 21:40:00 | 显示全部楼层

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

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

晕倒,时代在进步,同志!
目前有两种解决方案!
一\最慢的部分用c++写!
二\换d3d,做透明很方便的!

ok,我去试试

9

主题

48

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2004-11-14 22:14:00 | 显示全部楼层

Re:求教一个directdraw的问题。

插汇编代码
c++里大部分都用的插入intel的汇编代码

0

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2004-11-17 12:39:00 | 显示全部楼层

Re:求教一个directdraw的问题。

alpha运算是由cpu进行的,应该把要运算的原表面和目标表面都创建在系统内存里

放在显存里是很很很慢的……

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2004-11-17 18:08:00 | 显示全部楼层

Re:求教一个directdraw的问题。

当然这些处理表面是不能放在显存上的,必须放在系统内存上,但是即时放在内存上也是有点慢(不过比显存快多了),我有时想,有些效果难道非得调用C?(比如我想用VB做类似Windows Media Player的可视化效果?)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 09:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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