ОШИБКА: 0: 2: \ '\': версия \ '460 \' не поддерживается
вызвано тем, что вы не указали версию OpenGL перед созданиемокно.Поскольку ваша система поддерживает только версию 4.1 OpenGL, вы должны добавить следующие строки кода.См. Также Разработка OpenGL на OS X :
glfw.window_hint(glfw.CONTEXT_VERSION_MAJOR, 4)
glfw.window_hint(glfw.CONTEXT_VERSION_MINOR, 1)
glfw.window_hint(glfw.OPENGL_FORWARD_COMPAT, GL_TRUE)
glfw.window_hint(glfw.OPENGL_PROFILE, glfw.OPENGL_CORE_PROFILE)
window = glfw.create_window(800,600,"My OpenGL Window", None, None)
Если вы решите эту проблему, то у вас возникнет следующая проблема:
Пока gl_Position
- это Однородные координаты , входная переменная вершинного шейдера position
имеет тип vec3
.
Назначение gl_Position = position
вызывает ОШИБКУ:
назначение несовместимых типов
Вы можете решить эту проблему, изменив вершинный шейдер.Измените присвоение
#version 410 core
in vec3 position;
void main()
{
gl_Position = vec4(position, 1.0);
}
или измените тип входной переменной:
#version 410 core
in vec4 position;
void main()
{
gl_Position = position;
}
Поскольку gl_FragColor
устарела в базовой версии 4.60, у вас естьобъявить выходную переменную фрагментного шейдера вместо использования устаревшей встроенной выходной переменной gl_FragColor
:
#version 410 core
out vec4 frag_color;
void main()
{
frag_color = vec4(1.0f,0.0f,0.0f,1.0f);
}
Далее в вашей программе есть опечатка.Это должно быть glVertexAttribPointer
вместо glVertexAttribPoint
.
Обратите внимание, в профиле ядра Контекст OpenGL , вы должны использовать Vertex ArrayОбъект , потому что объект массива вершин по умолчанию 0 недопустим в профиле ядра.
хорошо, теперь я получаю эту ошибку
kages / OpenGL / GL / shaders.py ", строка 108, в check_validate glGetProgramInfoLog (self), RuntimeError: Ошибка проверки (0): b'Validation Failed: объект привязки к массиву вершин не привязан. \ n '
Создание и связывание объекта массива вершин после того, как контекст OpenGL стал текущим:
glfw.make_context_current(window)
VAO = glGenVertexArrays(1)
glBindVertexArray(VAO)
shader = OpenGL.GL.shaders.compileProgram(OpenGL.GL.shaders.compileShader(vertex_shader, GL_VERTEX_SHADER),
OpenGL.GL.shaders.compileShader(fragment_shader,GL_FRAGMENT_SHADER))