Ответ 1
Как я могу указать "какой" пиксель?
Ты не пиксель. Вы фрагмент. Есть причина, по которой OpenGL называет их "Фрагментными шейдерами"; потому что они еще не пиксели. Действительно, они не только не могут стать пикселями (через discard
или глубинные тесты или что-то еще), благодаря мультисэмплированию несколько фрагментов могут объединяться, чтобы сформировать один пиксель.
Если вы хотите указать, где ваш шейдер фрагмента находится в пространстве окна, используйте gl_FragCoord
. Позиции фрагмента - это значения с плавающей запятой, а не целые числа, поэтому вам нужно протестировать диапазон, а не одно значение "100, 100".
Во-вторых, как мне получить значения из соседнего пикселя?
Если вы говорите о соседнем пикселе фреймбуфера, вы этого не делаете. Фрагментные шейдеры не могут произвольно считываться из фреймбуфера, либо в их собственной позиции, либо в соседнем.
Если вы говорите о доступе к соседнему текселю из того, к которому вы обращались, то это просто вопрос смещения координаты текстуры, которую вы передаете на texture2D
. Вы должны получить размер текстуры (поскольку вы не используете GLSL 1,30 или выше, вам нужно вручную передать это), инвертируйте размер и добавьте или вычтите эти размеры из S и T компонента координаты текстуры.