OpenGL на macOS. Продолжение
Лет пять назад я прочитал на MSDN утверждение Microsoft о том, что OpenGL – “устаревшая технология”. Тогда я только посмеялся. Всем прекрасно известно, что задачу по поддержке OpenGL берут на себя производители видеокарт, а не операционных систем. Никому на самом деле не важно, насколько хороша нативная поддержка OpenGL в Windows – все равно все устанавливают драйвер от производителя видеокарты. Сейчас же ситуация несколько иная – под macOS вообще никогда не было другого OpenGL, кроме нативного. Это вынуждает разработчиков принимать политическое решение, и я свое принял.
В настоящее время полноценного аналога OpenGL для кроссплатформенной разработки не существует. Direct3D есть только под Windows, Metal – только под macOS, а Vulkan не является прямым аналогом OpenGL. Прекращение поддержки OpenGL в macOS влечет необходимость поддерживать в приложении несколько графических API. Это сложная задача, полноценно решать которую способны только коммерческие компании путем найма отдельных программистов на каждый бэкенд. Любителям, инди-разработчикам и мейнтейнерам СПО необходимость поддерживать несколько API сильно усложняет жизнь (очень сильно!), не давая взамен абсолютно никаких преимуществ. Самым очевидным выходом остается просто забить на macOS.
Да, возможно, немного обидно потерять часть своих пользователей – и только лишь! Если вы раздаете свою работу бесплатно, вас это не должно особо волновать. Я могу назвать десятки операционных систем, на которых ваш код не только не заработает, но даже не скомпилируется, на каком бы графическом стеке он ни был основан. Для реального мира поддержка этих ОС не имеет никакого значения. Если ОС не предоставляет стандартный API (а тем более такой важный в наше время, как графический), значит, она не стоит того, чтобы ее поддерживать. Технологии усложнились, на дворе уже не 90-е, чтобы каждый студент мог на коленке реализовать по бэкенду для кучи несовместимых платформ. Повторяю: забить, как в свое время забили на DOS, OS/2, IRIX, NeXT и еще много чего.
По этому поводу очень хорошо выразился Саймон Рот, автор игры Maia: “I won’t port thousands of lines of my engine to a non standard proprietary API. Neither will many other developers either on principle or due to OSX’s tiny install base. Here lies the end of games on Apple’s desktop platform. Hundreds of thousands of older games will no longer run and there will be no economic incentive for the developers to rewrite their code. Even those using off-the-shelf engines would need to spend time and money to port to a newer release and retest. It’s sad. Games are made of code that goes stale by design. That’s bad, but by using open high level APIs and standards we can keep them alive and supported for much, much longer”.
Дословный перевод: “Я не буду портировать тысячи строк кода моего движка на нестандартный проприетарный API. И этого не будут делать другие разработчики – из принципа или из-за небольшой пользовательской базы. Это конец игр на десктопной платформе Apple. Сотни тысяч старых игр больше не будут работать, и для их разработчиков не будет экономического стимула переписывать их код. Даже те, кто использует готовые движки, должны будут потратить время и деньги на портирование на новую версию и повторное тестирование. Это грустно. Код игр всегда устаревал со временем, и это плохо, но, благодаря использованию открытых высокоуровневых API и стандартов, мы можем сохранять их в живых и поддерживать еще очень долго”.