我正在尝试使用转换反馈来实现拾取例程。目前它工作正常,但问题是速度非常低(慢于GL_SELECT
)。
现在如何运作:
- 使用 with offset 绑定 TBO
glBindBufferRange()
(开头为 0)。 glBufferSubData()
使用(以确保拾取正确)重置内存(TF 变化结构的大小)。主要问题在这里。- 使用几何着色器绘制对象,该着色器检查与拾取射线的交点。如果找到交集,着色器将其写入 TF 变化(最初它没有交集,请参见步骤 2)。
- 增加偏移量并使用下一个对象转到步骤 1。
所以,最后我有一个为每个对象挑选数据的数组。
问题是如何避免调用glBufferSubData()
每次迭代?可能的解决方案(但我不知道如何实现它们)是:
- 只写一个 TF 变化。所以没有必要重置其他
- 用任何其他方式重置数据
有任何想法吗?