Скользящий шейдер OpenGL пропускает пиксели при копировании мипмапов - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь скопировать уровень текстуры из одной текстуры в другую, используя простой проходной шейдер:

#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:

enter image description here

Iможно скопировать слой 2 из одного FBO прямо в кадровый буфер по умолчанию, и, кажется, он выглядит хорошо.

enter image description here

Но по какой-то причине при копировании в другойСначала FrameBuffer, затем в стандартный кадровый буфер, что-то выглядит неправильно:

enter image description here

Все эти копии используют один и тот же проходной шейдер.Как шейдер может работать в некоторых случаях, но не в других?

Мои фильтры установлены на GL_LINEAR и GL_LINEAR_MIPMAP_LINEAR.Я не получаю сообщений об ошибках OpenGL вообще.

...