慢速转换基于反馈的拣货?

时间:2017-10-23 16:40:51

标签: c++ opengl picking transform-feedback

我尝试使用transform feedback实施拣选例程。目前它工作正常,但问题是速度非常低(慢于GL_SELECT)。

现在如何运作:

  1. 使用带有偏移量的glBindBufferRange()绑定TBO(开头为0)。
  2. 使用glBufferSubData()重置内存(TF变化结构的大小)(确保选择正确)。主要问题在这里。
  3. 使用几何着色器绘制对象,以检查与拾取光线的交点。如果找到交集,则着色器将此写入TF变化(最初它没有交集,请参阅步骤2)。
  4. 增加偏移量并转到下一个对象的第1步。
  5. 所以,最后我有一组每个对象的拣选数据。

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

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

    有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果要做的只是清除缓冲区的区域use glClearBufferSubData。话虽如此,不清楚为什么你需要清除它,而不是只是覆盖那里的东西。

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