У меня есть приложение OpenGL, которое довольно широко использует трафаретные тесты для рендеринга неправильных форм (немного похоже на простую 2-D CSG ). Если бы я мог выяснить, сколько фрагментов прошло проверку трафарета и были фактически обработаны, это было бы очень полезно для упрощения некоторых вычислений в дальнейшем. В частности, это позволило бы мне бесплатно определить площадь отображаемой фигуры вместо того, чтобы позже аппроксимировать ее с помощью моделирования Монте-Карло.
Я знаю, что для примитивов, генерируемых геометрическим шейдером, существует похожая концепция, называемая обратной связью преобразования . Я хотел бы знать, существует ли похожая концепция для фрагментов и теста трафарета.
opengl
stencil-test
Мартин Эндер
источник
источник
Ответы:
Одним из возможных подходов может быть использование запроса аппаратного обеспечения окклюзии.
Можно использовать факты, свидетельствующие о том, что по спецификации тест трафарета выполняется перед тестом глубины, и только запрос фрагментов, прошедших тест глубины, учитывается в запросе окклюзии.
Простой пример (не проверенный) будет выглядеть так:
Обратите внимание, что вызов для получения количества выборок вызовет принудительную очистку конвейера и будет ждать завершения запроса. Если вам нужен более асинхронный подход, вы можете запросить, делается ли запрос окклюзии или нет, используя:
источник
Если вас интересует область, вы можете уменьшить размер буфера трафарета, пока не достигнете одного пикселя и не определите эту область из ее цвета.
Шаги будут:
источник