На сегодняшний день для создания качественной графики в OpenGL необходимым условием является использование шейдеров. Через поиск в Сети можно найти несколько нитересных сайтов, на которых есть описание модулей для работы с GLSL и шейдерами. В их числе glsl-wrapper, GLSL experiments, gletools, pyglet-shaders и несколько других. Но все они под Python2, и попытки "по быстрому" это все запустить и проверить под Python3 для меня (с поверхностными знаниями C++) оказались провальными.

Но не все плохо. Для работы с OpenGL в среде Python3 можно использовать библиотеку SDL. Это кросс-платформенная библиотека, обеспечивающая низкоуровневый доступ к звуковой подсистеме, клавиатуре, мыши, джойстику и графическому оборудованию через OpenGL и Direct3D. SDL официально поддерживает Windows, Mac OS X, Linux, iOS, и Android. На платформе Linux библиотека входит в число стандартных пакетов с именем sdl2_*. Для Windows и Mac OS X с сайта разработчика SDL можно скачать бинарники. Там-же в Wiki есть необходимая для работы документация и довольно обширный раздел ссылок на обучающие материалы. В среде Python3 для работы с SDL есть модуль PySDL2 (на момент написания статьи - версия 0.9.3). К сожалению, в документации на модуль PySDL2 нет примеров работы с шейдерами, а мне непременно надо как-то их "пощупать", что понять как приручить.

Поиск какого-нибудь "quick-start" по теме работы с шейдерами в PySDL2 привел меня в блог hivestream.de, где обнаружилось довольно подробное начальное руководство (на английском) по его использованию, но... Снова извечное "НО"! Приведенный в этом куроводстве пример у меня вываливается с ошибкой на функцию запуска шейдера. Не могу пока точно назвать причину, вероятнее всего дело в различии версий OpenGL на моем компьютере и использованной в уроке. Хотя все демо-примеры из состава модуля PySDL2 (его код размещен на bitbucket.org) работают на моей рабочей станции без ошибок.