Правильная настройка буфферов OpenGL по данным GLTF 2.0 файла, а также их отрисовка

У меня есть проблема связанная с правильной настройкой буфферов OpenGL, а так же понятием как их отрисоовать. Я использую библиотеку TinyGLTF. Я инициализирую буффер так:

glBufferStorage(GL_ARRAY_BUFFER, buffer.data.size(), buffer.data.data(), 0)

А потом пытаюсь сказать OpenGL как эти данные хранятся. В данный момент я заполняю только данные о позиции. Я делаю это вот так:

count = accessor.count; // count это переменная класса типа int
type = accessor.componentType;
int byteStride = accessor.ByteStride(bview); // bview это bufferView
int size = accessor.type;
glVertexAttribPointer(0, size, type, GL_FALSE, byteStride, (GLvoid*)(&bview.byteOffset+accessor.byteOffset));
glEnableVertexAttribArray(0);

И тут появляется проблема, при отрисовке glDrawArrays(GL_TRIANGLES, 0, count); у меня пустой экран, но OpenGL не сыпет ошибками (у меня реализован автоматический debug output). Но стоит в вызове glVertexAttribPoiner заменить byteStride на 32 как у меня появляются треугольники, правда они расположены не правильно. Из этого у меня появилось несколько теорий:

  1. Я не правильно храню данные в буфере и указываю не правильное смещение
  2. Я получаю не правильный byteStride
  3. Это и 1, и 2 варианты

И на последок, я правильно создаю буфферы. У меня присутствуют вызовы glGenBuffers и glGenVertexArrays. А так же я получаю буферы следующим образом:

// index - это индекс нода, который я получаю извне и он точно ссылается на
// существующий Node из массива, а также model это тип tinygltf::Model*
tinygltf::Node node = model->nodes[index];
tinygltf::Mesh &mesh = model->meshes[node.mesh];        
tinygltf::Primitive &prim = mesh.primitives[0];
tinygltf::Accessor &access = model->accessors[prim.attributes["POSITION"]];
tinygltf::BufferView &bview = model->bufferViews[access.bufferView];
tinygltf::Buffer &buff = model->buffers[bview.buffer];

И у меня есть ещё вопросы:

  1. Как получить и задать GL_ELEMENT_ARRAY_BUFFER в случае его присутствия
  2. И как правильно вызывать glDrawElements

Ответы (0 шт):