티스토리 뷰

Qt

QOpenGLWindow

4whomtbts 2020. 7. 4. 22:11

https://doc.qt.io/qt-5/qopenglwindow.html

 

QOpenGLWindow Class | Qt GUI 5.15.0

QOpenGLWindow Class The QOpenGLWindow class is a convenience subclass of QWindow to perform OpenGL painting. More... Header: #include qmake: QT += gui Since: Qt 5.4 Inherits: QPaintDeviceWindow This class was introduced in Qt 5.4. Public Types enum UpdateB

doc.qt.io

을 러프하게 번역한 내용

* 소개

QWindow 의 서브클래스로 OpenGL을 그리기 위해서 사용한다.

QOpenGLWindow는 QWindow의 개선된 버전이고 OpenGL 렌더링을 하는 윈도우들을 QOpenGLWidget과 

호환되는 API들을 사용해서 쉽게 생성할 수 있도록 해준다. 

QOpenGLWidget과는 다르게 QOpenGLWindow는 Widget들에 대한 종속성이 없고, 더 나은 성능을 보여준다.

 

일반적으로 QOpenGLWindow를 상속받는 서브클래스는 아래의 가상 함수들을 재상속 받아야한다.

+ initializeGL 

   OpenGL 리소스 초기화를 위해서 사용함 

+ resizeGL 

  변환 행렬들 설정과 Window 사이즈에 종속적인 리소스들을 설정하기 위해 사용

+ paintGL 

  QPainter 를 이용하거나 OpenGL 커맨드를 사용하기 위해서

 

다시 그리기 위해서는 update 함수를 사용하면 된다. 하지만 update()의 호출이 paintGL()을 즉시 호출하지는 않는다.

update()를 연속적으로 여러 번 호출하게 되면 동작을 바꾸지 않을 것 이다.

context에 대해 특별한 설정을 요청하기 위해서는 다른 QWindow에서 하던 것 처럼 setFormat을 사용하면 된다. 

QWindow와는 다르게 QOpenGLWindow는 painter를 스스로 열고 QPaint 기반의 드로잉을 할 수 있다.

QOpenGLWindow는 여러 번의 업데이트 동작들을 지원하는데, 기본적으로 NoPartialUpdate는 일반적인 OpenGL 기반의 

QWindow나 레거시 QGLWidget들과 동일하다. 

이와 반대로, PartialUpdateBlit 과 PartialUpdateBlen는 QOpenGLWidget의 작동방식과 더욱 유사한데,

항상 추가적인 프레임 버퍼 객체가 있는 방식이기 때문이다. 이러한 모드들은 성능을 조금 희생하는 대신에 

각 각의 페인트마다 작은 영역들만 다시 그리고 나머지 부분은 이전의 프레임 그대로 놔둔다. 

그러한 동작은 QPainter를 이용해서 점진적으로 그려나가는 어플리케이션에서 유용하다. 왜냐하면 

이러한 방식은 각 각의 paintGL 호출시에 전체 윈도우를 새로 그리지 않아도 되기 때문이다. 

QOpenGLWidget과 비슷하게, QOpenGLWindow 는 Qt::AA_ShareOpenGLContexts 속성을 지원하는데 

이것을 사용하도록 설정이 되어있으면 모든 QOpenGLWindow 인스턴스들의 OpenGL context들은 서로서로 공유하게 된다. 

이렇게 되면 서로 공유 가능한 OpenGL 리소스에 접근할 수 있다.

 

댓글