Qt 如何处理 QGLWidget 中对各种 OpenGL 函数(例如 glVertex3f)的函数调用?
这些调用是 QGLWidget 对象的一部分,还是严格意义上的全局命名空间 OpenGL 函数?
从单独的类中绘制 QGLWidget 的最佳做法是什么?
最佳答案
那些 gl ...
函数只是常规的 OpenGL 函数,或者如果正在使用扩展包装器,则解析为包装器符号的宏名称。 QGLWidget 负责 OpenGL 上下文的创建和管理,就像 GLUT 或 GLFW 所做的那样。
QGLWidget 提供了成员函数QGLWidget::makeCurrent
,它选择QGLWidget 实例的OpenGL 上下文作为调用QGLWidget::makeCurrent
的线程中的当前上下文。 QGLWidget::swapBuffers
发出双缓冲区交换。使用完 OpenGL 上下文后,比如在渲染器函数的末尾,调用 QGLWidget::doneCurrent
,这会将上下文与当前线程分离;这是使 OpenGL 在多线程程序中工作所必需的——如果您确保所有 OpenGL 操作都是从同一个线程完成的,您可以省略对 QGLWidget::doneCurrent
的调用。
当然,在一个真正的 OOP 时尚程序中,您应该将对另一个类的引用传递给您派生的 QGLWidget,并从 QGLWidget 的绘图处理程序调用那个类的绘图函数。
关于c++ - QGLWidget 的 glXXX 函数调用是如何处理的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7085619/