OpenGL несовместимая загрузка VBO - PullRequest
0 голосов
/ 04 апреля 2019

Я пишу приложение OpenGL 3.3 C в Windows 10. У меня оно работает большую часть времени.Иногда vbo меша не содержит правильных данных.В других случаях это так.В коде нет изменений.

Я попытался перезагрузить компьютер и обновил графический драйвер.Я запустил его в RenderDoc, чтобы убедиться, что я делаю вещи в правильном порядке.

glGenVertexArrays(1, &mesh->vao);
glBindVertexArray(mesh->vao);

glGenBuffers(1, &mesh->verts);
glBindBuffer(GL_ARRAY_BUFFER, mesh->verts);

glBufferData(GL_ARRAY_BUFFER, sizeof(float) * data->vertCount * 2, &data->verts[0], GL_STATIC_DRAW);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(0);

glGenBuffers(1, &mesh->ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * data->indicieCount, &data->indicies[0], GL_STATIC_DRAW);

А затем выполнить рендеринг.Обратите внимание, что render-> meshes [i] -> count был установлен на счетчик индикаторов

glBindVertexArray(render->meshes[i]->vao);
glEnableVertexAttribArray(0);

glDrawElements(GL_TRIANGLES, render->meshes[i]->count, GL_UNSIGNED_INT, NULL);

Данные вершин и индикетов должны быть правильно загружены и сохранены в OpenGL.При просмотре в RenderDoc данные vbo частично / полностью неверны.У меня было несколько циклов for, прежде чем вручную распечатывать данные, чтобы проверить поступающие данные.Перед загрузкой данные всегда верны.

1 Ответ

0 голосов
/ 04 апреля 2019

Я думаю, что у @ Rabbid76 была правильная идея.Хотя моя функция C имела доступ к буферам данных, OpenGL не всегда имел доступ.Копирование данных из исходных буферов данных в новые буферы данных, которые были выделены внутри функции C, устранило проблему.

EDIT: даже если буферы C там, где отображаются должным образом, сами буферы там, где они уже освобожденывремя загрузки.

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