Настройка проекта C++ с использованием ANGLE и GLFW в Windows

Я пытаюсь настроить базовое приложение OpenGL ES 2.0 в Windows, используя ANGLE. Я установил GLFW через vcpkg вместе с ANGLE (либо путем исправления vcpkg с помощью #7923 и #8785 или сборка локально) и могут создавать приложения. У меня также есть 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 проверки). Я предполагаю, что то, что я упускаю, достаточно очевидно, чтобы никто не удосужился указать это в объяснениях, поэтому я буду чувствовать себя довольно глупо, когда узнаю, что происходит не так.

Любые предложения о том, что мне здесь не хватает?


person Community    schedule 17.11.2019    source источник
comment
Поддерживает ли графический драйвер Windows OpenGL ES?   -  person Richard Critten    schedule 17.11.2019
comment
Поддерживает ли ваша видеокарта/драйвер OpenGL ES?   -  person Jose Maria    schedule 17.11.2019
comment
Насколько я понимаю, ANGLE в Windows должен переводить OpenGL ES в вызовы DirectX (dxdiag сообщает DirectX 12). Тем не менее карта определенно поддерживает GLES из Linux.   -  person    schedule 17.11.2019
comment
Ваша графическая карта может поддерживать OpenGL ES в Linux, но не в Windows.   -  person Jose Maria    schedule 17.11.2019
comment
@JoseMaria, возможно, но это один из случаев, который должен решать ANGLE. Я определенно могу запускать приложения Qt, которые используют OpenGL ES через ANGLE...   -  person    schedule 17.11.2019
comment
Я имею в виду, что вы забыли это: glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API)   -  person Jose Maria    schedule 17.11.2019


Ответы (1)


Как указано, вы должны запросить контекст 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

person Jose Maria    schedule 17.11.2019
comment
Потрясающе, спасибо. Выяснилось, что ни в одном из источников, которые я использовал, не упоминалось об этом, возможно, о некоторых изменениях в API за несколько лет, прошедших с момента их написания. - person ; 17.11.2019