2

我正在尝试使用 OpenGL 的变换反馈功能。我编写了一个简约的顶点着色器并用它创建了一个程序(没有片段着色器)。我还glTransformFeedbackVaryings使用单个输出变量名称进行了调用,并将缓冲区模式设置为GL_INTERLEAVED_ATTRIBS. 着色器程序编译和链接正常(我还确保在glTransformFeedbackVaryings调用后链接。

我使用 启用了单个顶点属性数组glEnableVertexAttribArray,为通用顶点属性分配了一个 VBO,并调用glVertexAttribPointer了该属性。

我已经将它绑定TRANSFORM_FEEDBACK_BUFFER到另一个我生成的缓冲区并创建了一个数据存储,该存储应该足够大,可以在转换反馈期间写入。

然后我启用转换反馈并调用glDrawArrays(GL_POINTS, 0, 1000). 在整个程序运行过程中,我没有遇到任何崩溃。

问题是我没有得到任何迹象表明转换反馈在通话TRANSFORM_FEEDBACK_BUFFER期间正在向 写入任何内容。glDrawArrays我设置了一个监控查询,它 GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN总是返回 0。无论我尝试什么,我似乎都无法获得转换反馈来写任何东西(不要介意任何有意义的事情!)

如果有人对我如何获得转换反馈来写任何东西有任何建议,或者我应该检查的东西,请告诉我!

注意:我不能使用变换反馈对象,也不能使用顶点数组对象。

4

1 回答 1

2

我认为问题最终出在我打电话的方式上glBindBufferBase。鉴于我在原始问题中看不到这个函数调用,可能是我完全省略了它。

当然,我没有意识到之前GL_TRANSFORM_FEEDBACK_BUFFER还必须与glBindBuffer对正确缓冲区对象的调用绑定calling glBindBufferBase

于 2012-02-09T16:54:15.003 回答