在 Windows 上使用 ANGLE 和 GLFW 设置 C++ 项目
Setting up a C++ project using ANGLE and GLFW on Windows
我正在尝试使用 ANGLE 在 Windows 上设置基本的 OpenGL ES 2.0 应用程序。我已经通过 vcpkg 和 ANGLE 安装了 GLFW(通过使用 #7923 and #8785 修补 vcpkg 或在本地构建)并且可以构建应用程序。我在输出目录中也有 d3dcompiler_47.dll 。不幸的是,在运行时它看起来像 none 的 OpenGL ES 调用是成功的。
我正在初始化 GLFW,如下所示:
#include <iostream>
#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>
int main()
{
if (!glfwInit())
{
std::cerr << "Could not init GLFW\n";
return 1;
}
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
auto window = glfwCreateWindow(640, 480, "Test GLES", nullptr, nullptr);
if (!window)
{
std::cerr << "Could not create window\n";
glfwTerminate();
return 1;
}
glfwMakeContextCurrent(window);
// rest of code goes here
调用 glfwMakeContextCurrent
后,我希望 OpenGL ES 上下文可用。然而:
- 对
glGetString(GL_VERSION)
、glGetString(GL_RENDERER)
和 glGetString(GL_VENDOR)
的调用都是 return 空指针。
- 调用
glCreateShader(GL_VERTEX_SHADER)
returns 0(即失败),但 glGetError()
给出 GL_NO_ERROR
.
相同的代码在同一台机器上的 Linux 上运行正常,所以我假设我需要做一些其他事情才能让事情在 Windows.
上运行
我的搜索没有提供多少有用的信息来执行此操作(但它确实建议进行 glGetString
检查)。我假设我遗漏的内容非常明显,没有人愿意将其放入解释中,所以当我知道出了什么问题时,我会觉得自己很傻。
对我在这里遗漏的内容有什么建议吗?
按照规定,您应该请求 OpenGL ES 上下文:
glfwWindowHint (GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
https://www.glfw.org/docs/latest/window_guide.html#GLFW_CONTEXT_CREATION_API_hint
我正在尝试使用 ANGLE 在 Windows 上设置基本的 OpenGL ES 2.0 应用程序。我已经通过 vcpkg 和 ANGLE 安装了 GLFW(通过使用 #7923 and #8785 修补 vcpkg 或在本地构建)并且可以构建应用程序。我在输出目录中也有 d3dcompiler_47.dll 。不幸的是,在运行时它看起来像 none 的 OpenGL ES 调用是成功的。
我正在初始化 GLFW,如下所示:
#include <iostream>
#define GLFW_INCLUDE_ES2
#include <GLFW/glfw3.h>
int main()
{
if (!glfwInit())
{
std::cerr << "Could not init GLFW\n";
return 1;
}
glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
glfwWindowHint(GLFW_SAMPLES, 4);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
auto window = glfwCreateWindow(640, 480, "Test GLES", nullptr, nullptr);
if (!window)
{
std::cerr << "Could not create window\n";
glfwTerminate();
return 1;
}
glfwMakeContextCurrent(window);
// rest of code goes here
调用 glfwMakeContextCurrent
后,我希望 OpenGL ES 上下文可用。然而:
- 对
glGetString(GL_VERSION)
、glGetString(GL_RENDERER)
和glGetString(GL_VENDOR)
的调用都是 return 空指针。 - 调用
glCreateShader(GL_VERTEX_SHADER)
returns 0(即失败),但glGetError()
给出GL_NO_ERROR
.
相同的代码在同一台机器上的 Linux 上运行正常,所以我假设我需要做一些其他事情才能让事情在 Windows.
上运行我的搜索没有提供多少有用的信息来执行此操作(但它确实建议进行 glGetString
检查)。我假设我遗漏的内容非常明显,没有人愿意将其放入解释中,所以当我知道出了什么问题时,我会觉得自己很傻。
对我在这里遗漏的内容有什么建议吗?
按照规定,您应该请求 OpenGL ES 上下文:
glfwWindowHint (GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
https://www.glfw.org/docs/latest/window_guide.html#GLFW_CONTEXT_CREATION_API_hint