opengl - LWJGL 3.1.6 OpenGL 4.1 在 macOS High Sierra 上崩溃

标签 opengl crash lwjgl macos-high-sierra forward-compatibility

我有一个稍微修改过的 sample code 版本在 LWJGL 主页上找到。它可以工作,但它使用旧版 OpenGL 版本 2.1。如果我尝试使用 GLFW doc 中描述的向前兼容上下文,使用的版本是 4.1 (无论我提示什么主要/次要),窗口已创建,但在第一次调用 glPushMatrix() 时崩溃 .

像这样启用向前兼容性:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

我在控制台中打印的一些信息:

LWJGL 3.1.6 build 14
OS name Mac OS X
OS version 10.13.4
OpenGL version 4.1 ATI-1.66.31

记录:

[LWJGL] A function that is not available in the current context was called.
Problematic frame:
C  [liblwjgl.dylib+0x1c494]

从这里我不知道要寻找什么。这段代码应该有效吗?还是我错过了一些仪式?许多资源已经过时,使得解决问题变得更加困难。

最佳答案

glPushMatrix 不是 Core Profile 上下文的函数,而是 OpenGL < 3.2 的函数。

如果您想使用它(以及其他预核心功能),您需要一个兼容性上下文,而不是向前兼容上下文,也不是核心配置文件

GLFW 提示应该像这样,而不需要核心配置文件。

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);

驱动程序可能会提供最高的可用版本,但也包含所有旧功能。

关于opengl - LWJGL 3.1.6 OpenGL 4.1 在 macOS High Sierra 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49802367/

相关文章:

Mysql服务器占用CPU 500%

java - lwjgl 不满意链接错误

c++ - 对齐 SSBO 的内存(它是包含数组的结构数组)?

java - JOGL 2.0 和过剩

C++:__try...__except;在 Release模式下隐藏崩溃?

java - java.library.path 中没有 lwjgl - Netbeans

java - 带有 lwjgl 的任务栏图标?

c++ - Windows 上的 CMake - 使用导入的目标 OpenGL::GLU 时 FindOpenGL.cmake 中的错误?

c++ - 在 OpenGL 中使用过剩的 vsync 问题

iOS 委托(delegate)崩溃