Saya memiliki aplikasi OpenGL yang menggunakan tes stensil cukup luas untuk membuat bentuk tidak teratur (sedikit seperti CSG 2-D sederhana ). Jika saya bisa mengetahui berapa banyak fragmen yang lulus uji stensil dan benar-benar diberikan, ini akan sangat membantu dalam menyederhanakan beberapa perhitungan di telepon. Secara khusus, ini akan memungkinkan saya untuk menentukan area bentuk yang diberikan secara gratis daripada harus memperkirakannya dengan simulasi Monte Carlo nanti.
Saya tahu bahwa ada konsep serupa untuk primitif yang dipancarkan dari geometri shader, yang disebut umpan balik transform . Saya ingin tahu apakah ada konsep serupa untuk fragmen dan uji stensil.
opengl
stencil-test
Martin Ender
sumber
sumber
Jawaban:
Salah satu pendekatan yang mungkin adalah penggunaan Query Occlusion Perangkat Keras.
Anda dapat menggunakan fakta bahwa, berdasarkan spesifikasi, Uji Stensil dieksekusi sebelum uji kedalaman, dan hanya fragmen yang lolos uji kedalaman yang dihitung oleh Query Occlusion.
Contoh sederhana (tidak diuji) akan seperti:
Perhatikan bahwa panggilan untuk mendapatkan jumlah sampel akan memanggil secara paksa flush dari pipeline dan menunggu pertanyaan selesai. Jika Anda memerlukan pendekatan yang lebih asinkron, Anda dapat menanyakan apakah permintaan oklusi selesai atau tidak dengan menggunakan:
sumber
Jika yang Anda minati adalah area, Anda dapat memperkecil ukuran buffer stensil hingga Anda mencapai satu piksel dan menyimpulkan area itu dari warnanya.
Langkah-langkahnya adalah:
sumber