Я пытаюсь скопировать уровень текстуры из одной текстуры в другую, используя простой проходной шейдер:
#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:
Iможно скопировать слой 2 из одного FBO прямо в кадровый буфер по умолчанию, и, кажется, он выглядит хорошо.
Но по какой-то причине при копировании в другойСначала FrameBuffer, затем в стандартный кадровый буфер, что-то выглядит неправильно:
Все эти копии используют один и тот же проходной шейдер.Как шейдер может работать в некоторых случаях, но не в других?
Мои фильтры установлены на GL_LINEAR и GL_LINEAR_MIPMAP_LINEAR.Я не получаю сообщений об ошибках OpenGL вообще.