Как игры делают переключение между opengl и vulcan например?
Это ж должны быть 2 основные части кода одна которая написана на opengl другая на vulcan, но которые делают абсолютно одинаковые вещи? Это ж много времени займет да и еще надо сделать всё одинаковым
Современные компьютеры достаточно мощны для того, чтобы отделить создание 3D-сцены от привязки к особенностям конкретного графического API.
В идеальном, с точки зрения разработчика, варианте основной код игры вообще никак не взаимодействует с графическим API. Он генерирует сцену в виде какого-то универсального промежуточного представления, никак не завязанного на особенности OpenGL или Vulcan. А дальше это представление передаётся в модуль, который транслирует сцену в команды конкретного API. Так что для OpenGL, Vulcan, Direct3D отдельно пишется только модуль-транслятор. Тогда как основная часть кода игры никак не меняется.
Этот вариант, повторю, идеален и в реальной игре особенности конкретных API в основном коде игры всё же могут учитываться. Но даже в этом случае всё, что одинаково, выносится в отдельные модули и никак не дублируется.
Как минимум на самом нижнем уровне это разная работа с API, но в своей основе они занимаются одним и тем же, поэтому промежуточные уровни до непосредственно вызова самого API могут быть схожими.
Я на пурике пишу. Там если под винду компилишь, подставляется асмовский код под DirectX, а если под линуксом собираешь проект, там просто подставлется код на асме под OpenGL.Если твоя среда компилируемая, то так же, а если интерпретируемая, то навреное на лету просто подменяются библиотеки
Игры делают на движка Unity, Unreal Engine или CryEngine, разработчик игр не парится поэтому поводу, т.к. всё за него делает движок.