主要相关函数是这三个,根据  http://blog.csdn.net/leixiaohua1020/article/details/40379845 这篇文章和Qt自带的例子想结合改动
initializeGL{
 initializeOpenGLFunctions();
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
    initshader();
}
initshader{
QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this);
    const char *vsrc =
            "attribute vec4 vertexIn;\n"
            "attribute vec2 textureIn;\n"
            "varying vec2 textureOut;\n"
            "void main(void)\n"
            "{\n"
            "    gl_Position = vertexIn;\n"
            "    textureOut = textureIn;\n"
            "}\n";
    vshader->compileSourceCode(vsrc);
    QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this);
    const char *fsrc =
        "precision highp float;"
            "varying vec2 textureOut;\n"
            "uniform sampler2D tex_y;\n"
            "uniform sampler2D tex_u;\n"
            "uniform sampler2D tex_v;\n"
            "void main(void)\n"
            "{\n"
            "    vec3 yuv;\n"
            "    vec3 rgb;\n"
            "    yuv.x = texture2D(tex_y, textureOut).r;\n"
            "    yuv.y = texture2D(tex_u, textureOut).r - 0.5;\n"
            "    yuv.z = texture2D(tex_v, textureOut).r - 0.5;\n"
            "    rgb = mat3( 1,       1,         1,\n"
            "                0,       -0.39465,  2.03211,\n"
            "                1.13983, -0.58060,  0) * yuv;\n"
            "    gl_FragColor = vec4(rgb, 1);\n"
            "}\n";
    fshader->compileSourceCode(fsrc);
    program = new QOpenGLShaderProgram;
    program->addShader(vshader);
    program->addShader(fshader);
    program->bindAttributeLocation("vertexIn", PROGRAM_VERTEX_ATTRIBUTE);
    program->bindAttributeLocation("textureIn", PROGRAM_TEXCOORD_ATTRIBUTE);
    program->link();
    program->bind();
    program->setUniformValue("textureOut", 0);
    program->setAttributeValue("VShowBackColor", 1.0);
    textureUniformY = program->uniformLocation("tex_y");
    textureUniformU = program->uniformLocation("tex_u");
    textureUniformV = program->uniformLocation("tex_v");
    glVertexAttribPointer(PROGRAM_VERTEX_ATTRIBUTE, 2, GL_FLOAT, 0, 0, vertexVertices);
    glEnableVertexAttribArray(PROGRAM_VERTEX_ATTRIBUTE);
    glVertexAttribPointer(PROGRAM_TEXCOORD_ATTRIBUTE, 2, GL_FLOAT, 0, 0, textureVertices);
    glEnableVertexAttribArray(PROGRAM_TEXCOORD_ATTRIBUTE);
    glGenTextures(1, &id_y);
    glBindTexture(GL_TEXTURE_2D, id_y);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glGenTextures(1, &id_u);
    glBindTexture(GL_TEXTURE_2D, id_u);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glGenTextures(1, &id_v);
    glBindTexture(GL_TEXTURE_2D, id_v);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 
}
paintGL{
        glClearColor(0.0,0.0,0.0,0.0);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
 
        glActiveTexture(GL_TEXTURE0);
        glBindTexture(GL_TEXTURE_2D, id_y);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, fYSize, fHeight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, fY);
        glUniform1i(textureUniformY, 0);
        glActiveTexture(GL_TEXTURE1);
        glBindTexture(GL_TEXTURE_2D, id_u);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, fYSize/2, fHeight/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, fU);
        glUniform1i(textureUniformU, 1);
        glActiveTexture(GL_TEXTURE2);
        glBindTexture(GL_TEXTURE_2D, id_v);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, fYSize/2, fHeight/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, fV);
        glUniform1i(textureUniformV, 2);
        
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}