Я пытаюсь настроить 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);
Использование 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"));
Я хотел бы понять, в чем может быть проблема и как правильно использовать GLFW для создания контекста GL ES.