在OpenGL中渲染对象的哪种方式更有效?

时间:2017-10-29 15:11:49

标签: c++ opengl gpu

使用OpenGL渲染具有相同形状但坐标不同的两个图形元素的方式更有效(例如,一个对象是颠倒的)?

  1. 使用CPU生成两组不同的点,然后在while循环中仅使用一个着色器
  2. 使用CPU生成一组点,创建两个不同的着色器,然后在while循环中在它们之间切换?
  3. 其他问题:是否有可能在着色器中创建一组点? (这些点将使用sin()cos()函数计算)

1 个答案:

答案 0 :(得分:1)

如果在第一种情况下你在OpenGL函数调用之间切换缓冲区,则可能两种解决方案都同样糟糕。如果你在一个缓冲区中持有两个形状并在一次调用中绘制所有形状,那么它将比解决方案2更快,但它需要两倍的内存,这也是不好的。 (你应该有一个缓冲区用于形状,另一个缓冲区用于转换)
通常,您应该使用尽可能少的OpenGL调用。

关于第二个问题:是的。例如,您可以使用硬编码数组或从gl_VertexID派生点坐标。