Фрагмент или геометрия шейдера: считать рендеринг треугольников?
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 на самом деле не просматривает отбраковку усеченного треугольника (и я бы посоветовал это).