中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 6079|回复: 5

关于SetRenderTarget的一点问题

[复制链接]
发表于 2011-12-5 22:58:11 | 显示全部楼层 |阅读模式
SetRenderTarget是否会造成GPU的CommandBuffer的Flush?

如果有这样的一个渲染流程:

方法一:
A,B,C分别是同样大小的RenderTexture, a,b,c分别对应其RenderSurface,
SetRenderTarget(a)
Draw...
SetRenderTarget(b)
SetTexture(A)
Draw...
SetRenderTarget(c)
SetTexture(B)
Draw...
...其他地方使用C,

方法二:
可否用这样的流程替代:
SetRenderTarget(a)
Draw...
SetRenderTarget(b)
SetTexture(A)
Draw...
SetRenderTarget(a)
SetTexture(b)
Draw...
...其他地方使用A,

方法二比方法一节省1张RT,但是是否会造成性能比方法一差一点?
即:SetRenderTarget是否会造成GPU的CommandBuffer的Flush?或者在哪一些情况下是否会flush command buffer?
thank you...


发表于 2011-12-5 23:40:47 | 显示全部楼层
不会,因为这些命令是提交到 D3D RT 的 command buffer 中,自然会保证调用顺序,方法二是正确的做法。
发表于 2011-12-6 08:14:26 | 显示全部楼层
过多的setrendertarget对效率影响非常大
 楼主| 发表于 2011-12-6 10:13:56 | 显示全部楼层
本帖最后由 sincrystal 于 2011-12-6 10:16 编辑

我记得以前在什么地方看过,SetRenderTarget会造成GPU的CommandBuffer在某一些情况下的flush(比如重复交换设置时会flush,但是不交换设置时就不flush了),但是不是很确定,所以在后处理系统优化的时候,在考虑这个问题.

thank you..呵呵.
发表于 2011-12-7 07:19:11 | 显示全部楼层
除非你回读 rt 数据。
发表于 2011-12-21 12:32:58 | 显示全部楼层
用MRT不是更好么 d9以后就支持了 可惜opengl es 不支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2018-2-25 18:05 , Processed in 0.111575 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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