-1

我正在尝试使用转换反馈来实现拾取例程。目前它工作正常,但问题是速度非常低(慢于GL_SELECT)。

现在如何运作:

  1. 使用 with offset 绑定 TBO glBindBufferRange()(开头为 0)。
  2. glBufferSubData()使用(以确保拾取正确)重置内存(TF 变化结构的大小)。主要问题在这里。
  3. 使用几何着色器绘制对象,该着色器检查与拾取射线的交点。如果找到交集,着色器将其写入 TF 变化(最初它没有交集,请参见步骤 2)。
  4. 增加偏移量并使用下一个对象转到步骤 1。

所以,最后我有一个为每个对象挑选数据的数组。

问题是如何避免调用glBufferSubData()每次迭代?可能的解决方案(但我不知道如何实现它们)是:

  • 只写一个 TF 变化。所以没有必要重置其他
  • 用任何其他方式重置数据

有任何想法吗?

4

1 回答 1

1

如果您只想清除缓冲区的某个区域,请使用glClearBufferSubData. 话虽如此,尚不清楚为什么需要清除它,而不仅仅是覆盖那里的内容。

仅供参考:最好通过渲染场景、为对象分配不同的“颜色”以及读取感兴趣的像素来实现拾取。你的方法总是会变慢。

于 2017-10-23T17:27:51.163 回答