opengl es 2 中缺少 glMapBuffer
glMapBuffer is missing from opengl es 2
为什么 opengl es 2.0 中缺少 glMapBuffer
?谁可以访问缓冲区数据以有效地更改它?只有glBufferSubData
才是修改buffer的最佳方式?
您需要分机 GL_OES_mapbuffer。这提供了 glMapBufferOES 和 glUnmapBufferOES。
映射子范围有单独的扩展:GL_EXT_map_buffer_range。
glMapBuffer
是 ES 2.0 中的 extension,不是核心规范的一部分。绝大多数设备(所有 iOS 和大多数 Andriod)都提供扩展,但这不是必需的。上传 VBO 数据的唯一核心方式是使用 glBufferData
或 glBufferSubData
.
"best" 传输缓冲区的方式取决于数据访问模式和您所针对的 OpenGL 驱动程序。这是一篇关于在 OpenGL ES 2.0 上的众多选项之间进行选择的好文章:
http://hacksoflife.blogspot.com/2013/04/there-must-be-50-ways-to-draw-your.html
这是一篇关于类似技术的较新文章。从 OpenGL 4.5 开始,持久映射似乎是最先进的:
https://www.opengl.org/wiki/Buffer_Object_Streaming
最后,"Open GL Insights" 一书有一整章讨论这个问题,包含在免费预览版中:
http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-AsynchronousBufferTransfers.pdf
为什么 opengl es 2.0 中缺少 glMapBuffer
?谁可以访问缓冲区数据以有效地更改它?只有glBufferSubData
才是修改buffer的最佳方式?
您需要分机 GL_OES_mapbuffer。这提供了 glMapBufferOES 和 glUnmapBufferOES。
映射子范围有单独的扩展:GL_EXT_map_buffer_range。
glMapBuffer
是 ES 2.0 中的 extension,不是核心规范的一部分。绝大多数设备(所有 iOS 和大多数 Andriod)都提供扩展,但这不是必需的。上传 VBO 数据的唯一核心方式是使用 glBufferData
或 glBufferSubData
.
"best" 传输缓冲区的方式取决于数据访问模式和您所针对的 OpenGL 驱动程序。这是一篇关于在 OpenGL ES 2.0 上的众多选项之间进行选择的好文章:
http://hacksoflife.blogspot.com/2013/04/there-must-be-50-ways-to-draw-your.html
这是一篇关于类似技术的较新文章。从 OpenGL 4.5 开始,持久映射似乎是最先进的:
https://www.opengl.org/wiki/Buffer_Object_Streaming
最后,"Open GL Insights" 一书有一整章讨论这个问题,包含在免费预览版中:
http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-AsynchronousBufferTransfers.pdf