Mam aplikację OpenGL, która dość szeroko wykorzystuje testy szablonów do renderowania nieregularnych kształtów (trochę jak prosty 2-D CSG ). Gdybym mógł dowiedzieć się, ile fragmentów przeszło test matrycowy i faktycznie zostało zrenderowanych, byłoby to bardzo pomocne w uproszczeniu niektórych obliczeń w dół linii. W szczególności pozwoliłoby mi to określić obszar renderowanego kształtu za darmo zamiast później go przybliżać za pomocą symulacji Monte Carlo.
Wiem, że istnieje podobna koncepcja prymitywów emitowanych z modułu cieniującego geometrię, zwana sprzężeniem zwrotnym transformacji . Chciałbym wiedzieć, czy istnieje podobna koncepcja dla fragmentów i testu szablonu.
opengl
stencil-test
Martin Ender
źródło
źródło
Odpowiedzi:
Jednym z możliwych podejść może być użycie kwerendy okluzji sprzętu.
Można skorzystać z faktów, że zgodnie ze specyfikacją Test Wzornika jest wykonywany przed testem głębokości, a tylko fragmenty, które przejdą test głębokości, są liczone przez Zapytanie Okluzji.
Prosty przykład (nie przetestowany) mógłby wyglądać następująco:
Zauważ, że wywołanie w celu uzyskania liczby próbek wymusi wymuszenie opróżnienia potoku i czeka na zakończenie zapytania. Jeśli potrzebujesz bardziej asynchronicznego podejścia, możesz zapytać, czy zapytanie dotyczące okluzji jest wykonywane, czy nie, przy użyciu:
źródło
Jeśli interesuje Cię obszar, możesz zmniejszyć rozmiar bufora szablonów, aż osiągniesz jeden piksel i wydedukujesz ten obszar z jego koloru.
Kroki będą:
źródło