Да, вот как это работает. Абстрагируя используемый вами графический API, вы удаляете его из того, о чем должен беспокоиться программист. Это похоже на способ, которым GDI абстрагирует записываемое устройство, например, в том, что программисту не нужно беспокоиться об этом.
В этом смысле ваша библиотека функций, аналогичная приведенной выше, будет похожа на HDC. Это интерфейс этой абстракции.
Это будет сложнее, чем простая проверка API, затем вызов соответствующей функции (ей). Два API (DirectX и OpenGL) очень разные, и абстрагирование их обоих в единый интерфейс будет непростым, особенно если вы хотите охватить большую часть функциональности.
Вам потребуется больше абстракций, чем просто создание универсальных функций. Вам нужно будет создать более сложные структуры.
Предположим, что OpenGL требует, чтобы вы вызывали функцию A, затем функцию B, чтобы что-то произошло, но DX требовал, чтобы вы вызывали func B, а затем func A. Для этого вам нужно сделать что-то подобное: 1009 *
void functionA(...) {
if (OpenGL) {
glFuncA();
} else {
//store parameters
}
}
void functionB(...) {
if (OpenGL) {
glFuncB();
} else {
dxFuncB();
dxFuncA( saved params );
}
}
Это не очень хороший пример, но он демонстрирует принцип. Создание абстракции для очень больших и разных API потребует много усилий и гораздо больше усилий, чем упаковка каждой функции.