OS X 上的 OpenGL 版本支持
OpenGL Version Support on OS X
我尝试在OS X 10.9上使用Qt(v5.1.1)以现代管道实现的方式编写OpenGL项目。但是,我遇到了一些问题,无法从教程中重建程序,例如http://qt-project.org/wiki/How_to_use_OpenGL_Core_Profile_with_Qt
简单的三角形没有出现,但是没有警告,程序本身就会出现。我怀疑我的Mac可能不支持GLSL。所以我寻找一种打印信息的方法。我发现有人有类似的问题,他这样做了。
#include <QApplication>
#include <QGLFormat>
#include "glwidget.h"
int main(int argc, char* argv[])
{
QApplication mApplication(argc, argv);
QGLFormat mGlFormat;
mGlFormat.setVersion(3, 3);
mGlFormat.setProfile(QGLFormat::CoreProfile);
mGlFormat.setSampleBuffers(true);
qDebug() << "OpenGL context QFlags " << mGlFormat.openGLVersionFlags();
qDebug() << "OpenGL context " << mGlFormat;
GLWidget mWidget(mGlFormat);
mWidget.show();
qDebug() << "OpenGL context" << mWidget.format();
qDebug() << "Driver Version String:" << glGetString(GL_VERSION);
return mApplication.exec();
}
结果我得到了。
OpenGL context QFlagsQFlags(0x1|0x2|0x4|0x8|0x10|0x20|0x40|0x1000|0x2000|0x4000|0x8000)
OpenGL 上下文 QGLFormat(options QFlags(0x1|0x2|0x4|0x20|0x80|0x200|0x400) , 平面 0 , 深度
缓冲区大小 -1 , 累积缓冲区大小 -1 , 模板缓冲区大小 -1 , 红色缓冲区大小 -1 , 绿色缓冲区大小 -1 , 蓝色缓冲区大小 -1 , alphaBufferSize -1 , 样本 -1 , 交换间隔 -1 , 主要版本 3 , 次要版本 3 , 配置文件 1 )OpenGL 上下文 QGLFormat(选项 QFlags(0x1|0x2|0x4|0x20|0x80|0x200|0x400) , 平面 0 , 深度
缓冲区大小 1 , 累积缓冲区大小 -1 , 模板缓冲区大小 1 , 红色缓冲区大小 -1 , 绿色缓冲区大小 -1 , 蓝色缓冲区大小 -1 , alpha缓冲区大小 -1 , 样本 4 , 交换间隔 -1 , 主要版本 3 , 次要版本 3 , 配置文件 1 )驱动程序版本字符串:0x10800e6be
尽管我不确定这个想法的确切含义,但似乎0x8000意味着首先支持 OpenGL 3.3,但由于后来的标志只是0x400版本支持在此过程中以某种方式丢失。
我的显卡是NVIDIA GeForce 9400M 256 MB,应该支持OpenGL 3.3。https://developer.apple.com/graphicsimaging/opengl/capabilities/
- 这是否意味着我无法在这些配置下使用 GLSL?
- 如果是这样,是否可以升级某些库或图形驱动程序?
- 在不支持核心配置文件的计算机上启动使用核心配置文件的应用程序会发生什么情况?
类似帖子无法在 QGLWidget 中设置所需的 OpenGL 版本
似乎我不是唯一一个在本教程中苦苦挣扎的人,我在这里找到了解决方案。即使提到教程的源代码也缺少绑定 VAO。
在 m_shader.setAttributeBuffer 之前的初始化 GL 中添加以下内容:
uint vao;
typedef void (APIENTRY *_glGenVertexArrays) (GLsizei, GLuint*);
typedef void (APIENTRY *_glBindVertexArray) (GLuint);
_glGenVertexArrays glGenVertexArrays;
_glBindVertexArray glBindVertexArray;
glGenVertexArrays = (_glGenVertexArrays) QGLWidget::context()->getProcAddress("glGenVertexArrays");
glBindVertexArray = (_glBindVertexArray) QGLWidget::context()->getProcAddress("glBindVertexArray");
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
- llvm 9在10.15之前的mac版本上支持std::文件系统吗
- 错误:不支持 GLSL 3.30.支持的版本包括:1.10、1.20、1.30、1.00 ES、3.00 ES、3.10
- 安卓版本> 7支持LD_PRELOAD吗?
- 使用共享库版本支持不同 ABI 的最佳实践是什么?
- 在上下文初始化之前查询支持的最高 OpenGL 版本?
- 如何在 Android 原生版本中正确支持不同C++ STL
- OpenGL 版本不等于支持的着色器版本
- 支持 CUDA 统一内存的系统分配器的操作系统版本
- 提升二进制文件读取错误不支持的版本
- 既然C++14支持哪个版本的GCC
- 如何获得GCC版本支持特定功能
- Solaris 上的 GNU gcc/g++ 编译器版本,支持 C++11/14
- 我将如何在客户端支持多个版本的 TLS
- 我应该将哪个 Boost 版本与支持 C++03 的编译器一起使用
- cuda 5.0支持的c++版本
- 是否有支持右值的 ref 指针版本
- 最低合理支持的GCC版本是什么
- OS X 上的 OpenGL 版本支持
- 如何检查特定 g++ 版本支持 C++11 的程度
- 哪个gcc和g++版本支持c和c++的哪个标准