多采样帧缓冲仅与渲染缓冲器不完整
Multisample framebuffer only incomplete with renderbuffer
我正在设置一个具有 4 种颜色附件和 1 个深度模板附件的多采样帧缓冲。 它目前与GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE不完整。 如果我不附加渲染缓冲区,它可以完美运行。 调试输出没有打印任何内容,并且glGetError()没有显示任何问题。
GLint samples;
glGetIntegerv(GL_MAX_SAMPLES, &samples);
const GLuint target = GL_TEXTURE_2D_MULTISAMPLE;
const GLenum format[TEXTURES_PER_FBO] = {
GL_RGBA32F, GL_RGB32F, GL_RGB32F, GL_R8UI // TODO tune these
};
// create render textures
glGenTextures(NUM_TEXTURES, textures);
for (int i = 0; i < NUM_TEXTURES; i++) {
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(target, textures[i]);
const int index = i % TEXTURES_PER_FBO;
glTexStorage2DMultisample(target, samples, format[index], width, height, false);
}
glGenRenderbuffers(1, &depth);
glBindRenderbuffer(GL_RENDERBUFFER, depth);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, GL_DEPTH24_STENCIL8, width, height);
// create first framebuffer with depth attachment
glGenFramebuffers(NUM_FBOS, fbos);
glBindFramebuffer(GL_FRAMEBUFFER, fbos[0]);
for (int i = 0; i < TEXTURES_PER_FBO; i++) {
const GLenum index = GL_COLOR_ATTACHMENT0 + i;
glFramebufferTexture2D(GL_FRAMEBUFFER, index, target, textures[i], 0);
}
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depth);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
"状态"是GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
我已经在Windows上的gtx 980和480上对其进行了测试。 我目前无法访问其他人,但如果这个问题没有解决,我会尝试获得一些。如果您需要更多上下文代码,可以在此处找到谢谢!
如果您还有渲染缓冲区附加,则需要为 glTexStorage2DMultisample()
的固定采样位置(最后一个)参数传递GL_TRUE
。否则,你会得到你观察到的GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
错误。
从规范中可能的glCheckFramebufferStatus()
结果列表中(例如,OpenGL 4.5规范的第311页,"9.4.2 整个帧缓冲完整性"部分):
对于所有附加的纹理,TEXTURE_FIXED_SAMPLE_LOCATIONS的值都是相同的;并且,如果附加的图像是渲染缓冲区和纹理的混合,则对于所有附加的纹理,TEXTURE_FIXED_SAMPLE_LOCATIONS的值必须为 TRUE。{FRAMEBUFFER_INCOMPLETE_MULTISAMPLE}
因此,您需要更改对此的调用才能获得有效的 FBO 配置:
glTexStorage2DMultisample(target, samples, format[index], width, height, GL_TRUE);
相关文章:
- 如何用RISC-V GD32VF103CBT6开发板卸载精确的ADC过采样
- 如何使用采样器立方体作为数组
- 提高 C++ 中的扁平缓冲器性能
- 多重采样背景不显示
- 如何从wav文件中获取采样率?
- 如何对0,1,..中的k个随机数进行采样..,n-1,而不缓存到数组
- 如何在直接 x12 上使用多重采样
- 为什么当我选择>250000个采样点时,程序不起作用?
- 点云下采样和使用 PCL 进行正态估计
- 片段着色器中的"错误:在 GLSL 1.30 及更高版本中禁止使用非常量表达式索引的采样器数组"
- 在glTexImage2D中,当我选择与在着色器中采样不同的内部格式时,情况如何?
- 使用哪个 pcl 滤波器对点云进行下采样
- 使用膨胀卷积的语义分割中的上采样
- 为什么找不到这个统一采样器2D?
- 如何在保持最小距离的同时沿有限线随机采样
- 使用GlblitFrameBuffer进行多样采样,无法使用OpenGL ES 3.0
- 如何将多个立方体纹理传递到均匀的采样器中
- 第二次创建命令缓冲器时,在VKCMDDrawIndex中进行了segfault
- 多采样框架渲染对象和深度缓冲区
- 多采样帧缓冲仅与渲染缓冲器不完整