2 #include <msp/gl/extensions/arb_occlusion_query.h>
3 #include <msp/gl/extensions/arb_occlusion_query2.h>
12 QueryPool::QueryPool(QueryType t, unsigned s):
14 gl_type(get_gl_query_type(type))
16 if(type==OCCLUSION_QUERY)
18 static Require req(ARB_occlusion_query);
19 static Require req2(ARB_occlusion_query2);
25 QueryPool::~QueryPool()
27 glDeleteQueries(queries.size(), queries.data());
30 void QueryPool::resize(unsigned s)
33 glDeleteQueries(queries.size()-s, queries.data()+s);
35 unsigned old_size = queries.size();
38 glGenQueries(s-old_size, queries.data()+old_size);
41 unsigned QueryPool::get_result(unsigned i) const
44 glGetQueryObjectuiv(queries[i], GL_QUERY_RESULT, &result);
49 QueryPool::Activate::Activate(Renderer &r, const QueryPool &p, unsigned i):
54 renderer.begin_query(pool, index);
57 QueryPool::Activate::~Activate()
59 renderer.end_query(pool, index);
63 unsigned get_gl_query_type(QueryType t)
67 case OCCLUSION_QUERY: return GL_ANY_SAMPLES_PASSED;
68 default: throw invalid_argument("get_gl_query_type");