Необходимым условием удачного старта
Steam OS от Valve на базе Linux является способность Valve убедить разработчиков в том, что процесс портирования приложений в среду этой
операционной системы не превратится в пытку. Выпуск публичной версии ToGL – прослойки в функции преобразователя кода с возможностью исполнения средствами OpenGL некоторых вызовов, реализуемых посредством Direct3D 9.0c – вероятно, является большим шагом вперёд в стремлении Valve завоевать сердца и умы программистов за счёт формирования доверия к своей новой платформе.
ToGL перехватывает прописанные в коде игрового приложения вызовы с обращением к Direct3D, заменяя их понятными для OpenGL аналогами. Процесс реализован на уровне двоичного кода игры и не является собственно враппером («обёрткой»), который порой используют для выполнения кода в среде неродных платформ. Такое решение не проходит даром для производительности, но это копейки в сравнении с враппером или эмулятором.
Для Valve преобразование из Direct3D в OpenGL не является чем-то новым или экзотичным. В последние годы Valve развивалась в направлении некоторого игнорирования учёта фактора платформ, о чём свидетельствует доступность многих игр от Valve и для Mac OS X, и для Linux. ToGL берёт начало непосредственно в коде свежего игрового кроссплатформенного хита Dota 2.
Однако ToGL нельзя назвать универсальным, всеобъемлющим решением. На данном этапе поддерживается лишь часть функций Direct3D 9.0c, включая многозадачный рендеринг (multiple render targets) и частично Shader Model 3 (но без поддержки загрузки вершинных текстур). Несмотря на пользу предлагаемого решения, многие программисты считают Direct3D 9.0 уделом прошлого: для DOTA пойдёт, но для более требовательных игр – не то.
Впрочем, это только начало. Если ToGL в следующей версии сможет реализовать функцию прослойки-преобразователя также и для DirectX 11, а следующее поколение движка Source предложит исходную поддержку OpenGL, SteamOS может стать силой, с которой нельзя не считаться в мире компьютерных игр. Посмотрим, как ToGL повзрослеет.