QOpenGLShader-版本指令必须是第一条语句,并且不能重复

时间:2019-01-18 07:39:41

标签: c++ qt opengl glsl

我正在使用Qt 5.11.2构建OpenGL应用程序。添加镶嵌细分着色器时,会发生以下错误:

  

QOpenGLShader :: compile(Tessellation Control):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;

我正在使用Geforce GTX 1050 / PCIe / SSE2 GPU在Windows 10上工作。

我发现了类似的报告,但是没有一个答案对我有用:unable to compile GLSL shaders on Qt 5.3 after Nvidia driver update

Serious rendering issues with OpenGL 4.1 and 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插入的第一行会产生错误。有什么想法可以解决此问题吗?

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我的错误显示如下:

QOpenGLShader::compile(Fragment): 0(2) : error C0204: version directive must be first statement and may not be repeated

*** Problematic Fragment shader source code ***
#ifdef GL_KHR_blend_equation_advanced
#extension GL_ARB_fragment_coord_conventions : enable
#extension GL_KHR_blend_equation_advanced : enable
#endif
#define lowp
#define mediump
#define highp
#line 1
???#version 330 core
out vec4 FragColor;

void main(void)
{
    FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}

***

如您所见,消息中有 ???,而您有 ´╗┐

当我从“utf-8 with BOM”改为“utf-8”时,它起作用了~