【问题标题】:why my PyOpenGL shader code keeps making error?为什么我的 PyOpenGL 着色器代码不断出错?
【发布时间】:2020-06-26 00:08:53
【问题描述】:

我在 PyOpenGL 中制作了着色器,但一直出错

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)

我检查了分号、向量等,但一切都很好。请帮我解决问题

【问题讨论】:

  • 我尝试了从 100 到 460 的几乎所有版本,但都给了我同样的错误,请帮助
  • 您使用的是哪个 OpenGL 版本?我猜你被困在遗留的 GL 2.1 上下文中。

标签: opengl shader pyopengl


【解决方案1】:

如果你运行的是

使用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多