![](/img/trans.png)
[英]OpenGL drops performance when writing to nonzero FBO attachment on AMD
[英]OpenGL FBO colour attachment shrinking
我有一个带有4帧缓冲区纹理的FBO。 这些纹理有4种不同的大小。
问题是,例如,如果使用以下方式附加纹理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驱动程序是最新的,这是一个已知问题吗?
这个问题称为“ OpenGL的工作方式。 ”
帧缓冲区的总大小基于所有附加图像中每个维度的最小大小。 不允许在任何附加图像之外进行渲染。 即使您使用写遮罩或绘制缓冲区状态,以便实际上不对其进行渲染,可用的视口大小也始终限于所附加图像的最小大小。
通常,除非认真考虑对其进行渲染,否则请勿将图像附加到帧缓冲区。 如果要进行下采样,请在每次采样之间交换FBO或更改附加的图像。
哦,顺便说一句:这是未定义的行为(除非您使用GL 4.5或ARB / NV_texture_barrier),以读取当前附加到FBO的任何纹理对象 。 同样,写掩码和绘制缓冲区的状态无关紧要。 重要的是图像已附加 。 同样,除非您正在写东西,否则请不要附加任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.