globjects  1.0.0.ae1b474792ef
Strict OpenGL objects wrapper.

Encapsulates a GL Query object. More...

#include <globjects/include/globjects/Query.h>

Inheritance diagram for globjects::Query:
globjects::Object globjects::Referenced globjects::HeapOnly

Public Member Functions

 Query ()
 
virtual void accept (ObjectVisitor &visitor) override
 
void begin (gl::GLenum target) const
 
void end (gl::GLenum target) const
 
void beginIndexed (gl::GLenum target, gl::GLuint index) const
 
void endIndexed (gl::GLenum target, gl::GLuint index) const
 
gl::GLuint get (gl::GLenum pname) const
 
gl::GLuint64 get64 (gl::GLenum pname) const
 
bool resultAvailable () const
 
void wait () const
 
void wait (const std::chrono::duration< int, std::nano > &timeout) const
 
gl::GLuint waitAndGet (gl::GLenum pname) const
 
gl::GLuint64 waitAndGet64 (gl::GLenum pname) const
 
gl::GLuint waitAndGet (const std::chrono::duration< int, std::nano > &timeout, gl::GLenum pname) const
 
gl::GLuint64 waitAndGet64 (const std::chrono::duration< int, std::nano > &timeout, gl::GLenum pname) const
 
gl::GLuint waitAndGet (gl::GLenum pname, const std::chrono::duration< int, std::nano > &timeout) const
 
gl::GLuint64 waitAndGet64 (gl::GLenum pname, const std::chrono::duration< int, std::nano > &timeout) const
 
void counter () const
 
virtual gl::GLenum objectType () const override
 
- Public Member Functions inherited from globjects::Object
gl::GLuint id () const
 
std::string name () const
 
void setName (const std::string &name)
 
bool hasName () const
 
bool isDefault () const
 
void detach ()
 
- Public Member Functions inherited from globjects::Referenced
 Referenced ()
 
void ref () const
 
void unref () const
 
int refCounter () const
 
- Public Member Functions inherited from globjects::HeapOnly
 HeapOnly ()
 
void destroy () const
 

Static Public Member Functions

static QueryfromId (gl::GLuint id)
 
static Querycurrent (gl::GLenum target)
 
static Querytimestamp ()
 
static gl::GLint get (gl::GLenum target, gl::GLenum pname)
 
static gl::GLint getIndexed (gl::GLenum target, gl::GLuint index, gl::GLenum pname)
 
static gl::GLint getCounterBits (gl::GLenum target)
 
static bool isQuery (gl::GLuint id)
 
- Static Public Member Functions inherited from globjects::Object
static void hintNameImplementation (NameImplementation impl)
 

Protected Member Functions

 Query (IDResource *resource)
 
virtual ~Query ()
 
void counter (gl::GLenum target) const
 
- Protected Member Functions inherited from globjects::Object
 Object (IDResource *resource)
 
virtual ~Object ()
 
- Protected Member Functions inherited from globjects::Referenced
virtual ~Referenced ()
 
- Protected Member Functions inherited from globjects::HeapOnly
virtual ~HeapOnly ()
 

Static Protected Member Functions

static gl::GLuint genQuery ()
 

Additional Inherited Members

- Public Types inherited from globjects::Object
enum  NameImplementation { NameImplementation::DebugKHR, NameImplementation::Legacy }
 
- Protected Attributes inherited from globjects::Object
IDResource * m_resource
 
void * m_objectLabelState
 

Detailed Description

Encapsulates a GL Query object.

A Query object is used to query different aspects of the rendering pipeline, such as passed samples, generated primitives, written transform feedback primitives or elapsed time. With begin() and end(), the scope of the measurements could be specified. As a Query object queries the GPU asynchroneously, the result won't be available right after the end() invokation. The resultAvailable() method indicates whether the calling of get()/get64() will return the final result. To wait until the result is available, the wait() method can be used. Alternatively there are waitAndGet() and waitAndGet64() to query the result in one invokation.

There is a convenience method to create a Query object which answeres with the current timestamp on the GPU named timestamp() (see example below).

An example time measurement:

Query * query = new Query(gl::GL_TIME_ELAPSED);
query->begin();
// more GL calls
query->end();
query->wait();
gl::GLuint timeElapsed = query->get();
// Note: sometimes it's important to use the 64 bit equivalent, because the 32 bit version can only capture time up to 4 seconds.

An example timestamp access:

// GL calls
Query * query = Query::timestamp();
// even more GL calls
query->wait();
gl::GLuint64 timestamp = query->get64();
// Note: the result is the timestamp on the GPU right after the first GL calls finished and before the second calls started.
See also
http://www.opengl.org/wiki/Query_Object
http://www.opengl.org/registry/specs/ARB/timer_query.txt

Constructor & Destructor Documentation

globjects::Query::Query ( )
globjects::Query::Query ( IDResource *  resource)
protected
virtual globjects::Query::~Query ( )
protectedvirtual

Member Function Documentation

static Query* globjects::Query::fromId ( gl::GLuint  id)
static
static Query* globjects::Query::current ( gl::GLenum  target)
static
static Query* globjects::Query::timestamp ( )
static
static gl::GLint globjects::Query::get ( gl::GLenum  target,
gl::GLenum  pname 
)
static
static gl::GLint globjects::Query::getIndexed ( gl::GLenum  target,
gl::GLuint  index,
gl::GLenum  pname 
)
static
static gl::GLint globjects::Query::getCounterBits ( gl::GLenum  target)
static
virtual void globjects::Query::accept ( ObjectVisitor visitor)
overridevirtual

Implements globjects::Object.

void globjects::Query::begin ( gl::GLenum  target) const
void globjects::Query::end ( gl::GLenum  target) const
void globjects::Query::beginIndexed ( gl::GLenum  target,
gl::GLuint  index 
) const
void globjects::Query::endIndexed ( gl::GLenum  target,
gl::GLuint  index 
) const
static bool globjects::Query::isQuery ( gl::GLuint  id)
static
gl::GLuint globjects::Query::get ( gl::GLenum  pname) const
gl::GLuint64 globjects::Query::get64 ( gl::GLenum  pname) const
bool globjects::Query::resultAvailable ( ) const
void globjects::Query::wait ( ) const
void globjects::Query::wait ( const std::chrono::duration< int, std::nano > &  timeout) const
gl::GLuint globjects::Query::waitAndGet ( gl::GLenum  pname) const
gl::GLuint64 globjects::Query::waitAndGet64 ( gl::GLenum  pname) const
gl::GLuint globjects::Query::waitAndGet ( const std::chrono::duration< int, std::nano > &  timeout,
gl::GLenum  pname 
) const
gl::GLuint64 globjects::Query::waitAndGet64 ( const std::chrono::duration< int, std::nano > &  timeout,
gl::GLenum  pname 
) const
gl::GLuint globjects::Query::waitAndGet ( gl::GLenum  pname,
const std::chrono::duration< int, std::nano > &  timeout 
) const
gl::GLuint64 globjects::Query::waitAndGet64 ( gl::GLenum  pname,
const std::chrono::duration< int, std::nano > &  timeout 
) const
void globjects::Query::counter ( ) const
virtual gl::GLenum globjects::Query::objectType ( ) const
overridevirtual

Implements globjects::Object.

static gl::GLuint globjects::Query::genQuery ( )
staticprotected
void globjects::Query::counter ( gl::GLenum  target) const
protected

The documentation for this class was generated from the following file: