Как фрагментный шейдер определяет количество фрагментов из вывода вершинного шейдера?

Я знаком с вершинными и фрагментными шейдерами, но все еще не уверен, как фрагментный шейдер определяет количество фрагментов из вывода вершинного шейдера.

Если у меня есть 3 вершины и я рисую треугольный примитив в GLSL, то вершинный шейдер будет запускаться три раза для каждой вершины, а затем фрагментный шейдер будет выполняться много раз (в зависимости от количества фрагментов, один раз для каждого фрагмента).

Я хочу знать, как фрагмент шейдера определяет фрагменты? Использует ли он gl_Position? Если я не установил gl_Position в моем вершинном шейдере, сможет ли фрагментный шейдер все еще генерировать фрагменты или нет?

Обязательно ли указывать gl_Position каждый раз в вершинном шейдере?

1 ответ

Решение

Вы говорите о шаге в растеризации, известном как сканирование-преобразование. Графический процессор берет позиции, сгенерированные вашим вершинным шейдером, и интерполирует их атрибуты, чтобы получить фрагменты, которые передаются в ваш фрагментный шейдер. Так что да, для вас важно установить gl_Position в вершинном шейдере.

После преобразования координат треугольника в координаты окна, преобразование сканирования берет треугольник и разбивает его на основе расположения пикселей окна по выходному изображению, которое покрывает треугольник. Источник.

Сканирование преобразования треугольника

Другие вопросы по тегам