QOpenGLShader - директива version должна быть первым оператором и не может повторяться - PullRequest
0 голосов
/ 18 января 2019

Я собираю OpenGL-приложение с использованием Qt 5.11.2. При добавлении тесселяционного шейдера возникает следующая ошибка:

QOpenGLShader :: compile (Управление тесселяцией): 0 (2): ошибка C0204: директива версии должна быть первым оператором и не может повторяться

*** Problematic Tessellation Control shader source code ***
#define lowp
#define mediump
#define highp
#line 1
´╗┐#version 400
#line 1
layout (vertices = 4) out;

Я работаю в Windows 10 с графическим процессором Geforce GTX 1050 / PCIe / SSE2.

Я нашел похожие отчеты, но ни один из ответов не помог мне: не удалось скомпилировать шейдеры GLSL на Qt 5.3 после обновления драйвера Nvidia

Серьезные проблемы с рендерингом в OpenGL 4.1 и Qt 5

Шейдер выглядит так:

#version 400
layout (vertices = 4) out;

uniform float animationFrame;
in vec3 v_vertex[];

out vec3 tc_vertex[];

void main()
{...}

Чтобы добавить шейдер, я использую следующий код:

addShader(QOpenGLShader::Vertex, "data/cube.vert", *m_program);
addShader(QOpenGLShader::Fragment, "data/cube.frag", *m_program);
addShader(QOpenGLShader::TessellationControl, "data/cube.tcs", *m_program);
addShader(QOpenGLShader::TessellationEvaluation, "data/cube.tes", *m_program);
addShader(QOpenGLShader::Geometry, "data/cube.geom", *m_program);

Очевидно, что первые строки, вставленные Qt, выдают ошибку. Есть идеи как решить эту проблему?

...