Что вы имеете в виду под «фильтром OpenGL»?Существуют фильтры выборки текстур (GL_TEXTURE_MIN_FILTER
, GL_TEXTURE_MAG_FILTER
и т. Д.).Применять их к текстуре не имеет смысла, поскольку они определяют способ получения данных при выборке текстуры в областях между центрами текселей.Однако, если вы хотите применить какой-либо фильтр Гаусса (или любой другой фильтр свертки) к текстуре, используя конвейер OpenGL (ES), вы можете использовать концепцию под названием «Render to Texture».Идея состоит в том, чтобы визуализировать в текстурный объект вместо «видимого» кадрового буфера по умолчанию.
В OpenGL (ES) это можно сделать с помощью Framebuffer Objekt (сокращенно FBO):
- Создание FBO ( glGenFramebuffers )
- Привязка FBO ( glBindFramebuffer )
- Присоединение целевой текстуры к FBO (glFramebufferTexture2D )
- (Проверьте, завершено ли FBO (готово) ( glCheckFramebufferStatus )
- Установите область просмотра в соответствии с разрешением текстуры вашего FBO
Теперь вы рендеритесь в целевую текстуру. Просто нарисуйте квадрат заполнения экрана с вашей входной текстурой, и результат окажется в целевой текстуре.
Чтобы вернуться к вызову кадрового буфера по умолчанию glBindFramebuffer(0)
Некоторые примечания:
- Вы не должны читать текстуру, на которую пишете! Поэтому используйте два разных объекта текстуры для входной и целевой текстур!
- В этой настройке вы не будете иметь глубину илиТеннисный буфер!Если вам нужно, добавьте один, используя Renderbuffer или прикрепите текстуру глубины к FBO.