【发布时间】:2018-03-21 23:36:22
【问题描述】:
我对 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)
最初我以为我收到了这个错误,因为我没有解析字符串并取出新行指示符,但是一旦我使用“替换”字符串函数取出它们,我得到了这个错误:
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,但这似乎也不起作用。
【问题讨论】:
-
我看到顶点着色器的第 2 行缺少分号。
-
另外
position已经是vec4,因此通过在末尾添加1.0 转换为vec4是没有意义的。您可以使用gl_Position = position;或将第2 行设为in vec3 position;。
标签: python-3.x opengl glsl pyopengl