OpenGL ES 2.0:使用 VBO 的 glDrawElements 之前所需的命令
我已经设置了一个带有顶点和索引数据的顶点缓冲区对象(VBO)。我还创建了一个 GLprogram 来使用自定义着色器,因此我在代码中调用 glUseProgram
。
我的顶点数据每一帧都会发生变化,因此我向两个 glBufferData
调用提供了 GL_STREAM_DRAW
(一个用于顶点数据,一个用于索引)。
当顶点数据发生变化时,我使用 glBufferSubData 来修改它们。在每一帧,我想从第一个顶点绘制到第 N 个顶点,其中 N 是一个变化的值。
我的问题是:每次调用 glDrawElements
时必须调用哪些命令?理想情况下,我只想调用 glDrawElements<出于性能原因,/code> 在每个帧中都有自己的内容。
我正在仔细阅读《OpenGL ES 2.0 编程指南》这本书,但它没有告诉我每次绘制时必须使用哪些命令,以及哪些命令只需要调用一次。
I've setup a Vertex Buffer Object (VBO) with vertex and index data. I've also created a GLprogram to use custom shaders, so I call glUseProgram
within my code.
My vertex data changes every frame, so I've supplied GL_STREAM_DRAW
to my two glBufferData
calls (one for vertex data, one for indices).
I use glBufferSubData
to modify regions of my vertex data when they change. At each frame I want to draw from the first vertex to the Nth, with N being a changing value.
My question is: which commands must I call every time that I call glDrawElements
? Ideally I'd like to simply call glDrawElements
on its own in each frame, for performance reasons.
I'm poring over the book "OpenGL ES 2.0 Programming Guide" but nowhere does it tell me which commands I must use every time I draw, and which I need to call only once.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
glDrawElements
提交几何图形。如果您使用的是 VBO,那么它会使用当前绑定的GL_ELEMENT_ARRAY_BUFFER
中的条目来索引GL_ARRAY_BUFFER
的相关部分或为每个属性绑定的缓冲区中的条目。如果您不更改任何其他绑定,则无需重复除
glDrawElements
之外的任何调用。如果在当前调用glDrawElements
的位置复制并粘贴该线以使其出现两次,则所有几何图形的绘制次数将是以前的两倍。glDrawElements
submits geometry. If you're using VBOs then it uses entries in the currently boundGL_ELEMENT_ARRAY_BUFFER
to index entries in the relevant portions of theGL_ARRAY_BUFFER
or buffers bound for each attribute.If you don't change any other bindings then is no need to repeat any call other than
glDrawElements
. If, where you currently callglDrawElements
you copy and paste that line to appear twice, all your geometry will be drawn twice as many times as before.