OpenGL 4.4 / ES 3.0并在传递之间缓存顶点数据

时间:2014-01-15 02:37:10

标签: opengl opengl-es glsl

是否可以将顶点数据流出顶点着色器以供日后使用?我已经读过DirectX 11能够在绘制时将顶点数据流出来,因此想知道最新的OpenGL是否也支持类似的东西。我想在渲染过程之间重复使用相同的顶点数据,而不是每次都重新创建相同的蒙皮顶点数据,这是计算着色器更适合的吗?

2 个答案:

答案 0 :(得分:1)

转型反馈

来自维基页面:

  

变换反馈是捕获由其生成的基元的过程   顶点处理步骤,记录来自这些原语的数据   进入缓冲对象

然后您可以稍后再次绘制该数据。您可以使用它来避免重新蒙皮并重新细分网格。

wiki page涵盖了足够的理由让你入门。

要获得全面的概述,您需要查看specification

可用的教程很不错(我至少看过那些)并且有一些googling很容易找到。

答案 1 :(得分:0)

“我读过DirectX 11能够在绘制”

时流出顶点数据

您需要2个线程,一个用于绘图,另一个用于将顶点数据“流式传输”到GPU。

为此,您需要有两个OpenGL上下文 - http://www.equalizergraphics.com/documentation/parallelOpenGLFAQ.html

更多: Multithreaded Rendering on OpenGL

这是来自iOS OpenGL ES文档,但概念类似: https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ConcurrencyandOpenGLES/ConcurrencyandOpenGLES.html#//apple_ref/doc/uid/TP40008793-CH409-SW2

“我想在渲染过程之间重用相同的顶点数据,而不是重新创建”

看起来你正在寻找VBO:

  

顶点缓冲区对象(VBO)是一个缓冲区对象,用作顶点数组的数据源。它与任何其他缓冲区对象没有区别,用于转换反馈或异步像素传输的缓冲区对象可用作顶点数组的源值。