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 时确定你排除它。
我正在尝试设置 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 时确定你排除它。