0

我试图设置一个带有两层绘图的 2d 屏幕

1) 由白色实线组成的网格 2) 由彩色正方形组成的瓷砖

这是我的opengl代码:

设置网格

//glGenBuffers(1, &gridVAO); 
glGenVertexArrays(1, &gridVAO); // **updated**
glBindVertexArray(gridVAO);

glGenBuffers(2, gridVBO);

glBindBuffer(GL_ARRAY_BUFFER, gridVBO[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(gridPos), gridPos, GL_STATIC_DRAW);
glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, gridVBO[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(gridColors), gridColors, GL_STATIC_DRAW);
glVertexAttribPointer(vColor, 3, GL_FLOAT, GL_FALSE, 0, 0);


glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);

设置磁贴

// glGenBuffers(1, &tileVAO);
glGenVertexArrays(1, &tileVAO); //**updated**

glBindVertexArray(tileVAO);

glGenBuffers(2, tileVBO);

glBindBuffer(GL_ARRAY_BUFFER, tileVBO[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(tilePos), tilePos, GL_STATIC_DRAW);
glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, tileVBO[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(tileColors), tileColors, GL_STATIC_DRAW);
glVertexAttribPointer(vColor, 3, GL_FLOAT, GL_FALSE, 0, 0);


glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

画瓷砖

glBindVertexArray(tileVAO);
glDrawArrays(GL_TRIANGLES, 0, TILE_COUNT_X * TILE_COUNT_Y * 6);
glBindVertexArray(0);

绘制网格

glBindVertexArray(gridVAO);
glDrawArrays(GL_LINES, 0, girdVertexCount);
glBindVertexArray(0);

通过只保留 setup+draw 网格产生这个: 设置+绘制网格

通过仅保留设置+绘制图块会产生以下效果: 设置+绘制瓷砖

VAO 自身正常工作。

然而,魔术从这里开始:

如果我做的组合

setup grid
setup tiles

// draw tiles
draw grid

它产生这个: 错误

看起来绘制网格代码从瓷砖的 VAO 中获取缓冲区。请帮助:D

更新:

更正后glGenVertexArrays同样的问题仍然发生

但我发现两个 VAO 都是 0

cout<<"gridVAO "<<gridVAO<<endl;
cout<<"tileVAO "<<tileVAO<<endl;

输出:

gridVAO 0
tileVAO 0
4

0 回答 0