Я пытаюсь настроить базовое приложение 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
проверки). Я предполагаю, что то, что я упускаю, достаточно очевидно, чтобы никто не удосужился указать это в объяснениях, поэтому я буду чувствовать себя довольно глупо, когда узнаю, что происходит не так.
Любые предложения о том, что мне здесь не хватает?