gpt4 book ai didi

c++ - glGenBuffers 2 名称?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:55 26 4
gpt4 key购买 nike

我一直在实现一个基于本教程的小型 opengl 应用程序: http://openglbook.com/the-book/chapter-4-entering-the-third-dimension/

我理解大部分代码,但我真的对这一行感到困惑:

glGenBuffers(2, &BufferIds[1]); 

然后是

glBindBuffer(GL_ARRAY_BUFFER, BufferIds[1]);
glBufferData(GL_ARRAY_BUFFER, size, &theModel->theMesh.pos[0], GL_STATIC_DRAW);

我假设我只需要一个免费的名称/id 来绑定(bind)我的缓冲区数据,但是如果我更改

 glGenBuffers(2,

 glGenBuffers(1,

缓冲区绑定(bind)失败,没有任何作用。

BufferIds 的大小为 3 (GLuint BufferIds[3])。我想让它成为 BufferIds[2],第一个插槽用于 VAO,第二个插槽用于 VBO。

glGenVertexArrays(1, &BufferIds[0]); 
ExitOnGLError("ERROR: Could not generate the VAO");
glBindVertexArray(BufferIds[0]);
ExitOnGLError("ERROR: Could not bind the VAO");

glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);

ExitOnGLError("ERROR: Could not enable vertex attributes");

glGenBuffers(2, &BufferIds[1]); //if this gets from changed 2 to 1 ...
ExitOnGLError("ERROR: Could not generate the buffer objects");

int size = theModel->theMesh.pos.size() * sizeof(theModel->theMesh.pos[0]) ;

glBindBuffer(GL_ARRAY_BUFFER, BufferIds[1]);
ExitOnGLError("ERROR: Could not bind the VBO to the VAO"); // ...this error triggers
glBufferData(GL_ARRAY_BUFFER, size, &theModel->theMesh.pos[0], GL_STATIC_DRAW);

最佳答案

那是因为你将 BufferIds[1] 传给了 glBindBuffer。索引 1 实际上是第二个元素,因此当您只创建一个缓冲区时代码会崩溃。

试试看:

glGenBuffers(1, &BufferIds[0]);
glBindBuffer(GL_ARRAY_BUFFER, BufferIds[0]);

关于c++ - glGenBuffers 2 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com