QOpenGLTimerQuery Class
QOpenGLTimerQuery 클래스는 OpenGL 타이머 쿼리 객체를 감싸는 역할을 합니다. 더 보기...
| 헤더: | #include <QOpenGLTimerQuery> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| 상속: | QObject |
- 상속된 멤버를 포함한 모든 멤버 목록
- QOpenGLTimerQuery는 3D 렌더링의 일부입니다.
공개 함수
| QOpenGLTimerQuery(QObject *parent = nullptr) | |
| virtual | ~QOpenGLTimerQuery() |
| void | begin() |
| bool | create() |
| void | destroy() |
| void | end() |
| bool | isCreated() const |
| bool | isResultAvailable() const |
| GLuint | objectId() const |
| void | recordTimestamp() |
| GLuint64 | waitForResult() const |
| GLuint64 | waitForTimestamp() const |
상세 설명
OpenGL 타이머 쿼리 객체는 GPU에서 OpenGL 명령어 시퀀스의 실행 시간을 측정하기 위한 OpenGL 관리 리소스입니다.
OpenGL은 사용 중인 OpenGL 버전과 ARB_timer_query 또는 EXT_timer_query 확장 기능의 유무에 따라 타이머 쿼리에 대해 다양한 수준의 지원을 제공합니다. 지원 현황은 다음과 같이 요약할 수 있습니다.
- OpenGL 3.3 이상은 모든 타이머 쿼리 기능을 완벽하게 지원합니다.
- ARB_timer_query 확장이 적용된 OpenGL 3.2는 모든 타이머 쿼리 기능을 완벽하게 지원합니다.
- EXT_timer_query 확장이 적용된 Qt OpenGL <=3.2는 GPU의 타임스탬프를 조회할 수 없다는 점에서 제한적인 지원을 제공합니다. 이 점이 Qt 클래스가 제공하는 함수에 영향을 미치는 부분은 함수 문서에서 강조 표시될 것입니다.
- OpenGL ES 2(및 OpenGL ES 3)는 OpenGL 타이머 쿼리에 대한 지원을 전혀 제공하지 않습니다.
OpenGL은 1 나노초(1e-9 초)의 세분성으로 시간을 표현합니다. 이로 인해 32비트 정수만으로는 총 약 4초의 지속 시간만 표현할 수 있는데, 성능이 저조하거나 시간이 오래 걸리는 작업에서는 이 한계를 쉽게 초과할 수 있습니다. 따라서 OpenGL은 시간을 표현하기 위해 64비트 정수형을 사용합니다. GLuint64 변수는 수백 년에 달하는 기간을 담을 수 있을 만큼 충분한 비트 폭을 가지며, 이는 실시간 렌더링 요구 사항을 충족하기에 충분합니다.
다른 Qt OpenGL 클래스와 마찬가지로, QOpenGLTimerQuery에는 기본이 되는 OpenGL 객체를 생성하는 ` create()` 함수가 있습니다. 이는 개발자가 해당 시점에 유효한 OpenGL 컨텍스트가 존재하는지 확인할 수 있도록 하기 위함입니다.
일단 생성되면, 타이머 쿼리는 여러 방법 중 하나로 실행할 수 있습니다. 가장 간단한 방법은 ` begin()` 및 ` end()` 호출로 명령어 블록을 구분하는 것입니다. 이는 OpenGL에 ` begin()` 이전에 발행된 모든 명령이 완료된 시점부터 ` end()` 이전에 발행된 모든 명령이 완료될 때까지 걸린 시간을 측정하도록 지시합니다.
프레임이 끝날 때 waitForResult()를 호출하여 결과를 가져올 수 있습니다. 이 함수의 이름에서 알 수 있듯이, OpenGL이 타이머 쿼리 결과가 준비되었다고 알릴 때까지 CPU 실행을 차단합니다. 차단 현상을 피하려면 isResultAvailable()를 호출하여 쿼리 결과가 준비되었는지 확인할 수 있습니다. 최신 GPU는 파이프라인이 매우 깊게 구성되어 있으므로, 쿼리 결과가 발행된 후 1~5프레임 정도가 지나야 결과가 준비될 수 있다는 점에 유의하십시오.
OpenGL은 begin() 및 end()을 사용하여 여러 타이머 쿼리를 중첩하거나 교차 실행하는 것을 허용하지 않습니다. 여러 타이머 쿼리와 recordTimestamp()을 사용하면 이러한 제한을 피할 수 있습니다. recordTimestamp()을 사용할 경우, isResultAvailable() 및 waitForResult()을 사용하여 나중에 결과를 얻을 수 있습니다. Qt는 여러 쿼리 객체를 사용하는 데 도움이 되는 편의 클래스 QOpenGLTimeMonitor 를 제공합니다.
QOpenGLTimeMonitor도 참조하십시오 .
멤버 함수 문서
[explicit] QOpenGLTimerQuery::QOpenGLTimerQuery(QObject *parent = nullptr)
지정된 ` parent`를 사용하여 `QOpenGLTimerQuery` 인스턴스를 생성합니다. 사용하기 전에 유효한 OpenGL 컨텍스트를 사용하여 ` create()`를 호출해야 합니다.
[virtual noexcept] QOpenGLTimerQuery::~QOpenGLTimerQuery()
QOpenGLTimerQuery 와 그 기반이 되는 OpenGL 리소스를 삭제합니다.
void QOpenGLTimerQuery::begin()
이 쿼리 객체에 의해 타이밍이 측정될 일련의 명령에 대한 OpenGL 명령 큐 내의 시작 지점을 지정합니다.
이는 간단한 사용 사례에 유용합니다. 일반적으로 recordTimestamp()을 사용하는 것이 더 좋습니다.
end(), isResultAvailable(), waitForResult() 및 recordTimestamp()도 참조하십시오 .
bool QOpenGLTimerQuery::create()
기본이 되는 OpenGL 타이머 쿼리 객체를 생성합니다. 이 함수가 성공하려면 쿼리 객체를 지원하는 유효한 OpenGL 컨텍스트가 현재 활성화되어 있어야 합니다.
OpenGL 타이머 쿼리 객체가 성공적으로 생성된 경우 ` true `을 반환합니다.
void QOpenGLTimerQuery::destroy()
기본이 되는 OpenGL 타이머 쿼리 객체를 삭제합니다. 이 함수를 호출할 때는 create()이 호출되었을 당시의 컨텍스트가 현재 컨텍스트여야 합니다.
void QOpenGLTimerQuery::end()
이 쿼리 객체에 의해 타이밍이 측정될 일련의 명령에 대해 OpenGL 명령 큐의 종료 지점을 표시합니다.
이는 간단한 사용 사례에 유용합니다. 일반적으로 recordTimestamp()를 사용하는 것이 더 좋습니다.
begin(), isResultAvailable(), waitForResult(), recordTimestamp()도 참조하십시오 .
bool QOpenGLTimerQuery::isCreated() const
기본이 되는 OpenGL 쿼리 객체가 생성된 경우 ` true `를 반환합니다. 이 함수가 ` true `를 반환하고 관련 OpenGL 컨텍스트가 현재 활성화된 상태라면, 이 객체를 사용하여 쿼리를 실행할 수 있습니다.
bool QOpenGLTimerQuery::isResultAvailable() const
OpenGL 타이머 쿼리 결과가 준비되어 있으면 ` true `를 반환합니다.
이 함수는 비차단 방식이며, 가급적 waitForResult()을 호출하기 전에 쿼리 결과의 유무를 확인하는 데 사용해야 합니다.
waitForResult()도 참조하십시오 .
GLuint QOpenGLTimerQuery::objectId() const
기본이 되는 OpenGL 쿼리 객체의 ID를 반환합니다.
void QOpenGLTimerQuery::recordTimestamp()
GPU가 이 마커에 도달했을 때 타임스탬프를 기록하도록 OpenGL 명령 큐에 마커를 배치합니다. 이 함수는 비차단 방식이며, 결과는 나중에 사용할 수 있게 됩니다.
결과가 준비되었는지 여부는 ` isResultAvailable()`를 사용하여 확인할 수 있습니다. 결과는 ` waitForResult()`를 사용하여 가져올 수 있으며, 결과가 아직 준비되지 않은 경우 이 함수는 차단됩니다.
waitForResult(), isResultAvailable(), begin(), end()도 참조하십시오 .
GLuint64 QOpenGLTimerQuery::waitForResult() const
OpenGL 타이머 쿼리의 결과를 반환합니다.
이 함수는 OpenGL에서 결과를 제공할 때까지 차단됩니다. 불필요한 차단 및 지연을 방지하고 결과가 준비되었는지 확인하려면 isResultAvailable()을 호출하는 것이 좋습니다.
isResultAvailable()도 참조하십시오 .
GLuint64 QOpenGLTimerQuery::waitForTimestamp() const
이전까지 발행된 모든 OpenGL 명령이 수신되었으나, GPU에서 반드시 실행된 것은 아닐 때 GPU의 현재 타임스탬프를 반환합니다.
이 함수는 결과가 반환될 때까지 차단됩니다.
recordTimestamp()도 참조하십시오 .
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.