Opengl 未使用的带着色器的VBO

Opengl 未使用的带着色器的VBO,opengl,opengl-es,Opengl,Opengl Es,我有一个带有VAO和几个非交错VBO的网格类,用于连接顶点、法线、纹理坐标等。网格使用多个着色器绘制,其中一些着色器不需要所有附加的VBO(例如,它的阴影着色器不需要法线或纹理坐标) 为不使用顶点属性的着色器启用顶点属性似乎可以,但它是否会对性能产生任何影响(例如,OpenGL是否会将未使用的数据推送到着色器单元或后台发生的任何情况)?如果不是,那么如果数据是交错的呢?这些都是特定于实现的。交错数组不会改变这一点。嗯,所以有可能一个实现可以做到这一点,在这种情况下,我可以创建一个单独的VAO每个

我有一个带有VAO和几个非交错VBO的网格类,用于连接顶点、法线、纹理坐标等。网格使用多个着色器绘制,其中一些着色器不需要所有附加的VBO(例如,它的阴影着色器不需要法线或纹理坐标)


为不使用顶点属性的着色器启用顶点属性似乎可以,但它是否会对性能产生任何影响(例如,OpenGL是否会将未使用的数据推送到着色器单元或后台发生的任何情况)?如果不是,那么如果数据是交错的呢?

这些都是特定于实现的。交错数组不会改变这一点。嗯,所以有可能一个实现可以做到这一点,在这种情况下,我可以创建一个单独的VAO每个网格每个渲染过程类型,只启用必要的顶点属性。如果我想更改为交错属性,我将无法做到这一点,因此我想这是介于在所有情况下都不发送一些数据(如果发生这种情况)与交错属性的好处之间的问题?这带有过早优化的味道,这总是一件坏事。注意不要将90%的时间浪费在对最终性能有1%影响的事情上。我最好的猜测是,当你绑定VAO时,OpenGL会“推送”所有数据,因为这基本上就是你告诉它要做的,尽管我知道有些情况下OpenGL会将数据传输推迟到绝对必要的时候。在我的情况下,这根本不是一个大的改变(它有一些更高层次的小架构决策),我想如果有一个明确的答案,我会做出改变。现在,我将保持原样,等我有时间在移动平台上分析这两种方式时再看一看。