Как обрабатываются вызовы функции glXXX в QGLWidget? - PullRequest
1 голос
/ 17 августа 2011

Как Qt обрабатывает вызовы функций для различных функций OpenGL, таких как glVertex3f в QGLWidget?

Являются ли эти вызовы частью объекта QGLWidget или они строго являются функциями OpenGL глобального пространства имен?

Как лучше всего рисовать на QGLWidget из отдельного класса?

Ответы [ 2 ]

3 голосов
/ 17 августа 2011

Эти gl… функции являются просто обычными функциями OpenGL, или, если используется оболочка расширения, имена макросов, разрешающие символы оболочки.QGLWidget заботится о создании и управлении контекстом OpenGL, как это делают GLUT или GLFW.

QGLWidget предлагает функцию-член QGLWidget::makeCurrent, которая выбирает контекст OpenGL экземпляра QGLWidget, являющийся текущим контекстом в потоке, из которого QGLWidget::makeCurrentназывается.QGLWidget::swapBuffers выдает двойной буферный своп.После того, как вы закончили использовать контекст OpenGL, скажем, в конце функции рендерера, вызовите QGLWidget::doneCurrent, который отсоединит контекст от текущего потока;это необходимо для того, чтобы OpenGL работал в многопоточных программах - если вы убедитесь, что все операции OpenGL выполняются из одного и того же потока, вы можете опустить вызов QGLWidget::doneCurrent.

Конечно, в режиме реального ООПВ программе вы должны передать ссылку на другой класс вашему производному QGLWidget и вызвать его функцию рисования из обработчика рисования QGLWidget.

1 голос
/ 17 августа 2011

Это глобальные функции пространства имен OpenGL.

Вызовите функцию рисования другого класса в функции paintGL ().

void MyGLWidget::paintGL()
{
    other->draw();
}
...