একটি সম্ভাব্য পন্থা হ'ল হার্ডওয়্যার অ্যাসক্লুশন ক্যোয়ারী ব্যবহার।
আপনি সেই তথ্যগুলি ব্যবহার করতে পারেন যা স্পেসিফিকেশন দ্বারা স্টেনসিল পরীক্ষা গভীরতা পরীক্ষার আগেই কার্যকর করা হয় এবং কেবলমাত্র গভীরতা পরীক্ষায় পাস করা টুকরোগুলি অন্তর্ভুক্তি অনুসন্ধান দ্বারা গণনা করা হয়।
একটি সাধারণ উদাহরণ (পরীক্ষিত নয়) এরকম হবে:
GLuint samples_query = 0;
GLuint samples_passed = 0;
glGenQueries(1, &samples_query);
// Initialize your buffers and textures ...
glEnable(GL_DEPTH_TEST);
glEnable(GL_STENCIL_TEST);
// Set up the values on the stencil buffer ...
// Now we count the fragments that pass the stencil test
glDepthFunc(GL_ALWAYS); // Set up the depth test to always pass
glBeginQuery(GL_SAMPLES_PASSED, samples_query);
// Render your meshes here
glEndQuery(GL_SAMPLES_PASSED);
glGetQueryObjectuiv(samples_query, GL_QUERY_RESULT, &samples_passed);
// samples_passed holds the number of fragments that passed the stencil test (if any)
// Release your resources ...
glDeleteQueries(1, &samples_query);
নোট করুন যে নমুনার সংখ্যা পাওয়ার জন্য কলটি পাইপলাইনের জোর করে ফ্লাশ ফ্ল্যাশ করবে এবং কোয়েরি শেষ হওয়ার জন্য অপেক্ষা করবে। আপনার যদি আরও অ্যাসিনক্রোনাস পদ্ধতির প্রয়োজন হয় তবে আপনি অবসমন অনুসন্ধানটি সম্পন্ন হয়েছে কিনা তা ব্যবহার করে জিজ্ঞাসা করতে পারেন:
GLuint query_done = 0;
glGetQueryObjectuiv(samples_query, GL_QUERY_RESULT_AVAILABLE, &query_done);
if (query_done != 0)
// Your query result is ready
else
// Maybe check the next frame?