QOpenGLContext Class
QOpenGLContext 클래스는 네이티브 OpenGL 컨텍스트를 나타내며, QSurface 에서 OpenGL 렌더링을 가능하게 합니다. 더 보기...
| 헤더: | #include <QOpenGLContext> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 상속: | QObject |
- 상속된 멤버를 포함한 모든 멤버 목록
- QOpenGLContext는 3D 렌더링의 일부입니다.
공개 유형
| enum | OpenGLModuleType { LibGL, LibGLES } |
공개 함수
| QOpenGLContext(QObject *parent = nullptr) | |
| virtual | ~QOpenGLContext() |
| bool | create() |
| GLuint | defaultFramebufferObject() const |
| void | doneCurrent() |
| QSet<QByteArray> | extensions() const |
| QOpenGLExtraFunctions * | extraFunctions() const |
| QSurfaceFormat | format() const |
| QOpenGLFunctions * | functions() const |
| QFunctionPointer | getProcAddress(const QByteArray &procName) const |
| QFunctionPointer | getProcAddress(const char *procName) const |
| bool | hasExtension(const QByteArray &extension) const |
| bool | isOpenGLES() const |
| bool | isValid() const |
| bool | makeCurrent(QSurface *surface) |
| QNativeInterface * | nativeInterface() const |
| QScreen * | screen() const |
| void | setFormat(const QSurfaceFormat &format) |
| void | setScreen(QScreen *screen) |
| void | setShareContext(QOpenGLContext *shareContext) |
| QOpenGLContext * | shareContext() const |
| QOpenGLContextGroup * | shareGroup() const |
| QSurface * | surface() const |
| void | swapBuffers(QSurface *surface) |
신호
| void | aboutToBeDestroyed() |
정적 공용 멤버
| bool | areSharing(QOpenGLContext *first, QOpenGLContext *second) |
| QOpenGLContext * | currentContext() |
| QOpenGLContext * | globalShareContext() |
| QOpenGLContext::OpenGLModuleType | openGLModuleType() |
| bool | supportsThreadedOpenGL() |
상세 설명
QOpenGLContext는 기본 OpenGL 컨텍스트의 OpenGL 상태를 나타냅니다. 컨텍스트를 설정하려면, 컨텍스트가 사용될 표면(들)의 화면 및 형식과 일치하도록 화면 및 형식을 설정하고, 필요한 경우 setShareContext()를 사용하여 다른 컨텍스트와 리소스를 공유하도록 한 다음, 마지막으로 create()를 호출하십시오. 반환값 또는 isValid()를 사용하여 컨텍스트가 성공적으로 초기화되었는지 확인하십시오.
makeCurrent()를 호출하여 주어진 서페이스에 대해 컨텍스트를 현재 컨텍스트로 설정할 수 있습니다. OpenGL 렌더링이 완료되면 swapBuffers()를 호출하여 서페이스의 전면 버퍼와 후면 버퍼를 교체함으로써, 새로 렌더링된 내용이 표시되도록 합니다. 특정 플랫폼을 지원하기 위해, QOpenGLContext는 swapBuffers()를 호출한 후, 새로운 프레임의 렌더링을 시작하기 전에 makeCurrent()를 다시 호출해야 합니다.
애플리케이션이 렌더링을 수행하지 않는 경우와 같이 컨텍스트가 일시적으로 필요하지 않을 때는, 리소스를 확보하기 위해 컨텍스트를 삭제하는 것이 유용할 수 있습니다. aboutToBeDestroyed() 신호에 연결하여 QOpenGLContext 자체와는 다른 소유권으로 할당된 리소스를 정리할 수 있습니다.
Qt OpenGL 컨텍스트가 현재 컨텍스트로 설정되면, QOpenGLFunctions, QOpenGLBuffer, QOpenGLShaderProgram, QOpenGLFramebufferObject 와 같은 Qt의 OpenGL 활성화 함수를 사용하여 플랫폼에 구애받지 않는 방식으로 렌더링할 수 있습니다. 또한 Qt 활성화 함수를 사용하지 않고 플랫폼의 OpenGL API를 직접 사용할 수도 있지만, 이 경우 이식성이 저하될 수 있습니다. OpenGL 1.x 또는 OpenGL ES 1.x를 사용하려는 경우에는 후자의 방법이 필요합니다.
OpenGL API에 대한 자세한 내용은 공식 OpenGL 문서를 참조하십시오.
QOpenGLContext 사용 방법에 대한 예제는 OpenGL Window 예제를 참조하십시오.
스레드 어피니티
QOpenGLContext는 ` moveToThread()`를 사용하여 다른 스레드로 이동할 수 있습니다. QOpenGLContext 객체가 속한 스레드와 다른 스레드에서 ` makeCurrent()`를 호출하지 마십시오. 컨텍스트는 한 번에 하나의 스레드와 하나의 서페이스에 대해서만 현재 컨텍스트가 될 수 있으며, 스레드는 한 번에 하나의 컨텍스트만 현재 컨텍스트로 가질 수 있습니다.
컨텍스트 리소스 공유
텍스처나 버텍스 버퍼 객체와 같은 리소스는 컨텍스트 간에 공유될 수 있습니다. 컨텍스트들이 이러한 리소스를 공유하도록 지정하려면 create()를 호출하기 전에 setShareContext()를 사용하십시오. QOpenGLContext는 내부적으로 QOpenGLContextGroup 객체를 추적하며, 이 객체는 shareGroup()를 통해 액세스할 수 있고, 주어진 공유 그룹 내의 모든 컨텍스트를 찾는 데 사용할 수 있습니다. 공유 그룹은 성공적으로 초기화되었으며 해당 공유 그룹 내의 기존 컨텍스트와 리소스를 공유하고 있는 모든 컨텍스트로 구성됩니다. 공유하지 않는 컨텍스트의 공유 그룹은 단일 컨텍스트로 구성됩니다.
기본 프레임버퍼
특정 플랫폼에서는 현재 서피스에 따라 0이 아닌 다른 프레임버퍼가 기본 프레임버퍼로 설정될 수 있습니다. 응용 프로그램이 서로 다른 플랫폼 간에 이식성을 보장하려면 glBindFramebuffer(0)을 호출하는 대신 glBindFramebuffer(ctx->defaultFramebufferObject())를 사용하는 것이 좋습니다. 그러나 ` QOpenGLFunctions::glBindFramebuffer()`를 사용하는 경우, 이 작업은 자동으로 수행됩니다.
경고: WebAssembly
QSurface 의 전체 수명 동안 QSurface 를 통해 단 하나의 QOpenGLContext만 현재 컨텍스트로 설정하는 것이 좋습니다. 두 개 이상의 컨텍스트를 사용하는 경우, WebAssembly 플랫폼에서는 여러 QOpenGLContext 인스턴스가 내부적으로 동일한 네이티브 컨텍스트를 기반으로 할 수 있다는 점을 이해하는 것이 중요합니다. 따라서 두 개의 QOpenGLContext 객체에 대해 동일한 QSurface 를 사용하여 ` makeCurrent()`를 호출하면, 두 번째 호출 시 다른 네이티브 컨텍스트로 전환되지 않을 수 있습니다. 결과적으로, 두 번째 ` makeCurrent()` 호출 이후에 이루어지는 모든 OpenGL 상태 변경은 모두 동일한 네이티브 컨텍스트를 기반으로 하므로 첫 번째 QOpenGLContext의 상태도 변경될 수 있습니다.
참고: 이는 기존 Qt OpenGL 기반 코드로 WebAssembly를 대상으로 할 때, 이러한 제한 사항을 해결하기 위해 일부 포팅 작업이 필요할 수 있음을 의미합니다.
보안 고려 사항
QOpenGLContext와 이를 기반으로 하는 클래스(예: QOpenGLFunctions, QtOpenGL 모듈 클래스, OpenGL 백엔드를 사용하는 QRhi )가 사용하는 모든 데이터는 신뢰할 수 있는 콘텐츠로 간주됩니다. 여기에는 셰이더 소스 코드, 버텍스 및 인덱스 데이터, 텍스처 및 기타 픽셀 데이터, OpenGL 함수에 전달되는 모든 매개변수가 포함됩니다. Qt는 이러한 내용에 대해 어떠한 유효성 검사나 정화 작업도 수행하지 않습니다.
또한 getProcAddress()는 OpenGL 구현체에서 이름으로 해결된 원시 함수 포인터를 반환한다는 점에 유의하십시오. Qt는 호출자가 캐스팅하는 시그니처가 구현체가 제공하는 시그니처와 일치하는지 확인할 수 없으며, 이를 잘못 처리할 경우 정의되지 않은 동작이 발생합니다.
OpenGL 구현체, 즉 드라이버와(해당 플랫폼에 존재하는 경우) 이를 호출하는 라이브러리는 신뢰할 수 있는 인-프로세스 플랫폼 종속성입니다. Qt OpenGL은 Vulkan 구현체를 처리하는 것과 마찬가지로, 샌드박싱이나 검증 없이 이를 로드하여 직접 호출합니다.
어떤 라이브러리가 로드될지는 플랫폼의 일반적인 공유 라이브러리 검색 순서에 따라 결정되며, 일부 플랫폼에서는 환경 변수에 의해서도 결정됩니다. 이러한 선택은 배포 환경의 신뢰할 수 있는 구성의 일부입니다. 이를 제어하지 못하는 배포 환경은 프로세스 내에서 어떤 네이티브 코드가 실행되는지 제어할 수 없습니다.
경고: 애플리케이션 개발자는 애플리케이션의 일부가 아니며 개발자의 통제 범위를 벗어난 사용자 제공 콘텐츠의 투입을 허용하기 전에, 그로 인해 발생할 수 있는 잠재적 영향을 신중하게 고려해야 합니다.
QOpenGLFunctions, QOpenGLBuffer, QOpenGLShaderProgram 및 QOpenGLFramebufferObject도 참조하십시오 .
멤버 유형 문서
enum QOpenGLContext::OpenGLModuleType
이 열거형은 기본이 되는 OpenGL 구현의 유형을 정의합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QOpenGLContext::LibGL | 0 | OpenGL |
QOpenGLContext::LibGLES | 1 | OpenGL OpenGL ES 2.0 이상 |
멤버 함수 문서
[explicit] QOpenGLContext::QOpenGLContext(QObject *parent = nullptr)
parent 를 부모 객체로 하는 새로운 OpenGL 컨텍스트 인스턴스를 생성합니다.
이 인스턴스를 사용하기 전에 적절한 포맷을 설정하고 create()를 호출해야 합니다.
create() 및 makeCurrent()도 참조하십시오 .
[virtual noexcept] QOpenGLContext::~QOpenGLContext()
QOpenGLContext 객체를 삭제합니다.
이 객체가 스레드의 현재 컨텍스트인 경우, ` doneCurrent()`도 호출됩니다.
[signal] void QOpenGLContext::aboutToBeDestroyed()
이 신호는 기본 네이티브 OpenGL 컨텍스트가 소멸되기 전에 발생하므로, 사용자는 공유 OpenGL 컨텍스트의 경우 그렇지 않으면 미해결 상태로 남을 수 있는 OpenGL 리소스를 정리할 수 있습니다.
정리 작업을 수행하기 위해 해당 컨텍스트를 현재 컨텍스트로 설정하려는 경우, 반드시 직접 연결을 사용하여 이 신호에 연결해야 합니다.
참고: ` Qt for Python`에서는 Python 인스턴스가 이미 소멸된 상태이므로, ` QOpenGLWidget ` 또는 ` QOpenGLWindow `의 소멸자에서 이 신호가 발송되더라도 수신되지 않습니다. 대신 ` QWidget::hideEvent()`에서 정리 작업을 수행하는 것이 좋습니다.
[static] bool QOpenGLContext::areSharing(QOpenGLContext *first, QOpenGLContext *second)
first 와 second 컨텍스트가 OpenGL 리소스를 공유하고 있는 경우 true 을 반환합니다.
bool QOpenGLContext::create()
현재 구성으로 OpenGL 컨텍스트를 생성하려고 시도합니다.
현재 구성에는 포맷, 공유 컨텍스트 및 화면이 포함됩니다.
시스템의 OpenGL 구현이 요청된 OpenGL 컨텍스트 버전을 지원하지 않는 경우, ` QOpenGLContext `는 가장 근접한 버전을 생성하려고 시도합니다. 실제로 생성된 컨텍스트 속성은 format() 함수가 반환하는 QSurfaceFormat 를 사용하여 조회할 수 있습니다. 예를 들어, OpenGL 4.3 Core 프로파일을 지원하는 컨텍스트를 요청했지만 드라이버 및/또는 하드웨어가 버전 3.2 Core 프로파일 컨텍스트만 지원하는 경우, 3.2 Core 프로파일 컨텍스트를 받게 됩니다.
네이티브 컨텍스트가 성공적으로 생성되어 makeCurrent(), swapBuffers() 등과 함께 사용할 준비가 된 경우 true 를 반환합니다.
참고: 컨텍스트가 이미 존재하는경우 , 이 함수는 먼저 기존 컨텍스트를 삭제한 다음 새로운 컨텍스트를 생성합니다.
makeCurrent() 및 format()도 참조하십시오 .
[static] QOpenGLContext *QOpenGLContext::currentContext()
현재 스레드에서 ` makeCurrent `를 호출한 마지막 컨텍스트를 반환하며, 현재 활성 컨텍스트가 없는 경우에는 ` nullptr`를 반환합니다.
GLuint QOpenGLContext::defaultFramebufferObject() const
현재 서페이스의 기본 프레임버퍼 객체를 가져오려면 이 함수를 호출하십시오.
일부 플랫폼(예: iOS)에서는 기본 프레임버퍼 객체가 렌더링 대상 서페이스에 따라 달라질 수 있으며, 0과 다를 수도 있습니다. 따라서, 애플리케이션이 다양한 Qt 플랫폼에서 작동하도록 하려면 glBindFramebuffer(0)을 호출하는 대신 glBindFramebuffer(ctx->defaultFramebufferObject())를 호출해야 합니다.
QOpenGLFunctions 에서 glBindFramebuffer()를 사용하는 경우, 0이 전달되면 현재 컨텍스트의 defaultFramebufferObject()가 자동으로 바인딩되므로 이 점에 대해 걱정할 필요가 없습니다.
참고: QOpenGLWidget 및 QQuickWidget 와 같이 프레임버퍼 객체를 통해 렌더링되는위젯은 , 페인팅이 활성화된 상태에서 이 함수가 반환하는 값을 재정의합니다. 이는 해당 시점에서 올바른 "기본" 프레임버퍼가 최상위 창의 표면에 속한 플랫폼별 프레임버퍼가 아니라, 위젯에 연결된 백킹 프레임버퍼이기 때문입니다. 이를 통해 이 함수와 이 함수에 의존하는 다른 클래스(예: QOpenGLFramebufferObject::bindDefault() 또는 QOpenGLFramebufferObject::release())에 대해 예상되는 동작이 보장됩니다.
QOpenGLFramebufferObject도 참조하십시오 .
void QOpenGLContext::doneCurrent()
표면이 0인 makeCurrent 를 호출하기 위한 편의 함수입니다.
이로 인해 현재 스레드에서 활성 컨텍스트가 없게 됩니다.
makeCurrent() 및 currentContext()도 참조하십시오 .
QSet<QByteArray> QOpenGLContext::extensions() const
이 컨텍스트에서 지원하는 OpenGL 확장 기능의 집합을 반환합니다.
컨텍스트 또는 공유 컨텍스트가 현재 컨텍스트로 설정되어 있어야 합니다.
hasExtension()도 참조하십시오 .
QOpenGLExtraFunctions *QOpenGLContext::extraFunctions() const
이 컨텍스트에 해당하는 QOpenGLExtraFunctions 인스턴스를 가져옵니다.
QOpenGLContext 이 기능은 QOpenGLExtraFunctions 에 수동으로 관리할 필요 없이 편리하게 접근할 수 있도록 제공합니다.
컨텍스트 또는 공유 컨텍스트가 현재 상태여야 합니다.
반환된 QOpenGLExtraFunctions 인스턴스는 바로 사용할 수 있으며 initializeOpenGLFunctions()를 호출할 필요가 없습니다.
참고: QOpenGLExtraFunctions 에는 런타임에 사용 가능함이 보장되지 않는 기능이 포함되어 있습니다. 런타임 사용 가능 여부는 플랫폼, 그래픽 드라이버 및 애플리케이션에서 요청한 OpenGL 버전에 따라 다릅니다.
QOpenGLFunctions 및 QOpenGLExtraFunctions도 참조하십시오 .
QSurfaceFormat QOpenGLContext::format() const
create()이 호출된 경우, 기본 플랫폼 컨텍스트의 형식을 반환합니다.
그렇지 않은 경우, 요청된 포맷을 반환합니다.
요청된 형식과 실제 형식은 다를 수 있습니다. 특정 OpenGL 버전을 요청한다고 해서 결과 컨텍스트가 정확히 요청된 버전을 대상으로 하는 것은 아닙니다. 드라이버가 해당 컨텍스트를 제공할 수 있는 한, 생성된 컨텍스트의 버전/프로파일/옵션 조합이 요청과 호환된다는 점만 보장됩니다.
예를 들어, OpenGL 버전 3.x 코어 프로파일 컨텍스트를 요청하면 OpenGL 4.x 코어 프로파일 컨텍스트가 생성될 수 있습니다. 마찬가지로, OpenGL 2.1을 요청하면 더 이상 사용되지 않는 함수가 활성화된 OpenGL 3.0 컨텍스트가 생성될 수 있습니다. 마지막으로, 드라이버에 따라 지원되지 않는 버전을 요청할 경우 컨텍스트 생성 실패가 발생하거나, 지원되는 가장 높은 버전의 컨텍스트가 반환될 수 있습니다.
버퍼 크기에서도 유사한 차이가 발생할 수 있습니다. 예를 들어, 결과 컨텍스트의 깊이 버퍼가 요청한 것보다 더 클 수 있습니다. 이는 완전히 정상적인 현상입니다.
setFormat()도 참조하십시오 .
QOpenGLFunctions *QOpenGLContext::functions() const
이 컨텍스트에 대한 QOpenGLFunctions 인스턴스를 가져옵니다.
QOpenGLContext 이 기능을 사용하면 수동으로 관리할 필요 없이 QOpenGLFunctions 에 편리하게 접근할 수 있습니다.
컨텍스트 또는 공유 컨텍스트가 현재 상태여야 합니다.
반환된 QOpenGLFunctions 인스턴스는 바로 사용할 수 있으며, initializeOpenGLFunctions()를 호출할 필요가 없습니다.
QFunctionPointer QOpenGLContext::getProcAddress(const QByteArray &procName) const
procName 로 식별되는 OpenGL 확장 함수에 대한 함수 포인터를 확인합니다.
이 함수를 사용하여 모든 플랫폼에서 링크된 심볼로 제공되지 않을 수 있는 OpenGL 확장 함수나 핵심 함수에 접근할 수 있습니다.
반환되는 포인터는 플랫폼에 따라 다를 수 있습니다. 일부 시스템에서는 함수가 유효하지 않거나 지원되지 않더라도 nullptr 가 아닌 포인터를 반환할 수 있습니다.
함수의 사용 가능 여부를 확실하게 확인하려면 QOpenGLContext::hasExtension()를 호출하여 확장 기능 지원 여부를 테스트하십시오. 핵심 함수의 경우, QOpenGLContext::format()가 반환한 QSurfaceFormat 에서 version()를 통해 현재 컨텍스트의 버전을 확인하십시오.
QFunctionPointer QOpenGLContext::getProcAddress(const char *procName) const
이 함수는 오버로드된 함수입니다.
[static] QOpenGLContext *QOpenGLContext::globalShareContext()
존재할 경우, 애플리케이션 전체에서 공유되는 OpenGL 컨텍스트를 반환합니다. 그렇지 않으면 ` nullptr`를 반환합니다.
이 함수는 QOpenGLWidget 또는 QQuickWidget 을 생성하거나 표시하기 전에 OpenGL 객체(버퍼, 텍스처 등)를 업로드해야 할 때 유용합니다.
경고: 이 함수가 반환하는 컨텍스트를 어떤 서피스에서도 현재 컨텍스트로 설정하려고 시도하지마십시오 . 대신, 전역 컨텍스트와 공유하는 새로운 컨텍스트를 생성한 다음, 해당 새로운 컨텍스트를 현재 컨텍스트로 설정할 수 있습니다.
Qt::AA_ShareOpenGLContexts, setShareContext() 및 makeCurrent()도 참조하십시오 .
bool QOpenGLContext::hasExtension(const QByteArray &extension) const
이 OpenGL 컨텍스트가 지정된 OpenGL extension 을 지원하는 경우 ` true `을 반환하고, 그렇지 않은 경우 ` false `을 반환합니다.
컨텍스트 또는 공유 컨텍스트가 현재 컨텍스트여야 합니다.
extensions()도 참조하십시오 .
bool QOpenGLContext::isOpenGLES() const
컨텍스트가 OpenGL ES 컨텍스트인 경우 true를 반환합니다.
컨텍스트가 아직 생성되지 않은 경우, 결과는 setFormat()을 통해 설정된 요청된 형식을 기준으로 합니다.
create(), format() 및 setFormat()도 참조하십시오 .
bool QOpenGLContext::isValid() const
이 컨텍스트가 유효한지, 즉 성공적으로 생성되었는지 여부를 반환합니다.
일부 플랫폼에서는 이전에 성공적으로 생성된 컨텍스트에 대해 ` false `의 반환값이 OpenGL 컨텍스트가 손실되었음을 나타낼 수 있습니다.
애플리케이션에서 컨텍스트 손실 상황을 처리하는 일반적인 방법은, ` makeCurrent()`이 실패하고 ` false`를 반환할 때마다 이 함수를 통해 확인하는 것입니다. 이 함수가 ` false`를 반환하면, ` create()`를 호출하여 기본 네이티브 OpenGL 컨텍스트를 다시 생성하고, ` makeCurrent()`를 다시 호출한 다음 모든 OpenGL 리소스를 재초기화하십시오.
일부 플랫폼에서는 컨텍스트 손실 상황을 피할 수 없습니다. 반면, 다른 플랫폼에서는 이를 명시적으로 활성화해야 할 수도 있습니다. 이는 QSurfaceFormat 에서 ResetNotification 을 활성화하여 수행할 수 있습니다. 이렇게 하면 기본 네이티브 OpenGL 컨텍스트에서 RESET_NOTIFICATION_STRATEGY_EXT 이 LOSE_CONTEXT_ON_RESET_EXT 으로 설정됩니다. 그러면 QOpenGLContext 은 매 makeCurrent() 호출 시 glGetGraphicsResetStatusEXT() 을 통해 상태를 모니터링합니다.
create()도 참조하십시오 .
bool QOpenGLContext::makeCurrent(QSurface *surface)
지정된 surface 에 따라 현재 스레드에서 해당 컨텍스트를 활성 컨텍스트로 설정합니다. 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다. 후자의 경우, 서페이스가 노출되지 않았거나, 예를 들어 애플리케이션이 일시 중지된 탓에 그래픽 하드웨어를 사용할 수 없는 경우 발생할 수 있습니다.
surface 가 nullptr 인 경우, 이는 doneCurrent()를 호출하는 것과 동일합니다.
QOpenGLContext 인스턴스가 속한 스레드와 다른 스레드에서 이 함수를 호출하지 마십시오. 다른 스레드에서 QOpenGLContext 를 사용하려면, 먼저 필요한 경우 doneCurrent()를 호출하여 해당 인스턴스가 현재 스레드에서 활성 상태가 아닌지 확인해야 합니다. 그런 다음 다른 스레드에서 사용하기 전에 moveToThread(otherThread)를 호출하십시오.
기본적으로 Qt는 스레드 어피니티에 대해 위의 조건을 강제하는 검사를 수행합니다. Qt::AA_DontCheckOpenGLContextThreadAffinity 애플리케이션 속성을 설정하여 이 검사를 비활성화할 수도 있습니다. QObject thread affinity 문서에 설명된 바와 같이, QObject가 속한 스레드 외부에서 이를 사용할 경우 발생할 수 있는 결과를 반드시 숙지해야 합니다.
functions(), doneCurrent(), Qt::AA_DontCheckOpenGLContextThreadAffinity도 참조하십시오 .
template <typename QNativeInterface> QNativeInterface *QOpenGLContext::nativeInterface() const
주어진 유형에 대한 컨텍스트의 네이티브 인터페이스를 반환합니다.
이 함수는 QNativeInterface 네임스페이스에 정의된 대로 QOpenGLContext 의 플랫폼별 기능에 대한 액세스를 제공합니다:
macOS의 NSOpenGLContext에 대한 네이티브 인터페이스 | |
EGL 컨텍스트에 대한 네이티브 인터페이스 | |
GLX 컨텍스트에 대한 네이티브 인터페이스 | |
Windows의 WGL 컨텍스트에 대한 네이티브 인터페이스 |
요청된 인터페이스를 사용할 수 없는 경우 nullptr 가 반환됩니다.
[static] QOpenGLContext::OpenGLModuleType QOpenGLContext::openGLModuleType()
기본이 되는 OpenGL 구현 유형을 반환합니다.
OpenGL 구현이 동적으로 로드되지 않는 플랫폼에서는 반환 값이 컴파일 시점에 결정되며 절대 변경되지 않습니다.
참고: 데스크톱용 OpenGL구현체도 ES 호환 컨텍스트를 생성할 수 있습니다. 따라서 대부분의 경우 QSurfaceFormat::renderableType()를 확인하거나 편의 함수인 isOpenGLES()를 사용하는 것이 더 적절합니다.
참고: 이 함수를 사용하려면 QGuiApplication 인스턴스가 이미 생성되어 있어야 합니다.
QScreen *QOpenGLContext::screen() const
컨텍스트가 생성된 화면을 반환합니다.
setScreen()도 참조하십시오 .
void QOpenGLContext::setFormat(const QSurfaceFormat &format)
OpenGL 컨텍스트가 호환되어야 할 ` format `를 설정합니다. 이 설정이 적용되려면 먼저 ` create()`를 호출해야 합니다.
이 함수를 통해 형식이 명시적으로 설정되지 않은 경우, QSurfaceFormat::defaultFormat()가 반환하는 형식이 사용됩니다. 즉, 여러 컨텍스트가 있는 경우, 첫 번째 컨텍스트를 생성하기 전에 이 함수를 개별적으로 호출하는 대신 QSurfaceFormat::setDefaultFormat()를 한 번만 호출하면 됩니다.
format()도 참조하십시오 .
void QOpenGLContext::setScreen(QScreen *screen)
OpenGL 컨텍스트가 유효해야 하는 screen 를 설정합니다. 이 설정이 적용되려면 먼저 ` create()`를 호출해야 합니다.
screen()도 참조하십시오 .
void QOpenGLContext::setShareContext(QOpenGLContext *shareContext)
이 설정은 해당 컨텍스트가 shareContext 와 텍스처, 셰이더 및 기타 OpenGL 리소스를 공유하도록 합니다. 이 설정이 적용되려면 create()를 호출해야 합니다.
shareContext()도 참조하십시오 .
QOpenGLContext *QOpenGLContext::shareContext() const
이 컨텍스트가 생성될 때 사용된 공유 컨텍스트를 반환합니다.
기본 플랫폼이 요청된 공유를 지원하지 못한 경우, 이 함수는 0을 반환합니다.
setShareContext()도 참조하십시오 .
QOpenGLContextGroup *QOpenGLContext::shareGroup() const
이 컨텍스트가 속한 공유 그룹을 반환합니다.
[static] bool QOpenGLContext::supportsThreadedOpenGL()
플랫폼이 메인(GUI) 스레드 외부에서 OpenGL 렌더링을 지원하는 경우 ` true `를 반환합니다.
이 값은 사용 중인 플랫폼 플러그인에 의해 제어되며, 그래픽 드라이버에 따라 달라질 수도 있습니다.
QSurface *QOpenGLContext::surface() const
컨텍스트가 현재로 설정된 서페이스를 반환합니다.
이는 ` makeCurrent()` 함수의 인자로 전달된 서피스입니다.
void QOpenGLContext::swapBuffers(QSurface *surface)
surface 의 앞쪽 버퍼와 뒤쪽 버퍼를 서로 바꿔줍니다.
OpenGL 렌더링 프레임을 완료하려면 이 함수를 호출하고, 새로운 프레임의 일부로 추가 OpenGL 명령을 실행하기 전에 반드시 makeCurrent()을 다시 호출해야 합니다.
© 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.