是否可以将活动着色器程序保存在 VAO 中?如果可以,如何?

Posted

技术标签:

【中文标题】是否可以将活动着色器程序保存在 VAO 中?如果可以,如何?【英文标题】:Is it possible to save the active shader program inside a VAO ?If yes, how? 【发布时间】:2017-05-29 18:01:57 【问题描述】:

所以我通常会做的是:

//

...(这里有更多伪代码)

//此时着色器已附加到程序但 glUseProgram 没有

//调用

1) 绑定到 vao

2) 保存-关联 vao 中的 vbos

3) 解除绑定 vao

//准备渲染

4) 绑定vao

5) 通过 glUseProgram 使用适当的程序

6) 绘制

7) 解除绑定

但是是否有可能以某种方式将第 5 步移到 1 到 3 之间的某个位置?

【问题讨论】:

不,不可能。 (AFAIK) 几何与渲染方式无关。您可以使用相同的着色器绘制多个 VAO,也可以使用不同的着色器绘制相同的 VAO。因此,将着色器存储在 VAO 中是没有意义的。 【参考方案1】:

VAO代表Vertex数组对象;它定义了how vertices are stored and accessed during rendering operations。它与程序没有直接关系,任何特定的 VAO 都可以与任何兼容的程序一起使用。

【讨论】:

以上是关于是否可以将活动着色器程序保存在 VAO 中?如果可以,如何?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我可以有 OpenGL 着色器类,但不能有 VAO 类?

OpenGL VAO VBO 着色器混淆

没有 VAO 的每个着色器属性的 VBO 或不同的方法?

VAO 不使用着色器渲染颜色

在 GLSL 着色器中访问 VBO/VAO 数据

如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?