我正在尝试使用OpenGL的转换反馈功能。我写了一个极简的顶点着色器,并用它创建了一个程序(没有片段着色器)。我还用一个输出变量名称调用了glTransformFeedbackVaryings,并将缓冲区模式设置为GL_INTERLEAVED_ATTRIBS。着色器程序编译和链接良好(我还确保链接后,glTransformFeedbackVaryings调用。
我使用glEnableVertexAttribArray启用了一个顶点attrib数组,为泛型顶点属性分配了一个glVertexAttribPointer,并为该属性调用了一个glVertexAttribPointer。
我已经将TRANSFORM_FEEDBACK_BUFFER绑定到另一个缓冲区,并创建了一个足够大的数据存储区,以便在转换反馈期间编写。
然后启用转换反馈并调用glDrawArrays(GL_POINTS, 0, 1000)。在整个程序运行过程中,我没有遇到任何崩溃。
问题是,在TRANSFORM_FEEDBACK_BUFFER调用期间,没有任何迹象表明转换反馈正在向glDrawArrays写入任何内容。我设置了一个监视GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN的查询,它总是返回0。无论我如何尝试,我似乎无法得到转换反馈来写任何东西(更别提任何有意义的东西了!)
如果有人建议我如何得到转换反馈来写任何东西,或者我应该检查的东西,请告诉我!
注意:我不能使用转换反馈对象,也不使用顶点数组对象。
发布于 2012-02-09 16:54:15
我想问题最终是我打给glBindBufferBase的方式。考虑到在最初的问题中看不到这个函数调用,可能是我完全忽略了它。
当然,我没有意识到GL_TRANSFORM_FEEDBACK_BUFFER也必须通过调用glBindBuffer来绑定到calling glBindBufferBase之前正确的缓冲区对象。
https://stackoverflow.com/questions/9189521
复制相似问题