X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=inline;f=source%2Fbackends%2Fopengl%2Fquery_backend.cpp;fp=source%2Fbackends%2Fopengl%2Fquery_backend.cpp;h=b445be372696794753d7917ad9852faa80be7472;hb=160e9eea29bd10034733d59507fa1bcca36be401;hp=0000000000000000000000000000000000000000;hpb=93448d16e72e38afbaecbccf6fdedd46d6a82a73;p=libs%2Fgl.git diff --git a/source/backends/opengl/query_backend.cpp b/source/backends/opengl/query_backend.cpp new file mode 100644 index 00000000..b445be37 --- /dev/null +++ b/source/backends/opengl/query_backend.cpp @@ -0,0 +1,56 @@ +#include +#include +#include +#include "query.h" +#include "query_backend.h" + +using namespace std; + +namespace Msp { +namespace GL { + +OpenGLQueryPool::OpenGLQueryPool(unsigned t): + gl_type(get_gl_query_type(t)) +{ + if(t==OCCLUSION_QUERY) + { + static Require req(ARB_occlusion_query); + static Require req2(ARB_occlusion_query2); + } +} + +OpenGLQueryPool::~OpenGLQueryPool() +{ + glDeleteQueries(queries.size(), queries.data()); +} + +void OpenGLQueryPool::resize(unsigned s) +{ + if(sold_size) + glGenQueries(s-old_size, queries.data()+old_size); +} + +unsigned OpenGLQueryPool::get_result(unsigned i) const +{ + unsigned result = 0; + glGetQueryObjectuiv(queries[i], GL_QUERY_RESULT, &result); + return result; +} + + +unsigned get_gl_query_type(unsigned t) +{ + switch(t) + { + case OCCLUSION_QUERY: return GL_ANY_SAMPLES_PASSED; + default: throw invalid_argument("get_gl_query_type"); + } +} + +} // namespace GL +} // namespace Msp