c++ - QGLWidget 的 glXXX 函数调用是如何处理的?

标签 c++ qt opengl qglwidget

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/

相关文章:

c++ - Char* 没有在我的类中保留文本 - 初始化构造函数问题?

c++ - 基于唯一类型 id 比较两个 uint64_t 之间的多个位总是返回 true

c++ - qextserialport 在 Windows 上丢失数据 — 我该怎么办?

if 语句的 C++ GUI 条件始终为真

c++ - 处理不完整的类型

C++ - 使用#include <ClassName> 而不是#include <classname.h> 有好处吗?

c# - OpenGL 尝试绘制多个 2d 纹理,只出现第一个

opengl - GL-CL-互操作 : Test for texture completeness

opengl - 带有 Oculus Rift 的原生渲染插件

接口(interface)的 C++ 模板特化