0

我使用两个 QGLShaderProgram 来处理纹理。

ShaderProgram1->bind(); // QGLShaderProgram
ShaderProgram2->bind();

glBegin(GL_TRIANGLE_STRIP);
...
glEnd();

ShaderProgram1->release();
ShaderProgram2->release();

纹理应该先用 Shaderprogram1 再用 ShaderProgram2 处理。但是当我调用 ShaderProgram2->bind() 时会自动触发 ShaderProgram1->release() 并且只有一个着色器可以工作。如何绑定两个着色器?

4

2 回答 2

2

你没有。

除非这些是单独的着色器(甚至它们不能那样工作),否则每个渲染操作都会将一着色器应用于渲染的图元。这意味着单个顶点着色器,然后是任何镶嵌着色器,然后是可选的单个几何着色器,然后是单个片段着色器。

如果要菊花链着色器,则必须在着色器本身内执行此操作。

于 2013-06-19T18:11:44.967 回答
0

我知道这是一个非常古老的问题,但我只想在这里为任何可能偶然发现此问题的人加两分钱。如果要运行使用相同纹理的多个着色器,则应在更新循环开始时设置活动纹理。然后,您必须一次运行一个着色器。一个着色器必须在另一个着色器开始之前完成。所以相反,它看起来像这样。

ShaderProgram1->bind();
...
ShaderProgram1->release();

ShaderProgram2->bind();
...
ShaderProgram2->release();
于 2018-05-01T05:03:53.613 回答