Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Seok Jun HongОтветов: 1

Я сделал шейдер в 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, но все они выдают одну и ту же ошибку, пожалуйста, помогите Seok Jun Hong 14.03.2020
  • Какую версию OpenGL вы используете? Я предполагаю, что вы застряли в устаревшем контексте GL 2.1. derhass 15.03.2020

shaderopenglpyopengl

Ответы

Ответ 1 · Qsnok

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы