【发布时间】:2025-12-26 08:05:11
【问题描述】:
我有一个带有 4 个帧缓冲区纹理的 FBO。这些纹理有 4 种不同的尺寸。
- 纹理 1 = 512 * 360
- 纹理 2 = 256 * 180
- 纹理 3 = 128 * 90
- 纹理 4 = 64 * 45
问题是,如果纹理 4 和纹理 1 例如使用以下方法附加:
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, bl_64, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, bl_128, 0);
当我绘制到纹理 1 时,纹理上的图像只占用纹理 4 的大小。
m_blurrFBO.DrawingBind();
glUniformSubroutinesuiv(GL_FRAGMENT_SHADER, 1, &BlurrPass);
glViewport(0, 0, 512, 360);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
DrawQuad();
FBO::UnbindDrawing();
我使用 4 种不同尺寸的不同纹理的原因是我将同一张图像向下采样 4 次,每张图像的尺寸是上一张的一半。
问题是代码已经在 5 台不同的计算机上测试过,它们都使用 AMD 或 NVIDIA 卡,并且可以正常工作。我的 nvidia gtx 550 有最新的驱动程序,这是一个已知问题吗?
【问题讨论】:
-
从技术上讲,是最后一个尺寸的 1/4。它在每个维度上是 1/2 大小,如果你平方,你会得到 1/4。我很难理解的真正问题是为什么你需要你的 FBO 来包含来自以前下采样通道的纹理。如果你要写信,你只需要附加到 FBO 的东西,你不应该写以前的通行证。
-
我附上了所有图像,然后使用 gldrawbuffer 绘制到每个单独的图像。我现在知道这不是最好的解决方案。