Найнижчий рівень, який має сенс з моєї точки зору, - це те, що говорить про ресурси, що беруть участь у візуалізації - vb / ib, візуалізація поверхонь, текстури, шейдери, блоки блоків тощо.
Проблема тут полягає в тому, що деякі з них мають бути в різних форматах, залежно від API - ось дещо стає складніше. Найпростіший спосіб - попередньо обробити статичні ресурси для відповідного API. Для динамічних використовуйте лише шейдери, щоб генерувати їх - це робить досить простим перебування у рідних форматах.
Все, що ви робите на вищому рівні, - це налаштування трубопроводів із доданими ресурсами та передача їх до GPU. Ви побачите, що не все можна таким чином добре витягнути, особливо якщо ви скористаєтесь технічними прийомами. Але це вдалий початок.
(Sidenote: якщо ви розглядаєте фокуси, що стосуються платформи, як особливий вид ресурсу, ви можете просунути всю цю концепцію досить далеко.)
Таким чином, ви створите дві речі: Менеджер апаратних ресурсів, а також інструментарій для встановлення DAG цих ресурсів.