glClearBufferfv 不清除指定的颜色附件
glClearBufferfv doesn't clear specified color attachment
我遇到了一个奇怪的错误。我正在使用glClearBufferfv(及其DSA版本 - glClearNamedFramebufferfv(来清除FBO颜色附件。我看到的是,只有当我将 drawBuffer 参数设置为零时,它才会清除绘制缓冲区。但这并不有意义,至少基于我对文档的理解。我的FBO分别在GL_COLOR_ATTACHMENT0
和GL_COLOR_ATTACHMENT1
处有两个颜色附件。
这是我的工作:
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, handle)
//want to clear second attachment
GLenum buffers[1];
buffers[0] = GL_COLOR_ATTACHMENT0 + 1;
glNamedFramebufferDrawBuffers(handle, 1, buffers));
glViewport(0, 0, w, h));
float color[4] = { 1.0f, 1.0f, 1.0f, 1.0f };
glClearNamedFramebufferfv(handle, GL_COLOR,1,color);
它不会清除第二个颜色附件。但是如果我设置:
glClearNamedFramebufferfv(handle, GL_COLOR,0,color);
然后它确实如此。
我是否缺少有关这些函数中drawbuffer
参数的内容?
在 NVIDIA GTX960M上运行
附注:
我使用此方法将纹理附加到我的 FBO:
glNamedFramebufferTexture(handle, GL_COLOR_ATTACHMENT0 + 0, texHandle, 0));
glNamedFramebufferTexture(handle, GL_COLOR_ATTACHMENT0 + 1, texHandle, 0));
其中 no 是附件单元。附件设置是正确的,因为我看到的绘图结果正好在它们应该在的位置。现在唯一的问题是清除正确的呈现目标。
误解已经在问题标题中表达出来:
glClearBufferfv
不清除指定的颜色附件
一个不是为glClearBuffer*
/glClearNamedFramebuffer*
指定颜色附件,而是将索引放入当前选定的绘制缓冲区中。
绘制缓冲区集是每个 FBO 状态,因此当您这样做时
buffers[0] = GL_COLOR_ATTACHMENT0 + 1; glNamedFramebufferDrawBuffers(handle, 1, buffers));
您确实将 FBO 的绘制缓冲区设置为一组:
{GL_COLOR_ATTACHMENT1}
只有一个绘制缓冲区,因此唯一有效的绘制缓冲区索引为 0,清除绘制缓冲区索引 0 会正确清除GL_COLOR_ATTACHMENT1
。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- 清除前检查矢量
- 如何从SDL_Surface获取特定像素的颜色
- ifstream文件在从行中读取时被清除
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 列表视图更改选择颜色
- GtkTreeView 交替行颜色
- dx11 渲染到纹理仅显示透明颜色
- 如何清除/清空已打开的文件C++
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 为什么我的 LEGACY OPENGL 颜色反转了?
- 双击更改 mfc 中列表控件中的行的颜色
- 如何在 c++ 中清除矢量容量?
- 可以清除递归函数中的变量吗?
- 更改 QT 中按钮的颜色
- 在清除 istream 之前,我不应该需要取消获取它吗?
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- glClearBufferfv 不清除指定的颜色附件