Mic*_* IV 2 opengl-es glfw egl
我正在尝试设置 GLFW 来创建窗口和 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);
Run Code Online (Sandbox Code Playgroud)
使用GLFW_NATIVE_CONTEXT_API作为 GLFW_CONTEXT_CREATION_API 提示为我提供了有关供应商的以下信息:
GL 版本:OpenGL ES 3.2 NVIDIA 368.69 GL 供应商:NVIDIA Corporation GL 渲染器:GeForce GTX 960M/PCIe/SSE2 GLSL 版本:OpenGL ES GLSL ES 3.20
然后它甚至无法创建着色器(glCreateShader())返回0。
但是,如果我使用GLFW_EGL_CONTEXT_API的提示标志,我就可以成功完成大多数 GL 例程,例如着色器加载、程序编译和链接、GL VBO 设置等。但随后我在 glDrawElements() 上失败。
如果我使用此设置打印供应商信息,我可以看到:
GL 版本:4.5.0 NVIDIA 368.69 GL 供应商:NVIDIA Corporation GL 渲染器:GeForce GTX 960M/PCIe/SSE2 GLSL 版本:4.50 NVIDIA
所以,对我来说很奇怪的是,当 EGL 应该是上下文创建的底层 API 时,我却得到了桌面 OpenGL 设置。
另外,如果我尝试手动检索 glDrawElements 的函数指针,它会返回 null。
PFNGLDRAWELEMENTSPROC func = reinterpret_cast<PFNGLDRAWELEMENTSPROC>
(eglGetProcAddress("glDrawElements"));
Run Code Online (Sandbox Code Playgroud)
我想了解可能出现的问题以及如何以正确的方式使用 GLFW 进行 GL ES 上下文创建。
由于没有人回答我自己的问题,并且因为我很早之前就找出了问题的根源,这里是解释:
GLFW 对于 GLES 上下文初始化工作得很好。问题出在链接的库上。在 Windows 上模拟 GLES 时,不得与 opengl32.lib 链接。在我的例子中,我使用 PowerVR SDK 及其 ES2 和 ES3 库。因此,以下库是必须的:
glfw3.lib
libEGL库
libGLESv2.lib
在我的链接器中,因为默认情况下我使用桌面 OpenGL,所以我还链接了opengl32.lib,它可能优先于其他 GL 库。在桌面平台上运行 GLES 时,请确保排除它。
| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |