如何解决在Direct3D中绘制顶点范围的方法
假设我有一个大的着色器程序,并且只希望渲染特定范围的顶点/三角形。
执行此操作的一些有效方法是什么?哪一个看起来最有前途?
我想出了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 举报,一经查实,本站将立刻删除。