qt一个纹理的多个QGLShaderProgram

时间:2013-06-19 16:34:16

标签: qt shader textures

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

你没有。

除非这些是单独的着色器(甚至它们不能以这种方式工作),否则每个渲染操作都会将单个着色器集应用于渲染的基元。这意味着单个顶点着色器,后跟任何曲面细分着色器,然后可选择单个几何着色器,然后是单个片段着色器。

如果您想要菊花链着色器,则必须在着色器本身内执行

答案 1 :(得分:0)

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

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

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