在花哨的 OpenGL 新版本(3.0 和 4.0 以上)中,不推荐使用 gl_Vertex 等内置顶点属性。实际渲染任何东西的“新方法”是为位置、颜色等指定您自己的顶点属性,然后将这些自定义属性绑定到缓冲区。
我的问题是:如何在不紧密耦合渲染代码和着色器的情况下做到这一点?如果我编写一个使用“位置”作为顶点位置的着色器,则使用着色器的主机代码必须知道这一点并将顶点数据作为“位置”传递。如果我想使用一个不同的着色器来获取“vertex_pos”中的顶点数据,我必须先重写该着色器,或者修改我的主机代码以将顶点数据作为“vertex_pos”发送。
是否有一组所有着色器都应该使用的标准顶点和片段属性的最佳实践名称?或者是否存在特定于引擎的巴尔干化标准,这样为一个引擎编写的着色器在不修改的情况下无法在另一个引擎上工作?还是根本没有标准,这样,通常每个对象都需要自己的自定义渲染代码来匹配其自定义着色器?