gpt4 book ai didi

opengl - 在没有帧缓冲区的情况下转换反馈?

转载 作者:行者123 更新时间:2023-12-04 19:06:08 26 4
gpt4 key购买 nike

我有兴趣使用顶点着色器来处理缓冲区而不产生任何渲染输出。这是相关的片段:

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 上下文没有默认帧缓冲区,并且我没有绑定(bind)另一个 FBO。但是,由于我不关心渲染的输出并且我启用了 GL_RASTERIZER_DISCARD_EXT ,我认为不需要帧缓冲区。

那么,有没有一种方法可以在没有帧缓冲区的情况下使用变换反馈 ,或者我是否需要生成和绑定(bind)帧缓冲区,即使我不关心它的内容?

最佳答案

根据规范,这实际上是完全有效的行为。

OpenGL 4.4 Core Specification - 9.4.4 Effects of Framebuffer Completeness on Framebuffer Operations

A GL_INVALID_FRAMEBUFFER_OPERATION error is generated by attempts to render to or read from a framebuffer which is not framebuffer complete. This error is generated regardless of whether fragments are actually read from or written to the framebuffer. For example, it is generated when a rendering command is called and the framebuffer is incomplete, even if GL_RASTERIZER_DISCARD is enabled.



您需要做的是创建一个带有 1 像素颜色附件的 FBO 并将其绑定(bind)。你 必须有一个完整的 FBO 绑定(bind),否则你会得到 GL_INVALID_FRAMEBUFFER_OPERATION完整性的规则之一是至少附有 1 张完整的图像。
OpenGL 4.3 实际上允许您通过定义一个不带任何附件的 FBO 来绕过这个问题(参见: GL_ARB_framebuffer_no_attachments )。但是,由于您使用的是 EXT 形式的 FBO 和转换反馈,我怀疑您是否有 4.3 实现。

关于opengl - 在没有帧缓冲区的情况下转换反馈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24112671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com