Что указывает glGenBuffers, возвращая ноль? - PullRequest
0 голосов
/ 01 марта 2019

Моя программа создает много буферов вершин сразу после запуска, как только данные вершин загружаются по сети, а затем время от времени удаляет или создает буферы вершин во время горячей петли.Почти всегда он работает, как и ожидалось, но иногда на некоторых машинах создание буфера в горячем цикле приводит к нулю имен.

Это не похоже на недопустимое состояние, потому что оно сработало бы намного раньше.Кроме того, документация и спецификация недостаточно ясны в отношении ошибок такого типа.Означает ли это, что в реализации не хватает имен буферов?

Я также нашел этот поток .Topicstarter говорит, что инициализация имен перед передачей их в glGenBuffers устранила его проблему.Нужно ли инициализировать эти значения?

1 Ответ

0 голосов
/ 02 марта 2019

Так как на некоторых машинах это работает, glGenBuffer, возвращающий 0, может быть из-за неправильно настроенного контекста. Здесь davek20 имел ту же проблему с glGenBuffers.Он решил эту проблему, исправив неправильную настройку контекста.

Как указано на здесь на странице «Начало работы» GLFW, в разделе «Создание окна и контекста» указано

"Если требуемая минимальная версия не поддерживается на машине, создание контекста (и окна) завершается неудачно."

, и эти ваши машины могут иметь правильные драйверы, но, вероятно, не поддерживают все или некоторые версии OpenGL, как указано в документации.

Если вы используете GLFW_CONTEXT_VERSION_MAJOR иGLFW_CONTEXT_VERSION_MINOR рассмотрите возможность их изменения.Я также рекомендую проверить создание контекста для возврата NULL (0).

Пример со страницы документации GLFW:

GLFWwindow* window;

if (!glfwInit())
    return -1;

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

window = glfwCreateWindow(960, 540, "OpenGL", NULL, NULL);
if (!window)
{
    glfwTerminate();
    return -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...