2015-06-05 2 views
1

Я использую QT для загрузки, компиляции и связывания шейдеров OpenGL.Как получить версию шейдера из QOpenGLShader?

Мне нужно выполнить определенные операции в зависимости от GLSLversion, используемого в коде шейдера

Можно ли восстановить версию от интерфейса QOpenGLShader без фактического получения исходного кода шейдера и разбора того, чтобы обнаружить версию линии?

ответ

1

Ни Qt, ни OpenGL не предоставляет доступ к версии шейдера (в случае Qt, вероятно, потому, что он не знает этого и не нуждается). Вы остаетесь с синтаксическим разбором исходного кода, однако, поскольку #version должен быть в отдельной строке, вы должны иметь возможность извлекать то, что хотите, с помощью только разделенных и основных операций с строкой.

0

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

int extractVersion(QOpenGLShader* s){ 
    assert(s); 

    //get the source code 
    QString code = QString::fromUtf8(s->sourceCode()); 

    QRegExp versionExp("#version\\s+(\\d+)"); 
    bool b = code.contains(versionExp); 

    if (!b) return 100; 
    else return versionExp.cap(1).toInt(); 
} 
Смежные вопросы