我有兴趣使用顶点着色器处理缓冲区而不产生任何渲染输出.这是相关的片段:
glUseProgram(program);
GLuint tfOutputBuffer;
glGenBuffers(1, &tfOutputBuffer);
glBindBuffer(GL_ARRAY_BUFFER, tfOutputBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(double)*4*3, NULL, GL_STATIC_READ);
glEnable(GL_RASTERIZER_DISCARD_EXT);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfOutputBuffer);
glBeginTransformFeedbackEXT(GL_TRIANGLES);
glBindBuffer(GL_ARRAY_BUFFER, positionBuffer);
glEnableVertexAttribArray(positionAttribute);
glVertexAttribPointer(positionAttribute, 4, GL_FLOAT, GL_FALSE, sizeof(double)*4, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, elementBuffer);
glDrawElements(GL_TRIANGLES, 1, GL_UNSIGNED_INT, 0);
Run Code Online (Sandbox Code Playgroud)
这可以正常工作,直到glDrawElements()调用,这导致GL_INVALID_FRAMEBUFFER_OPERATION.并glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);返回GL_FRAMEBUFFER_UNDEFINED.
我认为这是因为我的GL上下文没有默认的帧缓冲,我没有绑定另一个FBO.但是,因为我不关心渲染输出并且我已经启用了GL_RASTERIZER_DISCARD_EXT,所以我认为不应该使用帧缓冲.
那么,有没有一种方法可以在没有帧缓冲的情况下使用变换反馈,或者我是否需要生成并绑定帧缓冲,即使我不关心它的内容?