我有一个稍微修改过的 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/