QGLWidget的glXXX函数调用是如何处理的?
Qt 如何处理对各种 OpenGL 函数(例如 QGLWidget 中的 glVertex3f)的函数调用?
这些调用是 QGLWidget 对象的一部分还是严格意义上的全局命名空间 OpenGL 函数?
从单独的类中绘制 QGLWidget 的最佳实践是什么?
How does Qt handle the function calls to various OpenGL functions such as glVertex3f in a QGLWidget?
Are these calls part of the QGLWidget object or are they strictly the global namespace OpenGL functions?
What is the best practice for drawing on a QGLWidget from a separate class?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这些
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 的绘图处理程序中调用该类的绘图函数。
Those
gl…
functions are just the regular OpenGL functions, or if a extension wrapper is being used the macro names resolving to the wrapper's symbols. QGLWidget takes care of OpenGL context creation and management, just like GLUT or GLFW do.QGLWidget offers the member function
QGLWidget::makeCurrent
which selects the QGLWidget instance's OpenGL context being the current context in the thread from whichQGLWidget::makeCurrent
is called.QGLWidget::swapBuffers
issues the double buffer swap. After you're done using the OpenGL context, say at the end of a renderer function, callQGLWidget::doneCurrent
which will detach the context from the current thread; this is neccesary to make OpenGL work in multithreaded programs – if you make sure that all OpenGL operations are done from the very same thread, you may omit the call toQGLWidget::doneCurrent
.Of course in a true OOP fashion program, you should pass a reference to the other class to your derivation of QGLWidget and call that one's drawing function from the QGLWidget's drawing handler.
它们是全局命名空间 OpenGL 函数。
在paintGL()函数中调用另一个类的绘图函数。
They are global namespace OpenGL functions.
Call the drawing function of the other class in the paintGL() function.