gpt4 book ai didi

c++ - glClearBufferfv 不清除指定的颜色附件

转载 作者:行者123 更新时间:2023-11-28 04:40:18 25 4
gpt4 key购买 nike

我有一个奇怪的错误。我正在使用 glClearBufferfv (及其 DSA 版本 - glClearNamedFramebufferfv )清除 FBO 颜色附件。我看到的是,只有当我将 drawBuffer 参数设置为零时,它才会清除绘图缓冲区。但这没有任何意义,至少基于我对文档的理解。我的 FBO 有两个颜色附件,分别位于 GL_COLOR_ATTACHMENT0GL_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 doesn't clear specified color attachment

glClearBuffer*/glClearNamedFramebuffer* 指定颜色附件,但索引到当前选定的绘制缓冲区.

绘图缓冲区集是每个 FBO 状态,所以当你这样做时

buffers[0] = GL_COLOR_ATTACHMENT0 + 1;
glNamedFramebufferDrawBuffers(handle, 1, buffers));

您确实将 FBO 的绘制缓冲区设置为一组:

{GL_COLOR_ATTACHMENT1}

只有一个绘制缓冲区,因此唯一有效的绘制缓冲区索引为 0,清除绘制缓冲区索引 0 会正确清除 GL_COLOR_ATTACHMENT1

关于c++ - glClearBufferfv 不清除指定的颜色附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50310483/

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