【发布时间】:2013-01-05 22:29:34
【问题描述】:
我在 VBO 和渲染缓冲区的示例代码(在 O'Reilly 的书中)中注意到绑定不止一次。这背后的原因是什么?例如,您可能在 OpenGL 例程的顶部有这个:
glGenBuffers(1, &m_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
然后在画之前,你再画一遍:
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
glVertexPointer(3, GL_FLOAT, sizeof(Vertex), 0);
//on to the drawing routine
去掉其中任何一个都会导致绘图不出现,那为什么还要绑定两次呢?
另一个例子首先我们这样做:
// Create & bind the color buffer so that the caller can allocate its space.
glGenRenderbuffersOES(1, &m_colorRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer);
然后,在创建顶点等之后,我们稍后再做一次:
// Bind the color buffer for rendering.
glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer);
【问题讨论】:
-
这不是真正的重复,而是回答一个问题,回答另一个问题。
-
如果它不是真正的重复,它不应该投票关闭作为重复。您也不能假设提问者看到了两个不同问题之间的直接关系。
-
您自己注意到,如果您在进行绘图操作之前忽略绑定缓冲区,事情将无法正常工作。所以关于绑定过程的一些东西让 OpenGL 知道该使用什么。恕我直言,这是一个非常简单和明显的心理联系。投票赞成关闭,因为这两个问题之一是多余的,其中一个应该关闭。
-
傲慢。 “在我看来,这是一种非常简单而明显的心理联系。”我想你从来没有问过一个比你更了解的人,并且发现这个概念很简单,而你却发现它令人困惑?从来没有?
-
我想这样说:我确实学习了编程(和 OpenGL),当时没有教程,你必须自己尝试或阅读规范文档,或者通过推断。当然,我四处打听,但我通常会先做一些研究,然后才问我什么时候陷入困境以至于我看不到出路。找出 glBindBuffer 的作用,或 glVertexPointer/glVertexAttribPointer 如何与缓冲区对象交互,比阅读它们的参考文档需要更多的努力。
标签: opengl opengl-es opengl-es-2.0