GLFW 无法加载所有 GL ES 2.0 函数

GLFW fails to load all GL ES 2.0 functions

我正在尝试设置 GLFW 以创建 window 和 OpenGL ES 2.0 上下文,因为我需要开箱即用的东西来管理输入回调等。 问题是这样的,如果我使用以下设置:

    glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
    glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_NATIVE_CONTEXT_API);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);

    glfwindow  = glfwCreateWindow(width, height, "Window Title", NULL, NULL);
    if (!glfwindow)
    {
        glfwTerminate();
        exit(1);
    }

    glfwMakeContextCurrent(glfwindow);

使用 GLFW_NATIVE_CONTEXT_API 获得 GLFW_CONTEXT_CREATION_API 提示给我以下供应商信息:

GL version:OpenGL ES 3.2 NVIDIA 368.69 GL vendor:NVIDIA Corporation GL renderer:GeForce GTX 960M/PCIe/SSE2 GLSL version:OpenGL ES GLSL ES 3.20

然后它甚至无法创建着色器 (glCreateShader()) returns 0.

但是如果我使用 GLFW_EGL_CONTEXT_API 代替那个提示标志,我设法完成大部分 GL 例程,如着色器加载、程序编译和 link,GL VBO 设置 etc.But 然后我在 glDrawElements() 上失败了。

如果我使用此设置打印供应商信息,我可以看到:

GL version:4.5.0 NVIDIA 368.69 GL vendor:NVIDIA Corporation GL renderer:GeForce GTX 960M/PCIe/SSE2 GLSL version:4.50 NVIDIA

所以,当 EGL 应该是上下文创建的基础 API 时,我很奇怪,我设置了桌面 OpenGL。

此外,如果我尝试手动检索 glDrawElements 的函数指针,它 returns 为空。

PFNGLDRAWELEMENTSPROC func = reinterpret_cast<PFNGLDRAWELEMENTSPROC>
(eglGetProcAddress("glDrawElements"));

我想了解问题所在以及如何正确使用 GLFW 创建 GL ES 上下文。

由于没有人回答我自己的问题,而且我很早就找到了问题的根源,所以这里解释一下:

GLFW 在 GLES 上下文中工作得很好 initialization.The 问题是库 linked.One 在 Windows.In 我的 Windows.In 上模拟 GLES 时不能 link 和 opengl32.lib如果我使用 PowerVR SDK 及其 ES2 和 ES3 libs.Therefore,以下库是必需的:

glfw3.lib

libEGL.lib

libGLESv2.lib

在我的 linker 中,因为默认情况下我使用的是桌面 OpenGL,所以我也 link 使用 opengl32.lib,这可能优先于其他 GL libs.Make 当 运行 桌面平台上的 GLES 时确定你排除它。