我正在为OpenGL构建一个图形API,它基于基本的调用绘图图形样式.基本上,不是将数据存储到GPU中,而是使用它的句柄调用它,而是提供信息以绘制每次更新应该绘制的内容.我知道它很慢,但它很简单,适用于非性能关键应用程序.无论如何,有没有现代的glBegin / glEnd?它不需要调用每个顶点,但我可以在每次更新时发送数据,而不将顶点存储在gpu中?
解决方法:
你几乎回答了自己的问题.
is there any modern equivalent to glBegin/glEnd? It doesn’t have to a call for every vertex, but a way where I can send the data each update, without storing the vertices in the gpu?
基本上没有,现代的方法是使用VAOs和VBOs(以及IBO).
如果您要更改VBO中的数据,请记住您可以在glBufferData中更改mode参数.
> GL_STREAM_DRAW – 数据存储内容将被修改一次,最多使用几次.
> GL_STATIC_DRAW – 数据存储内容将被修改一次并多次使用.
> GL_DYNAMIC_DRAW – 数据存储内容将被重复修改并多次使用.
然后使用GL_DYNAMIC_DRAW而不是使用GL_STATIC_DRAW,与使用GL_STATIC_DRAW时相比,这将增加FPS,尽管这取决于数据量以及更改频率的频率.但是尽可能多地限制它,就像你不需要更新缓冲区中的数据一样.
您可以在OpenGL’s Wiki click here上阅读有关不同缓冲区的更多信息.