我正在使用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插入的第一行会产生错误。有什么想法可以解决此问题吗?
答案 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”时,它起作用了~