OpenGL 3.x于2012年中期在Macbook Air上发布
OpenGL 3.x on Macbook Air mid 2012
我正试图从我的大学讲师工作中制作的模板中获得OpenGL/glew程序。他在程序中添加了以下代码:
if(!GLEW_VERSION_3_1) {
std::cerr << "Driver does not support OpenGL 3.1" << std::endl;
return 1;
}
这会在我的mac上打印错误。经过一些实验,我发现我的mac实际上运行的是OpenGL(2.1 INTEL-8.28.30)。在这部分代码之前,我已经使用了一个讨厌的#ifndefAPPLE来解决这个问题,但从长远来看,我无法做到这一点。
有什么方法可以升级到3.1吗?
该问题与OpenGL中核心和兼容性上下文的概念以及Apple的实现有关。您需要确保应用程序请求核心配置文件OpenGL上下文。
Apple支持兼容OpenGL上下文(支持所有不推荐使用的旧功能),最高支持OpenGL 2.1(加上几个扩展)。苹果支持核心OpenGL上下文(删除了旧的弃用功能),直到OSX Mavericks支持OpenGL 4.1(取决于硬件支持,3.3在旧硬件上)。如果您下载一个名为OpenGL Extension Viewer的程序,您可以看到可用的内容。
当您的程序创建OpenGL上下文时,默认情况下它会获得兼容性(以避免破坏旧程序)。您需要特别标记您想要一个核心配置文件。执行此操作的方法将取决于您使用的窗口库。如果您碰巧使用SDL2,那么在创建上下文时只需要设置一个额外的标志。如果直接使用Apple GL,您需要查看他们的文档。
请参阅:http://www.opengl.org/wiki/Core_And_Compatibility_in_Contexts
注意:我注意到您正在使用GLEW。我在过去遇到过GLEW和核心上下文的问题。这是因为它使用了一个不推荐使用的方法来请求扩展字符串(因此在核心上下文中失败)。它看起来好像不支持任何扩展。如果发生这种情况,请参阅GLEW网站,您可以将一个实验选项传递给它的init以使其工作。
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- C++:无法使用 "=" 运算符更改 std::p air 的值
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 使用 std::p air 进行返回值优化
- 标准::在双类和类的 std::p air 上更大
- 为什么 std::p air 的大小与其元素的大小之和不同?
- 像 std::list<std::p air<string, string>> 这样的结构在返回时会被复制吗?
- 查找 std::vector 中的最小值和最大值 std::p air
- 地图是否将元素存储为 std::p air?
- std::p air 会破坏其动态分配的对象吗?
- 如何在 std::p air 中使用 System::Guid 和自定义枚举?
- boost::mpl 不使用(甚至不兼容)std::p air 的原因是什么?
- 在具有 std::p air 键和值的映射中添加 b2vec2
- 无法访问 std::p air 的成员秒
- 如何在 std::map 中从 std::vector of std::p air 中获取输入?
- 二进制">>":未找到采用类型为"std::p air<int,int>"的右操作数的运算符
- 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用):在 Macbook 上
- 初始化 std::initializer_list 通过 std:: 初始化 std::p air 在初始化 std::array 时不起作用?
- 通过预处理器创建 std::p air<std::string,some_enum>
- OpenGL 3.x于2012年中期在Macbook Air上发布