2015-04-26 3 views
0

Я пишу простой видеоплеер, используя opengl. Я использовал Qt и следил за его основными примерами текстур. Вершинные и фрагмент шейдеры здесь:Как нарисовать красные линии, если я использовал фрагментарный шейдер для текстуры?

QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this); 
    const char *vsrc = 
     "attribute highp vec4 vertex;\n" 
     "attribute mediump vec4 texCoord;\n" 
     "varying mediump vec4 texc;\n" 
     "uniform mediump mat4 matrix;\n" 
     "void main(void)\n" 
     "{\n" 
     " gl_Position = matrix * vertex;\n" 
     " texc = texCoord;\n" 
     "}\n"; 
    vshader->compileSourceCode(vsrc); 

    QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this); 
    const char *fsrc = 
     "uniform sampler2D texture;\n" 
     "varying mediump vec4 texc;\n" 
     "void main(void)\n" 
     "{\n" 
     " gl_FragColor = texture2D(texture, texc.st);\n" 
     "}\n"; 
    fshader->compileSourceCode(fsrc); 

И я сделал это, чтобы отобразить изображение:

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, texture_cv.cols, texture_cv.rows, GL_RGB, GL_UNSIGNED_BYTE, texture_cv.data); 
//then draw a quad 
... 

Тогда после этого, как я мог бы нарисовать несколько красных линий на экране, так как я использую шейдер фрагмента (я очень новичок в шейдере), я не могу отключить текстуру.

ответ

0

На сегодняшний день самым простым решением является использование другой шейдерной программы для рисования красных линий. Поскольку он просто рисует сплошной цвет, это будет очень легко. Пиксельный шейдер может быть что-то вроде:

void main() 
{ 
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); 
} 

вершинный шейдер будет очень похоже на то, что у вас есть, кроме того, что ему не нужно производить координаты текстуры. Возможно, вы даже сможете использовать существующий шейдер вершин.

Очень часто используется несколько программ шейдера для рендеринга. У вас есть шейдерная программа для каждого типа рендеринга и переключаются между ними с помощью glUseProgram().

Смежные вопросы