почему мой код шейдера PyOpenGL продолжает ошибаться?

Я сделал шейдер в 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)

Я проверил точку с запятой, векторы и т. д., но все в порядке. пожалуйста, помогите мне решить проблему


person Seok Jun Hong    schedule 14.03.2020    source источник
comment
Я пробовал почти все версии от 100 до 460, но все они выдают одну и ту же ошибку, пожалуйста, помогите   -  person Seok Jun Hong    schedule 14.03.2020
comment
Какую версию OpenGL вы используете? Я предполагаю, что вы застряли в устаревшем контексте GL 2.1.   -  person derhass    schedule 15.03.2020


Ответы (1)


если вы используете версию ‹ 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);
}
person Qsnok    schedule 23.04.2020