我试图用实例渲染一些树。这很奇怪,但在昨天晚上睡觉之前,我检查了代码,并且它处于运行状态,当我今天早上起床时,它在我打电话时崩溃glVertexAttribDivisor
我没有更改任何代码从昨天开始。
以下是我将数据发送到GPU进行实例化的方法。
glGenBuffers(1, &iVBO);
glBindBuffer(GL_ARRAY_BUFFER, iVBO);
glBufferData(GL_ARRAY_BUFFER, (ml_instance->i_positions.size()*sizeof(glm::vec4)) , NULL, GL_STATIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, (ml_instance->i_positions.size()*sizeof(glm::vec4)), &ml_instance->i_positions[0]);
然后在顶点规范中 -
glBindBuffer(GL_ARRAY_BUFFER, iVBO);
glVertexAttribPointer(i_positions, 4, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(i_positions);
glVertexAttribDivisor(i_positions,1); // **THIS IS WHERE THE PROGRAM CRASHES**
glDrawElementsInstanced(GL_TRIANGLES, indices.size(), GL_UNSIGNED_INT, 0,TREES_INSTANCE_COUNT);
我检查了ml_instance->i_positions
,它包含了需要渲染的所有数据。
我在顶点着色器中检查了i_positions
的值,它与我在那里定义的内容相同。
我这里的想法很少,一切看起来都很好。我错过了什么?