我用PyOpenGL制作了shader,但它一直在出错。
vertex_src = """
# version 330
in vec3 a_position;
void main()
{
gl_Position = vec4(a_position, 1.0);
}
"""
fragment_src = """
# version 330
out vec4 out_color;
void main()
{
out_color = vec4(1.0, 0.0, 0.0, 1.0);
}
"""
shader = compileProgram(compileShader(vertex_src, GL_VERTEX_SHADER), compileShader(fragment_src, GL_FRAGMENT_SHADER))
glUseProgram(shader)
RuntimeError: ('Shader compile failure (0): b"ERROR: 0:3: Invalid storage qualifiers \'in\' in global variable context\\nERROR: 0:7: Use of undeclared identifier \'a_position\'\\n"', [b'\n\nin vec3 a_position; \n\nvoid main()\n{\n gl_Position = vec4(a_position, 1.0);\n}\n'], GL_VERTEX_SHADER)
我检查了分号、向量等,但一切正常,请帮我解决这个问题。
如果你运行的版本是< 330,那么着色器的工作方式就会有些不同。
使用
gl_version = float(gl.glGetString(gl.GL_VERSION)[:3])
找出你的opengl版本,然后搜索它所支持的GLSL-版本。
对于你的着色器来说,这意味着。
顶点:
#version 120
attribute vec3 position;
void main()
{
gl_Position = vec4(position, 1.0);
}
碎片:
#version 120
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}