GLUT, его плохая репутация, неповрежденная и оправданная, - лучшее, что я нашел.
Однако неумелое чувство не является хорошей причиной, чтобы не использовать его. Вы находитесь на уровне ниже абстракций, которые вы хотели бы использовать для проекта здесь. Точно так же вы не должны использовать OpenGL, потому что он глубоко запутан императивными идеями.
Но GLUT и OpenGL отлично . Ключ заключается в том, чтобы обернуть их в более привлекательные абстракции перед их использованием. Я опубликовал, чтобы взломать мою оболочку для 2D-графики в OpenGL, Graphics-Drawing Combinators . Я полагаю, что есть и другие попытки, и я какое-то время не играл в графическую игру, поэтому я не очень хорошо разбираюсь в современном уровне техники.
Завершение GLUT немного сложнее. IORef
s не менее функциональны, чем сам IO
, и для выражения интерактивности при отказе от IO
(и других императивных конструкций) вам потребуется некоторая форма FRP . В конце концов, эти библиотеки FRP обернутся необходимыми идеями - когда вы имеете дело с библиотеками, написанными для C, вы не избежите этого. И совершенно неважно, что в любом случае живет под ним - под всем программным обеспечением есть электрические системы напряжений.
Во всяком случае, пару лет назад, когда я занимался исследованиями, GLUT была единственной библиотекой, которая действительно работала кроссплатформенно. Я предпочитаю интерфейс ... всех других, но каждый работает только в определенных контролируемых условиях. Это было основным ограничением, если вы не поделитесь этим, вы можете попробовать что-то еще. Но оконный интерфейс - это тонкий слой, который довольно легко оборачивается, вам не нужно основывать какие-либо важные решения на этом выборе.