opengl - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 始终返回 0

标签 opengl vertex-shader

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

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

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

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

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

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

注意:我无法使用变换反馈对象,也没有使用顶点数组对象。

最佳答案

我认为问题最终出在我如何调用glBindBufferBase。鉴于我在原始问题中看不到这个函数调用,可能是我完全省略了它。

当然,我没有意识到在调用 glBindBufferBase 之前,GL_TRANSFORM_FEEDBACK_BUFFER 还必须通过调用 glBindBuffer 绑定(bind)到正确的缓冲区对象>.

关于opengl - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 始终返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9189521/

相关文章:

c++ - 在 OS X 上的 Qt 4.8.6 中更改 QGLWidgets 的 OpenGL 上下文版本

无法再 ctrl-c 我的 SDL 应用程序

unity-game-engine - 球面映射

opengl - 在 OpenGL 的顶点着色器中获取元素 ID

javascript - 使用webgl调用p5.js的createcanvas方法出错

c++ - GLSL/OpenGL FBO 不会解除绑定(bind)

c++ - QGraphicsScene : OpenGL with fallback

windows - 模糊的 Qt 快速文本

opengl - 优化 GLSL 中的 2D 模型 View 转换

javascript - 如何在模型 View 投影广告牌顶点着色器中保留旋转和缩放变换?