QOpenGLShader - version指令必须是第一个语句,并且不能重复

lp0sw83n  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(236)

我正在使用Qt 5.11.2构建一个OpenGL应用程序。在添加曲面细分着色器时,出现以下错误:
QOpenGLShader::编译(细分控件):0(2):错误C 0204:版本指令必须是第一个语句,并且不能重复


***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/SSE 2 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插入的第一行产生了错误。有什么想法如何解决这个问题吗?

j2datikz

j2datikz1#

我也有同样的问题,我的错误是这样显示的:

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);
}

***

如您所见,消息中有???,而您有´╗┐
当我从“带BOM的utf-8”换成“utf-8”时,它起作用了~

uhry853o

uhry853o2#

我有这样的错误:

???#version 330 core

我使用可视化代码将文件编码从“带BOM的UTF-8”更改为“UTF-8”。然后它就工作了。

相关问题