Loading...
Searching...
No Matches
globjects::Query Class Reference

Encapsulates a GL Query object. More...

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

Inheritance diagram for globjects::Query:

## 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 Query * | fromId (gl::GLuint id)
static Query * | current (gl::GLenum target)
static Query * | timestamp ()
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 class | NameImplementation { DebugKHR , 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.
globjects::Query
Encapsulates a GL Query object.
Definition Query.h:66
globjects::Query::Query
Query()
globjects::Query::end
void end(gl::GLenum target) const
globjects::Query::get
static gl::GLint get(gl::GLenum target, gl::GLenum pname)
globjects::Query::begin
void begin(gl::GLenum target) const
globjects::Query::wait
void wait() const

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.
globjects::Query::get64
gl::GLuint64 get64(gl::GLenum pname) const
globjects::Query::timestamp
static Query * timestamp()

See also
  http://www.opengl.org/wiki/Query_Object
  http://www.opengl.org/registry/specs/ARB/timer_query.txt

## Constructor & Destructor Documentation

## Query() [1/2]

globjects::Query::Query | ( |  | ) |

## Query() [2/2]

globjects::Query::Query | ( | IDResource * | resource | ) |

protected

## ~Query()

virtual globjects::Query::~Query | ( |  | ) |

protected virtual

## Member Function Documentation

## fromId()

static Query * globjects::Query::fromId | ( | gl::GLuint | id | ) |

static

## current()

static Query * globjects::Query::current | ( | gl::GLenum | target | ) |

static

## timestamp()

static Query * globjects::Query::timestamp | ( |  | ) |

static

## get() [1/2]

static gl::GLint globjects::Query::get | ( | gl::GLenum | target,
|  | gl::GLenum | pname
| ) |  |

static

## getIndexed()

static gl::GLint globjects::Query::getIndexed | ( | gl::GLenum | target,
|  | gl::GLuint | index,
|  | gl::GLenum | pname
| ) |  |

static

## getCounterBits()

static gl::GLint globjects::Query::getCounterBits | ( | gl::GLenum | target | ) |

static

## accept()

virtual void globjects::Query::accept | ( | ObjectVisitor & | visitor | ) |

override virtual

Implements globjects::Object.

## begin()

void globjects::Query::begin | ( | gl::GLenum | target | ) | const

## end()

void globjects::Query::end | ( | gl::GLenum | target | ) | const

## beginIndexed()

void globjects::Query::beginIndexed | ( | gl::GLenum | target,
|  | gl::GLuint | index
| ) |  | const

## endIndexed()

void globjects::Query::endIndexed | ( | gl::GLenum | target,
|  | gl::GLuint | index
| ) |  | const

## isQuery()

static bool globjects::Query::isQuery | ( | gl::GLuint | id | ) |

static

## get() [2/2]

gl::GLuint globjects::Query::get | ( | gl::GLenum | pname | ) | const

## get64()

gl::GLuint64 globjects::Query::get64 | ( | gl::GLenum | pname | ) | const

## resultAvailable()

bool globjects::Query::resultAvailable | ( |  | ) | const

## wait() [1/2]

void globjects::Query::wait | ( |  | ) | const

## wait() [2/2]

void globjects::Query::wait | ( | const std::chrono::duration< int, std::nano > & | timeout | ) | const

## waitAndGet() [1/3]

gl::GLuint globjects::Query::waitAndGet | ( | gl::GLenum | pname | ) | const

## waitAndGet64() [1/3]

gl::GLuint64 globjects::Query::waitAndGet64 | ( | gl::GLenum | pname | ) | const

## waitAndGet() [2/3]

gl::GLuint globjects::Query::waitAndGet | ( | const std::chrono::duration< int, std::nano > & | timeout,
|  | gl::GLenum | pname
| ) |  | const

## waitAndGet64() [2/3]

gl::GLuint64 globjects::Query::waitAndGet64 | ( | const std::chrono::duration< int, std::nano > & | timeout,
|  | gl::GLenum | pname
| ) |  | const

## waitAndGet() [3/3]

gl::GLuint globjects::Query::waitAndGet | ( | gl::GLenum | pname,
|  | const std::chrono::duration< int, std::nano > & | timeout
| ) |  | const

## waitAndGet64() [3/3]

gl::GLuint64 globjects::Query::waitAndGet64 | ( | gl::GLenum | pname,
|  | const std::chrono::duration< int, std::nano > & | timeout
| ) |  | const

## counter() [1/2]

void globjects::Query::counter | ( |  | ) | const

## objectType()

virtual gl::GLenum globjects::Query::objectType | ( |  | ) | const

override virtual

Implements globjects::Object.

## genQuery()

static gl::GLuint globjects::Query::genQuery | ( |  | ) |

static protected

## counter() [2/2]

void globjects::Query::counter | ( | gl::GLenum | target | ) | const

protected

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

- Query.h