qopenglfunctions和qopenglfunctions_x_x_core的区别
时间: 2024-04-27 11:21:45 浏览: 7
QOpenGLFunctions 和 QOpenGLFunctions_x_x_Core 都是 Qt 中用于访问 OpenGL API 的类,但它们有一些区别。
QOpenGLFunctions 是一个基本类,它封装了 OpenGL 2.0 及其以下版本的 API。使用 QOpenGLFunctions,开发者可以直接调用 OpenGL API,而无需手动加载和管理 OpenGL 函数指针。但是,它并不支持 OpenGL 3.0 及以上版本的 API,因此在使用 OpenGL 3.0 及以上版本的 API 时就需要使用 QOpenGLFunctions_x_x_Core。
QOpenGLFunctions_x_x_Core 是针对 OpenGL x.x 核心规范的 API 封装类。它封装了 OpenGL 3.0 及其以上版本的核心 API,包括 GLSL 着色器语言、顶点数组对象、缓冲对象等等。使用 QOpenGLFunctions_x_x_Core,开发者可以直接调用 OpenGL 3.0 及以上版本的核心 API,而无需手动加载和管理 OpenGL 函数指针。同时,它也支持 OpenGL 2.0 及其以下版本的 API。
因此,当开发者需要使用 OpenGL 3.0 及以上版本的 API 时,应该使用 QOpenGLFunctions_x_x_Core 类,而在使用 OpenGL 2.0 及以下版本的 API 时,可以使用 QOpenGLFunctions 类。
相关问题
OpenGL version string: 3.1 Mesa 18.1.9,能支持QOpenGLFunctions_3_3_Core吗
根据OpenGL版本字符串,你的系统上安装的OpenGL版本为3.1,而QOpenGLFunctions_3_3_Core需要OpenGL版本至少为3.3,因此你的系统不支持QOpenGLFunctions_3_3_Core。你可以尝试使用低版本的QOpenGLFunctions,如QOpenGLFunctions_3_0_Core,以确保与你的OpenGL版本兼容。
inline void QOpenGLFunctions_3_3_Core::glClearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) { d_1_0_Core->f.ClearColor(red, green, blue, alpha); }报空指针
这个问题可能出现在 `d_1_0_Core` 指针上,它指向的对象可能是空指针。请检查您的代码,确保在调用 `glClearColor` 函数之前,`d_1_0_Core` 已经被正确初始化。如果没有初始化,您需要为其分配内存并初始化。如果已经初始化,那么您需要检查代码中是否有其他地方修改了 `d_1_0_Core` 指针,导致指向了空指针。