SDL 无法在 2.1 Mac OSX Yosemite 上加载 OpenGL 上下文
SDL Can't load OpenGL Context over 2.1 Mac OSX Yosemite
我正在运行Mac OSX Yosemite 10.10版和SDL(2.0.3)的最新版本。
我正在尝试至少使用OpenGL版本3+。在不执行任何操作的情况下,我的OpenGL版本返回2.1 INTEL-10.0.86
。
OpenGL命令可以工作,但这显然不是我需要的版本。
因此,在做了一些研究之后,我发现用SDL更改版本的方法是在初始化SDL之后,但在定义上下文之前,通过SDL_GL_SetAttribute(SDL_GLattr attr, int value)
函数。这是我的代码:
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
{
printf("Failed to initialize SDL. Error (SDL): %s.n", SDL_GetError());
return false;
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help
window = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, (SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN));
if (!window)
{
printf("Failed to create the window. Error (SDL): %s.n", SDL_GetError());
return false;
}
context = SDL_GL_CreateContext(window);
使用此代码,OpenGL版本将报告4.1 INTEL-10.0.86
。这会很好,但我的OpenGL调用都不起作用了,所以我在调用函数后检查OpenGL错误,它返回1282
。
奇怪的是,当我把代码改成这个时
...
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
//SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help
...
它给出相同的输出4.1 INTEL-10.0.86
,并返回相同的OpenGL错误(1282),并且OpenGL函数都不起作用。
我的最后一次尝试也失败了,结果不同。这是我的代码:
...
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help
...
返回的OpenGL新版本是null
,但如果我将major_version更改为2,将minor_version改为1,它将返回到我的原始版本2.1 INTEL-10.0.86
。
有人知道这个问题的解决办法吗?
--编辑--
在做了一些额外的研究之后,如果OpenGL在每次调用后返回1282,则上下文没有正确初始化。这让我相信这可能是SDL没有正确创建上下文的错误?(老实说,我不知道那么多,所以我要冒险了)。我将向SDL提交一个bug,看看这是否有帮助。
SDL_GL_CONTEXT_PROFILE_CORE
我的OpenGL调用[glMatrixMode、glLoadIdentity、glLoadIdentity、glBegin]都不再工作。。。
这些都是不推荐使用的,在Core上下文中不起作用。
如果你想继续使用核心上下文,你必须重新编写你的程序,不要使用不推荐使用的功能。
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- Python ctypes:不会按预期加载 dll
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 保存/加载大量短数组到二进制文件
- 使用 SDL2 和SDL_image C++加载图像
- 无法使用加载库卸载注入的 dll (C++)
- 是否有原子加载非原子值的函数?
- 将 bmp 文件加载到 TSpeedButton 中
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- SDL 无法在 2.1 Mac OSX Yosemite 上加载 OpenGL 上下文