我正在尝试使用 ANGLE 在 Windows 上设置一个基本的 OpenGL ES 2.0 应用程序。我已经通过 vcpkg 和 ANGLE(通过使用 #7923#8785 修补 vcpkg 或在本地构建)一起安装了 GLFW,并且可以构建应用程序。我还在输出目录中有 d3dcompiler_47.dll。不幸的是,在运行时,似乎没有任何 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) 的调用都返回一个空指针。
  • 调用 glCreateShader(GL_VERTEX_SHADER) 返回 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

    关于c++ - 在 Windows 上使用 ANGLE 和 GLFW 设置 C++ 项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58903643/

    10-12 16:37