在Direct3D中绘制顶点范围的方法

问题描述

假设我有一个大的着色器程序,并且只希望渲染特定范围的顶点/三角形。

执行此操作的一些有效方法是什么?哪一个看起来最有前途?

我想出了3种方法,还有其他方法吗?

  1. 使用命令列表对绘图调用Draw(position,count)进行批处理。 (Opengl有glMultiDrawArrays。)

如果范围是提前知道的,我们就不必担心构建它们所花费的时间。但是,由于某些范围的变化是无法预测的,因此保留所有可能性的命令列表可能是不现实的。

此方法显然减少了在CPU端构造绘制调用的时间,并且我认为这些调用已经告诉GPU不需要进行任何状态更改。

  1. 在整个缓冲区上调用Draw并继续更新每个顶点浮点缓冲区 boolean ,该缓冲区将在无效/有效范围内将输出位置乘以0/1。

这里的好处是只有一次抽奖。但是,我们需要更新缓冲区,并且在更新缓冲区时似乎需要锁定缓冲区...

  1. 在恒定缓冲区中定义的Powerset。对于n个范围,我们可以使用一个n位常量mask与一个静态n位per_vertex_mask进行比较。如果mask & per_vertex_mask != 0,则可见顶点。

恒定缓冲区的更新可能比整个顶点缓冲区便宜。但是,此方法的范围数可能太大。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...