什么是现代OpenGL相当于glBegin/glEnd

use*_*590 3 c++ opengl abstraction immediate-mode

我正在为OpenGL构建一个图形API,它基于基本的调用绘图图形样式.基本上,不是将数据存储到GPU中,而是使用它的句柄调用它,而是提供信息以绘制每次更新应该绘制的内容.我知道它很慢,但它很简单,适用于非性能关键应用程序.无论如何,有没有现代的glBegin/glEnd?它不需要调用每个顶点,但我可以在每次更新时发送数据,而不将顶点存储在gpu中?

Val*_*tin 5

你几乎回答了自己的问题.

是否有任何现代等效于glBegin/glEnd?它不需要调用每个顶点,但我可以在每次更新时发送数据,而不将顶点存储在gpu中?

基本上没有,现代的方法是使用VAOs驻国际中心组织(和企业家们).

如果您要更改VBO中的数据,请记住您可以更改glBufferData中mode参数.

  • GL_STREAM_DRAW - 数据存储内容将被修改一次并最多使用几次.

  • GL_STATIC_DRAW - 数据存储内容将被修改一次并多次使用.

  • GL_DYNAMIC_DRAW - 数据存储内容将被重复修改并多次使用.

然后GL_STATIC_DRAW使用GL_DYNAMIC_DRAW它会比使用时更多地增加FPS GL_STATIC_DRAW,尽管这取决于数据量以及更改频率的频率.但是尽可能多地限制它,就像你不需要更新缓冲区中的数据一样.

您可以在此处阅读有关OpenGL Wiki上不同缓冲区的更多信息.