Debugging OpenGL奇怪的错误,从VBO不渲染任何内容

Debugging OpenGL奇怪的错误,从VBO不渲染任何内容,debugging,opengl,vbo,Debugging,Opengl,Vbo,我有一个OpenGL项目的代码,它什么也没画: glBindBuffer(GL_ARRAY_BUFFER, g_terrainVBO); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); // Bind the buffers glBindBuffer(GL_ARRAY_BUFFER, g_cubeVBO); glBindBuffer(GL_ELEMENT_AR

我有一个OpenGL项目的代码,它什么也没画:

glBindBuffer(GL_ARRAY_BUFFER, g_terrainVBO);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3,        GL_FLOAT, GL_FALSE, 0, 0);

// Bind the buffers
glBindBuffer(GL_ARRAY_BUFFER, g_cubeVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, g_cubeIBO);

// Draw the elements on the GPU
glDrawElements(
        GL_TRIANGLES,
        3*12,
        GL_UNSIGNED_INT,
        0); // SIZE IN BYTES, REMEMBER!

// Disable the vertex attributes (not necessary but recommended)
glDisableVertexAttribArray(0);
但是当我移开线的时候

glBindBuffer(GL_ARRAY_BUFFER, g_terrainVBO);
立方体模型被完美地渲染。现在,
g_terrainVBO
确实存在,因为我使用

// verify buffer size
int nBufferSize = 0;
glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &nBufferSize);
int originalVertexArraySize = ( nBufferSize / sizeof(TerrainModel::Vertex) );
cout << "Buffer size: " << originalVertexArraySize << endl;
//验证缓冲区大小
int nBufferSize=0;
glGetBufferParameteriv(GL_数组缓冲区、GL_缓冲区大小和nBufferSize);
int originalvertexarysize=(nBufferSize/sizeof(TerrainModel::Vertex));

你能想象这里会发生什么吗

如果相对于地形设置指针,则它将绘制地形<代码>glBindBuffer(GL_数组_BUFFER,g_cubeVBO)在此代码中不执行任何操作

但是,假设这是您唯一的图形代码,那么如果删除
glBindBuffer(GL\u ARRAY\u BUFFER,g\u terrainVBO)
,下次绘制时将使用
g_cubeVBO
(因为指针在调用时使用绑定到
GL_数组_缓冲区的内容)

使用立方体中的索引渲染地形也没有多大意义

在绑定多维数据集VBO以恢复世界的某些健全性后添加以下内容:
非常感谢!我太傻了,我认为u设置指针的顺序并不重要,因为它只会在调用draw调用之前设置GPU上的状态。我现在明白了。。。然后剩下的问题是找出为什么我的地形没有显示,它确实会影响性能,但看不到任何图形。。。但至少我现在看到了立方体
glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, 0);