游戏开发论坛

 找回密码
 立即注册
搜索
查看: 9021|回复: 20

有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

[复制链接]

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
发表于 2006-6-30 16:34:00 | 显示全部楼层 |阅读模式
有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次 “DrawPrimitive”吗?这种方法是不是要比ID3DXSprite快很多?因为ID3DXSprite每画一次地图上的小“瓷砖”就要调用一次“DrawPrimitive”,有多少个小“瓷砖”,它就要“DrawPrimitive”几次,而第一种方法只需要调用一次“DrawPrimitive”。
[em24]

2

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2006-6-30 16:43:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

ID3DXSprite只能做小型demo,在绘制图像数量增加到一定程度的时候,效率下降的很厉害。
在我的机器上,即使是16*16大小,如果成千上万个,帧数也只有十多。
但是填充顶点缓冲,然后一次DrawPrimitive的方式,可以保证效率只和绘制的图像大小有关。

你可以看看HGE里面那个绘制Sprite的Demo,在我的机器上,1000个Sprite透明旋转缩放,帧率在95左右。HGE的2D绘制就是楼主的方式~
我自己尝试用ID3DXSprite绘制,只有一次Begin和End,帧率惨不忍睹,只有10多。

尝试把图片变成128x128的,那个demo的效率同样下降很多,但是依然不输给ID3DXSprite的代码。

1

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2006-6-30 17:17:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

我认得楼上的,呵呵
ID3DX9Sprite没那么慢吧?800*600的画面,5000个16*16的texture,开了半透明,帧率100多。配置是CM1.5G+512M+GMA900集成显卡

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2006-6-30 17:32:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

不明白一点:我看了hge里绘制hare的程序,当我增加到2000个hare和减少到100个hare的时候,cpu的占用率都是70多到80多,cpu的占用率与绘制hare的数量无关吗?都是GPU来处理吗?如果都是用GPU来处理,那70多到80多的cpu占用率耗在哪里呢? [em24]

13

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2006-6-30 19:00:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

DP和DIP的开销是很大的,所以优化的时候要尽量考虑减少Draw的次数。比如把2张64×64的贴图并成一张128×128的贴图,然后使用一次Draw,使用一次状态切换等。对于2D游戏来说,减少Draw的次数包括:
1。使用动态缓存(D3DUSAGE_DYNAMIC)+D3DLOCK_NOOVERWRITE方式批量Draw。
2。使用Programmal Shader,通过寄存器设置方式批量Draw。

帧数的影响由CPU和GPU共同决定,所以对于不同的硬件配置,瓶颈产生的原因也会不通。

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-6-30 19:14:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

显卡支持SM3.0的话就用Instancing吧,方便得很,嘿嘿

13

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2006-6-30 19:14:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

“如果都是用GPU来处理,那70多到80多的cpu占用率耗在哪里呢”
当GPU瓶颈产生后,CPU就会停下来等GPU来处理

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2006-6-30 19:51:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

请问一下DP和DIP是什么来的?jk20012001所说的 Instancing是什么来的?“当GPU瓶颈产生后,CPU就会停下来等GPU来处理”,那cpu是不会工作的啊,也就不会有cpu占用率了啊?

12

主题

76

帖子

76

积分

注册会员

Rank: 2

积分
76
 楼主| 发表于 2006-6-30 20:51:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

DP和DIP我现在猜出来是DrawPrimitive和DrawIndexedPrimitive了,我现在说的已经是draw一次了,是最少的次数了,算不算最大的优化?

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-6-30 21:07:00 | 显示全部楼层

Re:有人试过用VERTEX BUFFER画一屏的2D地图,只需要调用一次

不算
最大的优化在程序的算法上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 20:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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