游戏开发论坛

 找回密码
 立即注册
搜索
查看: 16849|回复: 9

glDrawArrays跟glDrawElements相比,有啥不同啊?

[复制链接]

3

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-1-20 20:44:00 | 显示全部楼层 |阅读模式
我看很多测试显卡的代码用的是glDrawElements,但是
很多demo程序里用的glDrawArrays,
除了参数不同,函数名称不同,性能上有啥不一样啊? [em7]

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2007-1-22 10:52:00 | 显示全部楼层

Re:glDrawArrays跟glDrawElements相比,有啥不同啊?

glDrawArrays = DrawPrimitive
glDrawElements = DrawIndexPrimitive

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2007-1-22 13:49:00 | 显示全部楼层

Re:glDrawArrays跟glDrawElements相比,有啥不同啊?

真是要佩服马肝你的才华了!
------------------------------------------------------------------------------------------------------------
比如画一个由2个3角形组成的正方形,左上角坐标是l,t,右下角坐标是r,b

使用glDrawArrays绘制时,画2个三角形,需要这样传:
(l,t),(r,t),(l,b)
(r,t),(r,b),(l,b)

而用glDrawElements画的话可以这样
float coord[4][2]={{l,t},{r,t},{r,b},{l,b}};

绘制时:
0,1,3
1,2,3


也就是说glDrawArrays传输或指定的数据是最终的真实数据,在绘制时效能更好
而glDrawElements指定的是真实数据的调用索引,在内存/显存占用上更节省

3

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2007-1-24 00:16:00 | 显示全部楼层

Re:glDrawArrays跟glDrawElements相比,有啥不同啊?

再请问一下,为啥显卡的demo喜欢用glDrawElements啊?
是不是glDrawElements可以得到硬件加速的支持而glDrawArrays不行啊?

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2007-1-24 09:22:00 | 显示全部楼层

Re:glDrawArrays跟glDrawElements相比,有啥不同啊?

之前就说了

glDrawArrays更快
glDrawElements所占的内存/显存容量更小

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2007-1-24 18:05:00 | 显示全部楼层

Re:glDrawArrays跟glDrawElements相比,有啥不同啊?

楼上,开VBO

1

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2007-1-28 11:15:00 | 显示全部楼层

Re: glDrawArrays跟glDrawElements相比,有啥不同啊?

You must use glDrawElements/glDrawRangeElements (or Use non-indexed tri-strip) to enable post-TnL vertex caches.

34

主题

844

帖子

1755

积分

金牌会员

Rank: 6Rank: 6

积分
1755
发表于 2014-9-18 20:06:41 | 显示全部楼层
本帖最后由 snghun 于 2014-9-20 10:25 编辑

好贴!

虽然这是2007年的帖子, 时间已经过去7年了.
但是BAIDU上依然能搜到这个帖子,证明了这个帖子的存在的意义.

所以我 果断挖坟.

34

主题

844

帖子

1755

积分

金牌会员

Rank: 6Rank: 6

积分
1755
发表于 2014-9-20 10:12:05 | 显示全部楼层
本帖最后由 snghun 于 2014-9-20 10:29 编辑
LangFox 发表于 2007-1-24 11:53
渲染速度上glDrawElements更快,因为索引中共享的顶点只需要计算一次。另外使用索引后数据量比较小,传输耗 ...
---------------------------------------------------------------
"渲染速度上glDrawElements更快,因为索引中共享的顶点只需要计算一次"

错!
共享的顶点只是保存了1份而已,并不是计算了1次.
当索引调用多次的时候, 顶点依然是需要计算多次的.
---------------------------------------------------------------
"数据量比较小,传输耗时低"

错!
glDrawElements函数传输的时候并不是传输索引数据,而是传输顶点数据.
所以传输的数据量同样多.

34

主题

844

帖子

1755

积分

金牌会员

Rank: 6Rank: 6

积分
1755
发表于 2014-9-20 10:16:26 | 显示全部楼层
本帖最后由 snghun 于 2014-9-20 10:22 编辑

glDrawArrays 速度永远快于 glDrawElements .

有些人以为, 使用了索引方式, 传输的时候就能降低传输量.
这是错误的想法.

显卡需要的是顶点坐标(x,y,z).
就算用的是glDrawElements的索引模式, 传输的时候还是要先用索引查出顶点坐标, 然后再传输顶点坐标.
所以glDrawElements其实是工作量增加了,速度自然更慢.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-26 01:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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