为什么我的PyOpenGL着色器代码一直在出错?

问题描述 投票:0回答:1

我用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)

我检查了分号、向量等,但一切正常,请帮我解决这个问题。

opengl shader pyopengl
1个回答
0
投票

如果你运行的版本是< 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.