我正在尝试使用一个简单的直通着色器将一个纹理级别从一个纹理复制到另一个纹理:
#version 330 core
in vec2 TexCoord;
out vec4 FragColor;
uniform sampler2D scene;
uniform int level;
void main()
{
FragColor = textureLod(scene, TexCoord, level);
}
我将图像渲染到FBO,生成Mipmap,然后将FBO逐层复制到另一个FBO,然后始终使用最基本的直通着色器将其中一层渲染到默认帧缓冲区。复制使用以下数据进行:
float quadVertices[] = {
// positions texture Coords
//---------------- -----------
-1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
-1.0f, -1.0f, 0.0f, 0.0f, 0.0f,
1.0f, 1.0f, 0.0f, 1.0f, 1.0f,
1.0f, -1.0f, 0.0f, 1.0f, 0.0f,
};
这在复制级别0和1:时效果很好
我可以将第2层从一个FBO直接复制到默认的帧缓冲区,看起来还不错。
但是由于某种原因,当先复制到另一个FrameBuffer,然后再复制到默认的FrameBuffer时,出现了问题:
所有这些副本都使用相同的直通着色器。着色器在某些情况下如何工作,而在其他情况下不起作用?
我的过滤器设置为GL_LINEAR和GL_LINEAR_MIPMAP_LINEAR。我根本没有报告OpenGL错误。