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

StackOverflow https://stackoverflow.com//questions/12665922

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top