QGLWidget에서 glVertex3f와 같은 다양한 OpenGL 함수에 대한 함수 호출을 Qt에서 처리하는 방법은 무엇입니까?QGLWidget의 glXXX 함수 호출은 어떻게 처리됩니까?
이 호출은 QGLWidget 객체의 일부입니까? 아니면 엄격하게 전역 이름 공간 OpenGL 함수입니까?
별도의 클래스에서 QGLWidget을 그리는 가장 좋은 방법은 무엇입니까?
QGLWidget에서 glVertex3f와 같은 다양한 OpenGL 함수에 대한 함수 호출을 Qt에서 처리하는 방법은 무엇입니까?QGLWidget의 glXXX 함수 호출은 어떻게 처리됩니까?
이 호출은 QGLWidget 객체의 일부입니까? 아니면 엄격하게 전역 이름 공간 OpenGL 함수입니까?
별도의 클래스에서 QGLWidget을 그리는 가장 좋은 방법은 무엇입니까?
그 gl…
기능은 일반의 OpenGL 기능, 또는. QGLWidget은 GLUT 또는 GLFW처럼 OpenGL 컨텍스트 생성 및 관리를 담당합니다.
QGLWidget는 QGLWidget 인스턴스의 OpenGL은 문맥 QGLWidget::makeCurrent
호출되는 스레드의 현재 컨텍스트 선택되는 구성원 QGLWidget::makeCurrent
기능을 제공한다. QGLWidget::swapBuffers
은 이중 버퍼 스왑을 발행합니다. OpenGL 컨텍스트 사용을 마친 후에 렌더러 함수의 끝에서 말하면 QGLWidget::doneCurrent
을 호출하면 현재 스레드에서 컨텍스트가 분리됩니다. 다중 스레드 프로그램에서 OpenGL을 작동시키는 것이 필요합니다. 모든 OpenGL 작업이 동일한 스레드에서 수행되는지 확인하려면 QGLWidget::doneCurrent
에 대한 호출을 생략 할 수 있습니다.
물론 진정한 OOP 패션 프로그램에서는 다른 클래스에 대한 참조를 QGLWidget 파생에 전달하고 QGLWidget의 드로잉 핸들러에서 해당 드로잉 함수를 호출해야합니다.
이들은 글로벌 네임 스페이스 OpenGL 기능입니다.
paintGL() 함수에서 다른 클래스의 그리기 함수를 호출하십시오. 연장으로 래퍼 래퍼의 심볼 해결 매크로 이름을 사용하는 경우
void MyGLWidget::paintGL()
{
other->draw();
}
정보 용으로'swapBuffers'는'paintGL'이 반환 된 후에 자동으로 호출됩니다. –
확장 래퍼에 대해 자세히 설명합니다. Qt는 OpenGL 함수 포인터를로드하고 바인딩하는 QGL/[QOpenGLFunctions] (http://doc.qt.io/qt-5/qopenglfunctions.html) (QOpenGLFunctions_2_1에서 버전 관리 됨) 클래스를 제공합니다. 결과는 각 컨텍스트에 대해 캐시됩니다. QOpenGLContext :: currentContext() -> functions() -> gl을 사용하여 컨텍스트에 바인딩 된 함수를 직접 호출 할 수도 있습니다. – Bim