Плохой рендеринг с GL_TEXTURE_MIN_FILTER GL_LINEAR - PullRequest
1 голос
/ 03 февраля 2012

Я пишу приложение, которое использует фрагментный шейдер GLSL для преобразования цвета в RGB . Это приложение использует GL_TEXTURE_RECTANGLE_ARB, потому что мне нужно поддерживать текстуры NPOT.

Проблема возникает, когда изображение 1280x720 отображается на поверхности меньшего размера, скажем 640x480 .

По-видимому, мое ATI Technologies Inc видеоустройство RV610 [Radeon HD 2400 PRO] имеет проблемы при выполнении минифицирующей фильтрации с GL_LINEAR:

glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

Красный прямоугольник на изображении ниже показывает точное местонахождение проблемы. Зеленые линии (высотой 4 или 5 пикселей) визуализируются вверху видео (черные рамки вокруг изображения не являются частью рендеринга, хорошо ?!). В зависимости от визуализируемого изображения, цвет линий также меняется:

enter image description here

с увеличением:

enter image description here

Проблема не возникает с :

glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

Я протестировал это приложение на другом ПК с картой Intel, и это также происходит с Интегрированным графическим контроллером набора микросхем Intel серии 4 (версия 03) , независимо от того, режим фильтрации устанавливается. Совпадение?

Я забыл что-то сделать в коде , это может быть проблема с драйвером? У меня есть несколько машин с одной и той же картой Intel, и проблема возникает во всех из них. Важно отметить, что эта проблема не возникает на NVIDIA GeForce 7300 .

1 Ответ

2 голосов
/ 03 февраля 2012

Глядя на исходный код, я вижу в шейдере следующее:

     float CbY = ImgHeight + floor(t.y / 4.0);
     float CrY = ImgHeight + chromaHeight_Half + floor(t.y / 4.0);

Понятия не имею, почему вы добавляете ImgHeight к координатам текстуры, потому что все, что нужно сделать, это обернуть, еслиВысота текстуры.Затем вы упаковываете компоненты разных цветов в одну текстуру.Поэтому вы должны быть особенно внимательны, чтобы правильно рассчитать смещения.Выкрашенная линия высотой в один пиксель указывает на то, что ваши текстурные координаты неверны.GL_NEAREST приводит к целым числам, но с GL_LINEAR они должны совпадать.Я предлагаю заменить floor на round.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...