1

我在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]

从这里我不知道该寻找什么。这段代码应该工作吗?还是我错过了一些仪式?许多资源已经过时,因此更难弄清楚。

4

1 回答 1

3

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);

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

于 2018-04-12T17:36:26.757 回答