Я пытаюсь выполнить некоторую постобработку в OpenGL ES, поэтому я решил использовать мощность двух размеров текстур, чтобы быть в безопасности.Однако исходное изображение имеет прямоугольную форму и не совсем вписывается в текстуру PoT, поэтому я уменьшаю масштаб и рисую его в буфере кадров (без растяжения, я вернусь к нему позже), как на этом рисунке:
Таким образом, в текстуре есть пробел / пустая область черного или любого другого цвета, к которому я ее очищаю.Затем это становится исходной текстурой, которую я использую, и я пинг-понг много раз, чтобы применить эффект.Я попытался обрисовать проблему, с которой, я думаю, я столкнусь на картинке.В основном пиксели на краю будут сэмплировать из пустой области, когда я использую шейдер типа размытия или цветения, который сэмплирует с соседних пикселей.Если бы я использовал текстуру npot или растянул ее, CLAMP_TO_EDGE избавил бы меня от этого, но я не могу понять, как это сделать в моем случае.Вот некоторые идеи, которые я придумала:
- Растянуть изображение, чтобы заполнить всю текстуру: я чувствую, что некоторые шейдеры, такие как определение краев и т. Д., Могут вызвать дисбаланс в растянутых и не растянутых осяхв финальном изображении.Я хочу, чтобы это работало для всех типов шейдеров.Я ошибаюсь в этом предположении?
- Попробуйте вручную эмулировать CAMP_TO_EDGE, заполнив пустую область цветами границ исходного изображения: кажется громоздким, и это нужно делать на каждом этапе пинг-понга.
- Зафиксируйте координаты текстуры в фрагментном шейдере (например, горизонтальный 0,7 - это максимум): я думаю, что это будет тяжело в шейдере, особенно при выборке нескольких координат.
Итак, есть ли способ, которым я могусделать это эффективно, например, установить координату текстуры как край или что-то в этом роде?Я знаю, что текстуры NPoT значительно облегчили бы эту задачу, но сначала я хочу изучить свои возможности с помощью PoT.И поскольку даже настольные графические процессоры вначале не были дружественными по отношению к NPoT, я чувствую, что это должно быть уже решенной проблемой, и для этого должны быть некоторые рекомендации.