Скользящий шейдер 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 вообще.

0 ответов

Другие вопросы по тегам