почему мой код шейдера PyOpenGL продолжает делать ошибки? - PullRequest
0 голосов
/ 14 марта 2020

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

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

1 Ответ

0 голосов
/ 23 апреля 2020

если у вас версия <330, шейдеры работают немного по-другому: </p>

используйте

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