Фрагмент или геометрия шейдера: считать рендеринг треугольников?

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

Будет ли это точное количество визуализированных треугольников в усеченной области вида (при условии, что только трис, так как примитивный идентификатор также применяется к линиям и точкам), в отличие от всей сцены?

1 ответ

Решение

gl_PrimitiveID переменная выводится из геометрического шейдера и подается на фрагментный шейдер. Если геометрического шейдера нет, то фрагментный шейдер gl_PrimitiveID это число примитивов, которые были обработаны в текущем вызове рендеринга. То есть это количество точек / линий / треугольников, которые отправляются через конвейер обработки вершин. Если вы позвоните glDrawArrays(GL_TRIANGLES, 0, 33); вы получите gl_PrimitiveID на полуоткрытом диапазоне [0, 11).

Если присутствует геометрический шейдер, то gl_PrimitiveID принимает любое значение, которое вы выводите из своего GS. Если присутствует GS, и вы не записываете значение, фрагментный шейдер получает неопределенное значение. Обратите внимание, что вы можете просто скопировать gl_PrimitiveIDIn в gl_PrimitiveID для каждой вершины, которую вы пишете, чтобы получить стандартное поведение OpenGL.

Короче говоря, нет, это не учитывает вид выбраковки усеченного конуса. Нет, если только ваш GS на самом деле не просматривает отбраковку усеченного треугольника (и я бы посоветовал это).

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