问题描述
假设我有一个大的着色器程序,并且只希望渲染特定范围的顶点/三角形。
执行此操作的一些有效方法是什么?哪一个看起来最有前途?
我想出了3种方法,还有其他方法吗?
- 使用命令列表对绘图调用
Draw(position,count)
进行批处理。 (Opengl有glMultiDrawArrays
。)
如果范围是提前知道的,我们就不必担心构建它们所花费的时间。但是,由于某些范围的变化是无法预测的,因此保留所有可能性的命令列表可能是不现实的。
此方法显然减少了在CPU端构造绘制调用的时间,并且我认为这些调用已经告诉GPU不需要进行任何状态更改。
- 在整个缓冲区上调用
Draw
并继续更新每个顶点浮点缓冲区 boolean ,该缓冲区将在无效/有效范围内将输出位置乘以0/1。
这里的好处是只有一次抽奖。但是,我们需要更新缓冲区,并且在更新缓冲区时似乎需要锁定缓冲区...
- 在恒定缓冲区中定义的Powerset。对于n个范围,我们可以使用一个n位常量
mask
与一个静态n位per_vertex_mask
进行比较。如果mask & per_vertex_mask != 0
,则可见顶点。
恒定缓冲区的更新可能比整个顶点缓冲区便宜。但是,此方法的范围数可能太大。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)