Russian Qt Forum
Апрель 18, 2024, 06:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt не распознаёт версию шейдера [Qt5.7, C++]  (Прочитано 7262 раз)
Crazy Sage
Гость
« : Январь 18, 2017, 10:15 »

Пытаюсь запустить шейдер в консольном Qt-приложении, получаю следующую ошибку

Код:
QOpenGLShader::compile(Compute): 0(1) : error C0201: unsupported version 44
0(1) : error C0206: invalid token "<invalid atom 284073152>" in version line

Шейдер гарантированно рабочий, в программе на OpenFrameworks он работает безо всяких проблем (но по требованию заказчика надо теперь работать на Qt), шейдер начинается со строки

Код:
#version 440

Контекст OpenGL инициализируется в main.cpp следующим образом

Код:
QSurfaceFormat surfaceFormat;
surfaceFormat.setMajorVersion(4);
surfaceFormat.setMinorVersion(4);
surfaceFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(surfaceFormat);

QOpenGLContext openGLContext;
openGLContext.create();
if(!openGLContext.isValid())
{
    qDebug()<<"Failed to create openGL context";
    return 0;
}
QOffscreenSurface surface;
surface.create();
if(!surface.isValid())
{
    qDebug()<<"Failed to create surface";
}

код подключения шейдера выглядит следующим образом

Код:
QOpenGLShaderProgram compute;
compute.addShaderFromSourceFile(QOpenGLShader::Compute,":/shaders/cull.glsl");
compute.link();

Кто-нибудь знает, в чём может быть проблема?
Записан
Crazy Sage
Гость
« Ответ #1 : Январь 18, 2017, 10:40 »

Разобрался, может кому ещё пригодится.
Файл шейдера был сохранён в Visual Studio, соответственно в win-кодировке. Программа на openFrameworks также была собрана под MSVC, поэтому в ней этот шейдер спокойно обрабатывался, Qt же (по крайней мере версия под MinGW) оказалось неспособно прожевать виндоузовские окончания строк. Принудительное пересохранение файла шейдера в UTF-8 решило проблему.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #2 : Январь 18, 2017, 12:07 »

Разобрался, может кому ещё пригодится.
Файл шейдера был сохранён в Visual Studio, соответственно в win-кодировке. Программа на openFrameworks также была собрана под MSVC, поэтому в ней этот шейдер спокойно обрабатывался, Qt же (по крайней мере версия под MinGW) оказалось неспособно прожевать виндоузовские окончания строк. Принудительное пересохранение файла шейдера в UTF-8 решило проблему.

Код:
bool QOpenGLShader::compileSourceFile(const QString& fileName)
{
    QFile file(fileName);
    if (!file.open(QFile::ReadOnly)) {
        qWarning() << "QOpenGLShader: Unable to open file" << fileName;
        return false;
    }

    QByteArray contents = file.readAll();
    return compileSourceCode(contents.constData());
}

Заведите баг что он должен открывать с флагом QFile::Text
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 22.