Параметры фильтрации включаются только в том случае, если вы используете образец из текстуры. Они не играют никакой роли, пока вы визуализации текстуры.
При выборке из многопроцессорных текстур GL_NEAREST
действительно является единственным поддерживаемым фильтром. Вам также необходимо использовать специальный тип сэмплера (sampler2DMS
) в коде GLSL с соответствующими инструкциями по выборке.
На самом деле я не могу найти что-либо в спецификации, заявив, что установка фильтра на 0xдля мультисэмплов-текстур является ошибкой. Но фильтр вообще не используется. Из OpenGL 4.5 спецификации (курсив):
Когда Мультисэмпли текстуры доступны в шейдер, доступ принимает один вектор целых чисел, описывающих, которые тексель для извлечения и целое число, соответствующие номера образцов, описанных в разделе 14.3 .1 определение того, какой образец в теккселе нужно извлечь. Стандартных инструкций по выборке не разрешено на объектах с мультисэмплой текстуры, а не выполняется фильтрация с помощью выборки.
Для блиттинг между мультисэмплем и не-Multisample текстурами с glBlitFramebuffer()
, то фильтра аргумент может быть либо GL_LINEAR
или GL_NEAREST
, но оно игнорируется в этом случае. Из 4.5 спецификации:
Если чтение фреймбуфера является мультитекстурированного (его эффективное значение SAMPLE_BUFFERS один) и дро фреймбуфера не является (его значение SAMPLE_BUFFERS равно нулю), образцы, соответствующие каждой точке пикселя в источник преобразуется в один образец перед записью в пункт назначения. фильтр игнорируется.
Это имеет смысл, потому что есть ограничение в этом случае нужно иметь тот же размер источника и прямоугольник назначения:
ошибка INVALID_OPERATION генерируется, если либо читать или рисовать видеобуфер является мультитекстурированного , а размеры прямоугольников источника и назначения, предоставленные BlitFramebuffer, не идентичны.
Поскольку фильтр применяется только при растяжении изображения, в данном случае это не имеет значения.
Я думаю, так как единственный способ, которым вы можете попробовать мультисэмплированную текстуру, - использовать «texelFetch (...)», более или менее подразумевается, что большинство состояний сэмплера бессмысленны (например, режим обертывания, фильтр, смещение LOD). Как вы сказали, это не ошибка по спецификации. чтобы установить эти состояния, но если вам нужно было описать поведение с помощью фильтра, то единственным или единственным кандидатом будет точка/ближайший. –
@ AndonM.Coleman Да, я думаю, это именно то, что описывает первая спецификация цитаты, где я выделил «никакой фильтрации не выполняется». –
Да, я просто хотел указать, что вы можете установить эти состояния сэмплера, они просто ничего не делают: объекты pplpler отделяют эти состояния от состояния объекта текстуры и, вероятно, сделали бы этот вопрос не относящимся к проблеме. Но из-за устаревшего дизайна GL многослойные объекты текстуры имеют связанные с ними состояния сэмплеров, которые ничего не делают (поскольку они не отбираются). –