Скользящий шейдер OpenGL пропускает пиксели при копировании мипмапов
Я пытаюсь скопировать уровень текстуры из одной текстуры в другую, используя простой проходной шейдер:
#version 330 core
in vec2 TexCoord;
out vec4 FragColor;
uniform sampler2D scene;
uniform int level;
void main()
{
FragColor = textureLod(scene, TexCoord, level);
}
Я отрисовываю изображение в FBO, генерирую mipmaps, затем копирую это 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, а затем в стандартный кадровый буфер, что-то выглядит неправильно:
Все эти копии используют один и тот же сквозной шейдер. Как шейдер может работать в некоторых случаях, но не в других?
Мои фильтры установлены на GL_LINEAR и GL_LINEAR_MIPMAP_LINEAR. Я не получаю сообщений об ошибках OpenGL вообще.