【发布时间】:2014-06-09 01:42:32
【问题描述】:
我对使用顶点着色器处理缓冲区而不产生任何渲染输出感兴趣。这是相关的sn-p:
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);
在调用glDrawElements() 之前,这一切正常,这会导致GL_INVALID_FRAMEBUFFER_OPERATION。而glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); 返回GL_FRAMEBUFFER_UNDEFINED。
我认为这是因为我的 GL 上下文没有默认帧缓冲区,并且我没有绑定另一个 FBO。但是,由于我不关心渲染输出并且我启用了GL_RASTERIZER_DISCARD_EXT,所以我认为不需要帧缓冲区。
那么,有没有办法在没有帧缓冲区的情况下使用转换反馈,或者我是否需要生成和绑定帧缓冲区,即使我不关心它的内容?
【问题讨论】:
-
如果您没有绑定 FBO 且没有默认帧缓冲区,您希望
glCheckFramebufferStatus (...)返回什么? 如果 target 是默认帧缓冲区,则返回 GL_FRAMEBUFFER_UNDEFINED,但默认帧缓冲区不存在。 -
我完全惊讶于得到与帧缓冲区相关的错误,因为我的印象是
GL_RASTERIZER_DISCARD_EXT意味着不需要帧缓冲区。因此,我获得了有关帧缓冲区情况的更多信息,并在此处包含了该信息,以防它可能有助于回答问题。