image

В современных графических приложениях широко используется OpenGL. Успех технологии обеспечивает мультиплатформенность, открытость, доступность информации, обширное сообщество специалистов разного уровня. В Сети можно свободно найти необходимое количество материалов для начала работы с этой технологией. Кроме того, для разработки проектов на основе OpenGL существует множество готовых библиотек (FreeGlut, GLFW, SDL2, GLEW, GLM и т.д.), которые активно помогают в работе над проектом. Их использование позволяет сильно экономить усилия и время на разработку качественного графического приложения. Список возможностей можно еще расширить списком графических фреймворков, но это особая тема и не всем подходит их использование.

Если при выборе графической технологии для реализации своих идей у меня сомнений не было, то с выбором языка программирования возникла проблема. Я не знал Си и старательно его обходил — моим «коньком» многие годы были скриптовые языки программирования. Поэтому «пробный шар» (картинка вверху) был изготовлен на Python.

Результат выявил две серьезные проблемы. Первая — распространение приложения, вторая — быстродействие. И если для первой проблемы еще можно было найти пути решения, то вторая оказалась фатальной. После недельной борьбы за оптимизацию и повышение быстродействия весь код был переписан процентов на тридцать, было добавлено распаралеливание задач обработки действий пользователя и задачи построения объектов в пространстве. Все это в сумме дало прирост скорости примерно в шестнадцать раз. Все стало быстрее и динамичнее. Хорошо? Нет, все оказалось очень-очень плохо. Замеры показали, что для динамического построения полноценной сцены в пространстве нужен код примерно в 70 (семьдесят!) раз быстрее существующего. Два порядка для статичного окружения. Про добавление в сцену движущихся объектов при таком быстродействии можно было даже не мечтать.

Попытка использовать Python провалилась. Начался поиск “самого лучшего” языка программирования. За несколько месяцев была перепробована целая серия языков программирования в диапазоне от Lua до Nim. Поиски продолжались до тех пор, пока не стал очевиден простой и однозначный вывод. Если ты пишешь под OpenGL, если все популярные библиотеки OpenGL написаны на Си, а все модные языки программирования для работы с OpenGL используют только обертки для этих библиотек, какой вывод? Не надо терять время — учи Си!

Сегодня уже прошло больше месяца после того, как был сделан вывод о необходимости перехода на Си/С++. И это время показало, что работа над проектом стала спокойной и приятной. Уже нет опасения попасть в тупик, не стало постоянного лихорадочного поиска доступных решений для очередной задачи. Почти нет ограничений.

Если нарисовать ассоциативную картинку личных ощущений от перехода, то у меня получается примерно так: раньше работа напоминала поиски в густой траве со скрытыми пнями и корнями, об которые постоянно запинаешься, грибов для супа. А теперь — это неторопливые прогулки теплым днем по пляжу балтийского моря в поисках янтаря. Причем найденные грибы надо было сразу перебрать и приготовить чтобы проверять их пригодность и вкус. А теперь — найденый янтарь можно спокойно положить в карман, чтобы потом, когда нибудь, сделать из него «Ах…!». Примерно так. Учите Си.

Остался открытым вопрос Си “чистый” (С) или С++? Если вопрос касается разработки программ на основе OpenGL, то нужен C++, так как некоторые важные библиотеки (например glm) написаны на С++. Так что тут вариантов больше нет. Впрочем, как и с чем “трахаться” - это дело личного вкуса каждого.