使用OpenGL 4.1和ARB_separate_shader_objects,我们能够将着色管线的不同阶段存储在着色器程序中。如我们所知,要使用它们,我们需要将它们附加到一个程序管线对象上,然后绑定该对象。
我的问题是,为什么我们需要程序管线对象呢?在我的渲染器中,我只有一个这样的对象,并且我更改它的附件以更改着色器。我想不出任何情况下你会真正想要多个这样的对象。如果您存储许多管线对象,每个对象包含不同的着色器程序组合,那么事情变得比根本不使用分离着色器还要混乱。
那么,管线对象的目的是什么?更改附件(是否)比绑定不同的管线对象更昂贵?规范为什么要这样做,而不是像glUseProgram一样操作glUseProgramStages?
我的问题是,为什么我们需要程序管线对象呢?在我的渲染器中,我只有一个这样的对象,并且我更改它的附件以更改着色器。我想不出任何情况下你会真正想要多个这样的对象。如果您存储许多管线对象,每个对象包含不同的着色器程序组合,那么事情变得比根本不使用分离着色器还要混乱。
那么,管线对象的目的是什么?更改附件(是否)比绑定不同的管线对象更昂贵?规范为什么要这样做,而不是像glUseProgram一样操作glUseProgramStages?