ну как тот кто уже сделал это делал
Ну опять же, что конкретно тебя интересует?
Это можно очень по разному реализовать, но суть на самом деле просто в том что твой графический апи должен быть слоёным.
Верхний слой реализует всю внутреннюю кухню графической подсистемы и специфику твоего двигла, дёргая при этом нижестоящий слой.
Который внутри уже реализует какой-то конкретный апи - vk/dx/gl/metal и т.п.
Соответственно где-то в компайлтайме или даже рантайме ты просто меняешь нижний слой.