游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4661|回复: 12

先Present()后Render()如何?

[复制链接]

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2006-2-4 13:10:00 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-2-4 13:22:00 | 显示全部楼层

Re:先Present()后Render()如何?

应该不错

21

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2006-2-6 21:29:00 | 显示全部楼层

Re:先Present()后Render()如何?

没看懂...
PRESENT()不就是翻页?

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2006-2-6 21:48:00 | 显示全部楼层

Re:先Present()后Render()如何?

楼主的那个的确是最好的顺序

21

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2006-2-9 21:36:00 | 显示全部楼层

Re:先Present()后Render()如何?

哦~看懂了,确实

3

主题

72

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2006-2-10 11:53:00 | 显示全部楼层

Re:先Present()后Render()如何?

说是这样说,
但是简单的这样做,没什么意义。
问题的关键在于为什么

Present()和EndScene()距离远一些,这样可以使CPU和GPU尽量并行工作。

另外cpu和gpu并行工作上,并不是简单的有定论的。

34

主题

629

帖子

629

积分

高级会员

Rank: 4

积分
629
发表于 2006-2-10 13:56:00 | 显示全部楼层

Re:先Present()后Render()如何?

简单说一下:

CPU和GPU在渲染过程中,多数时间是异步工作的。D3D层(Device接口)提交渲染指令放入Driver层维护的队列中,之后立即返回,GPU从队列中取出指令执行,只有在执行到Present的时候(实际上还有其他情况,先不讨论),CPU要等到队列中所有的指令执行完毕才会返回,强制同步一次,通常要等很久,所以我们要把这段等待的时间拿来做别的,通常是AI,或者是可见性判断之类,这样会把CPU空闲时间降到最低。

如果是这样的顺序
Refresh();
BeginScene();
Render();
EndScene();
Present();
不仅在EndScene到Present之间CPU会有很长空闲时间,在Present到下一个BeginScene之间GPU也会有很大空闲,对于AI比较复杂的游戏影响会很明显,对于简单的图形Demo影响不大

不知道说明白没

3

主题

72

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2006-2-11 16:25:00 | 显示全部楼层

Re:先Present()后Render()如何?

说是说明白了,但我还有些疑问。
present 翻页肯定要等艘有的渲染操作完成,这个很正常。
问题在于最后的一个draw的操作你再干什么。
如果是一个巨大无比的模型。。。那么显然要等等了。
但如果是一个很简单的操作呢?

另外
D3D层(Device接口)提交渲染指令放入Driver层维护的队列中,之后立即返回。
是这样的,可是这个队列最多能有多大??
这方面的情况是怎样的呢。文档里好像没有提及阿。
如果这个队列满了,也显然是要停下来了。

3

主题

72

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2006-2-28 17:26:00 | 显示全部楼层

Re:先Present()后Render()如何?

做了大量测试兵查阅了相关文章,
结论是:
先Present()后Render()会有好处
的说法实在是非常幼稚(即使是大规模逻辑计算)。

标准流程中的
render()
present()
就是好的。

应该说present()和present()之间的距离远点比较好。

46

主题

281

帖子

313

积分

中级会员

Rank: 3Rank: 3

积分
313
QQ
发表于 2006-2-28 21:50:00 | 显示全部楼层

Re:先Present()后Render()如何?

楼上真是高手,看来creamymami在分裂细胞4小组算是白混了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 07:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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