使用 glDrawElements (iOS) 重用相同的缓冲区
Posted
技术标签:
【中文标题】使用 glDrawElements (iOS) 重用相同的缓冲区【英文标题】:Reusing same buffer with glDrawElements (iOS) 【发布时间】:2013-03-07 05:57:40 【问题描述】:是否可以创建一个 VBO 并在同一渲染周期中对 glDrawElements
的调用之间重用它? (我尝试并获得了奇怪的结果)。下面的示例缺少绑定等。
初始化代码(只执行一次) *:*
glGenBuffers(...)
glBufferData(...)
渲染帧代码(每帧执行):
glMapBufferOES(...)
//... Update buffer from index 0 to X
glDrawElements(...)
//... Update buffer from index 0 to Y
glDrawElements(...)
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
【问题讨论】:
【参考方案1】:您需要在绘制缓冲区之前取消映射。如果您不取消映射,这可能就是您使用 glDrawElements
看到奇怪结果的原因。
http://www.opengl.org/sdk/docs/man/xhtml/glMapBuffer.xml
在调用glDrawElements
后,您可以重新映射缓冲区并再次填充。
如果不立即重用缓冲区,您可能会获得更好的性能。抽签后立即重新映射可能会阻塞,直到抽签完成。
【讨论】:
确实,我怎么能错过。非常感谢!以上是关于使用 glDrawElements (iOS) 重用相同的缓冲区的主要内容,如果未能解决你的问题,请参考以下文章
使用 glDrawElements 绘制 std::vector