我使用两个QGLShaderProgram来处理纹理。
ShaderProgram1->bind(); // QGLShaderProgram
ShaderProgram2->bind();
glBegin(GL_TRIANGLE_STRIP);
...
glEnd();
ShaderProgram1->release();
ShaderProgram2->release();
应使用Shaderprogram1和ShaderProgram2处理纹理。但是当我调用ShaderProgram2-> bind()时会自动触发ShaderProgram1-> release()并且只有一个着色器可以工作。如何绑定两个着色器?
答案 0 :(得分:2)
你没有。
除非这些是单独的着色器(甚至它们不能以这种方式工作),否则每个渲染操作都会将单个着色器集应用于渲染的基元。这意味着单个顶点着色器,后跟任何曲面细分着色器,然后可选择单个几何着色器,然后是单个片段着色器。
如果您想要菊花链着色器,则必须在着色器本身内执行。
答案 1 :(得分:0)
我知道这是一个非常古老的问题,但我只想在这里为可能偶然发现这一点的人加上我的两分钱。 如果要运行使用相同纹理的多个着色器,则应在更新循环的开头设置活动纹理。然后,您必须一次运行一个着色器。一个着色器必须在另一个着色器开始之前完成。相反,它看起来像这样。
ShaderProgram1->bind();
...
ShaderProgram1->release();
ShaderProgram2->bind();
...
ShaderProgram2->release();