Какой шейдер вычислить что-то про примитив? - PullRequest
1 голос
/ 28 апреля 2020

Я хочу взять все вершины моего примитива (в частности, 2 вершины из GL_LINE) и вычислить с ними некоторые вещи, которые будут использоваться фрагментным шейдером (в частности, коэффициенты уравнения линии *) 1002 *).

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

Я не хочу делать в CPU, потому что я хочу информацию после преобразования и проецирования. Могу ли я сделать это в одном из тесселяционных или геометрических шейдеров и передать вывод в виде плоского шейдера с изменяющимся фрагментом. В этом случае один и тот же примитив будет выводиться без изменений.

Возможно ли это? Это хорошая идея?

1 Ответ

1 голос
/ 29 апреля 2020

У большинства шейдерных стадий есть имя, которое описывает, что они на самом деле делают. «Вершинный шейдер» принимает вершину в качестве входных данных и создает вершину в качестве выходных данных. «Фрагмент шейдера» принимает фрагмент в качестве входных данных и создает фрагмент в качестве выходных данных. «Шейдер оценки тесселяции» немного более косой, но он действительно оценивает операцию тесселяции, выполняемую модулем тесселяции с фиксированной функцией.

« Геометрический шейдер » - лишний. Он принимает примитив в качестве входных данных и создает ноль или более примитивов в качестве выходных данных. По праву, его следовало бы назвать «примитивным шейдером», но обвините в этом имя Microsoft.

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

...