在切换program时需要重新 bind() ,也就是glUseProgram(programId),然后重新为各个着色器变量赋值,附代码如下
void Table::paint()
{
static GLfloat vertices[] =
{
0, 0, .5f, .5f,
-.5f, -.8f, 0, .9f,
.5f, -.8f, 1, .9f,
.5f, .8f, 1, .1f,
-.5f, .8f, 0, .1f,
-.5f, -.8f, 0, .9f
};
m_shaderProgram.bind();
// position
static int aPositionLocation = m_shaderProgram.attributeLocation("a_Position");
m_shaderProgram.setAttributeArray(aPositionLocation, GL_FLOAT, vertices, 2, 4*sizeof(GLfloat));
m_shaderProgram.enableAttributeArray(aPositionLocation);
// texture
static int aTextureCoordinate = m_shaderProgram.attributeLocation("a_TextureCoordinate");
m_shaderProgram.setAttributeArray(aTextureCoordinate, GL_FLOAT, vertices + 2, 2, 4*sizeof(GLfloat));
m_shaderProgram.enableAttributeArray(aTextureCoordinate);
m_shaderProgram.setUniformValue("u_MvpMat", m_mvpMat);
glDrawArrays(GL_TRIANGLE_FAN, 0, 6);
}