GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN始终返回0

时间:2012-02-08 07:55:33

标签: opengl vertex-shader

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

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

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

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

问题在于,我没有得到转换反馈在TRANSFORM_FEEDBACK_BUFFER调用期间向glDrawArrays写任何内容的迹象。我设置了一个监视GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN的查询,并且总是返回0.无论我尝试什么,我似乎都无法获得转换反馈来写任何内容(不要介意任何有意义的内容!)

如果有人对如何获得转换反馈以写任何内容有任何建议,或者我应该检查的事情,请告诉我们!

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

1 个答案:

答案 0 :(得分:2)

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

当然我没有意识到GL_TRANSFORM_FEEDBACK_BUFFER也必须在glBindBuffer之前调用calling glBindBufferBase到正确的缓冲区对象。