Важно понимать разницу между отсечкой и отбраковкой . Вы, кажется, говорите о последнем.
Обрезка означает взять треугольник и буквально разрезать его на куски, чтобы они поместились в окне просмотра. Спецификация OpenGL определяет, что этот процесс должен выполняться после вершинного шейдера для любого треугольника, который виден только частично.
Отбраковка означает полное выбрасывание чего-либо. Если треугольник не полностью виден, его можно отбраковать. OpenGL не говорит, что отбраковка должна произойти. Помните: спецификация OpenGL определяет поведение, а не производительность.
Как говорится, производители оборудования не глупы. Очевидные усилия, такие как не растеризация треугольников, находящихся вне области просмотра, легко реализуются и улучшают производительность. Практически любое существующее оборудование сделает это.
Аналогично, отсечение обычно реализуется (где это возможно) с помощью трюков с растеризатором, а не путем создания новых треугольников. Фрагменты, которые находятся вне области просмотра, просто не генерируются растеризатором. Это также допустимо в соответствии с OpenGL, потому что спецификация определяет кажущееся поведение. На самом деле все равно, будете ли вы разрезать треугольник на части, если он выглядит неразличимо, если вы это сделали.
Ваш вопрос, по сути, один из следующих вопросов: «Сколько работы мне нужно сделать, чтобы не отображать объекты вне экрана?» Это действительно зависит от того, какая у вас сцена и как вы ее визуализируете. Вы говорите, что делаете 100 000 спрайтов. Вы делаете 100 000 вызовов отрисовки или эти спрайты являются частью более крупных структур, которые вы визуализируете с большей детализацией? Вы передаете данные вершин в GPU каждый кадр или данные вершин статичны?