glBufferData завершается с ошибкой: «Объект массива не активен». - PullRequest
0 голосов
/ 07 марта 2019

РЕДАКТИРОВАТЬ: Хорошо, я мог бы найти часть моей ошибки.Я думал, что все GL_DEBUG_TYPE_ERROR сообщения об ошибках являются действительными причинами для остановки выполнения, поэтому мой обратный вызов отладочного сообщения был настроен на выход из программы, если он встречает GL_DEBUG_TYPE_ERROR .

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

==== Оригинальный вопрос ====

При запуске относительно простого тестового проекта я получаю

GL_INVALID_OPERATION error generated. Array object is not active.

при запуске

glBufferData(GL_ARRAY_BUFFER, sizeof(mesh), mesh, GL_STATIC_DRAW);

Насколько мне известно, мне не нужен активныйVAO для установки данных VBO, только для вызовов VertexAttribArray / Pointer .

Но даже при активном / связанном VAO выдается та же ошибка.

Здесьупрощенная версия моего кода:

float mesh[] =
{ -0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5, -0.5, -0.5 };

{
program = glCreateProgram();

// Compile and attach shaders
...

glLinkProgram(program);

    // === Vertex Buffer ===
// Generate new buffer for vertex coordinates
glGenBuffers(1, &vb);
// Use for all ArrayBuffer operations
glBindBuffer(GL_ARRAY_BUFFER, vb);

// Runs until here. glCheckError() reports no error.
// DebugMessageCallback is also not triggered.
glBufferData(GL_ARRAY_BUFFER, sizeof(mesh), mesh, GL_STATIC_DRAW);

...
}

1 Ответ

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

Проблема заключалась в том, что мой оконный менеджер вызывал метод draw в отдельном потоке, пока инициализация еще продолжалась. Чтобы исправить это, я добавил простую проверку isInitialized в функцию рисования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...