OpenGL 着色器编译错误(C0000 和 C0206)(PyOpenGL)

OpenGL shader compile error (C0000 and C0206) (PyOpenGL)

我对 opengl 还是很陌生,我正在尝试编译我的顶点和片段着色器,但一直出现错误。这是我正在编译的着色器:

# Vertex shader
vert_shader = """
#version 330
in vec4 position
void main()
{
    gl_Position = vec4(position, 1.0f);
}

"""

# Fragment shader
frag_shader = """
#version 330
void main()
{
    gl_FragColor = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}

"""

# Compiles the vertex and fragment shader
shader = OpenGL.GL.shaders.compileProgram(OpenGL.GL.shaders.compileShader(str(vert_shader), GL_VERTEX_SHADER),
                                          OpenGL.GL.shaders.compileShader(str(frag_shader), GL_FRAGMENT_SHADER))

当我 运行 我的程序时,我得到这个错误:

RuntimeError: ('Shader compile failure (0): b\'0(4) : error C0000: syntax error, unexpected reserved word "void", expecting \\',\\' or \\';\\' at token "void"\n\'', [b'\n    #version 330\n    in vec4 position\n    void main()\n    {\n        gl_Position = vec4(position, 1.0f);\n    }\n\n    '], GL_VERTEX_SHADER)

最初我以为我收到这个错误是因为我没有解析字符串并取出新行指示符,但是一旦我使用 'replace' 字符串函数将它们取出,我就收到了这个错误:

RuntimeError: ('Shader compile failure (0): b\'0(1) : error C0205: invalid profile "in"\n0(1) : error C0206: invalid token "vec4" in version line\n\'', [b'    #version 330    in vec4 position    void main()    {        gl_Position = vec4(position, 1.0f);    }    '], GL_VERTEX_SHADER)

我什至尝试在解析后将字符串编码为 ascii,但这似乎也不起作用。

您的顶点着色器有语法错误,请使用已修复的顶点着色器重试:

#version 330

in vec4 position;

void main()
{
    gl_Position = position;
}

1) 你漏掉了';'在行 in vec4 position

2) 行 gl_Position = vec4(position, 1.0f); 试图用第一个参数位置创建一个 vec4 实例,它恰好是一个 vec4。要修复它,您可以直接分配 vec4 位置,如 gl_Position = position; 或使用 swizzling ,如 gl_Position = vec4(position.xyz, 1.0);