Как связать несколько IBO из одного VBO в OpenGL

Я пытаюсь сделать два разных треугольника с IBO. Я сохранил шесть вершин в одном VBO и попытался получить к ним доступ через два отдельных IBO. Проблема в том, что первый IBO делает, а второй нет. CreateVertices и createIndices вызываются при инициализации.

    void createVertices()
{
//Vertex Data
GLfloat v[] = { 0.95f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
0.0f, -0.75f, 0.0f, 1.0f,                  //END OF TRIANGLE 1
-0.75, 0.75f, 0.5f, 1.0f,
-0.75, -0.75, 0.5f, 1.0f,
0.0f, -0.75, 0.5f, 1.0f };                  //END OF TRIANGLE 2

glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);

glBufferData(GL_ARRAY_BUFFER, sizeof(v), v, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);

glBindBuffer(GL_ARRAY_BUFFER, 0);
}

//////////

    void createIndices()
{

GLushort i[] = { 0,1,2};glGenBuffers(2, IBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO[0]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(i), i, GL_STATIC_DRAW);
size = (sizeof(i)/sizeof(GLushort));   //USED IN DRAWELEMENTSGLushort w[] = { 3,4,5};

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(w), w, GL_STATIC_DRAW);
size2 = (sizeof(i)/sizeof(GLushort));   //USED IN DRAWELEMENTSglBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}

/////////

    void Render()
{
glClear(GL_COLOR_BUFFER_BIT);

glUseProgram(shader.SProgram);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glVertexAttribPointer(0,4, GL_FLOAT, GL_FALSE, 0, 0);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO[0]);
glDrawElements(GL_TRIANGLES,size,GL_UNSIGNED_SHORT,(GLvoid*)IBO[0]);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO[1]);
glDrawElements(GL_TRIANGLES,size2,GL_UNSIGNED_SHORT,(GLvoid*)IBO[1]);

glUseProgram(0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}

1

Решение

Это не имеет смысла:

glDrawElements(GL_TRIANGLES,size,GL_UNSIGNED_SHORT,(GLvoid*)IBO[0]);
^^^^^^^^^^^^^^

Параметр для glDrawElements с привязкой к IBO — это смещение в буфере, как и в случае с gl… Pointer и VBO. Вы, вероятно, просто хотите этого

glDrawElements(GL_TRIANGLES,size,GL_UNSIGNED_SHORT,(GLvoid*)0);

для обоих ваших IBO и просто связать само IBO с

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO[…]);
1

Другие решения

Других решений пока нет …