c – 与glBegin / glEnd相当的现代OpenGL是什么

我正在为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?

基本上没有,现代的方法是使用VAOsVBOs(以及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上阅读有关不同缓冲区的更多信息.

上一篇:java – Bridge Pattern是否将抽象与实现分离?


下一篇:设计模式之:桥接模式