Я хочу, чтобы эта библиотека поддерживала стабильный интерфейс для старых приложений.
Однако она должна иметь возможность расширения.
Она действует как уровень аппаратной абстракции.
Графические библиотеки OpenGL, Vulkan или DirectX подходят ближе всего с точки зрения требований.
Сравнение их выявило три различных подхода к обеспечению API:
- OpenGL предоставляет определенный набор стабильных символов, тогда как остальные символы необходимо получать во время выполнения с помощью GetProcAddress или dlsym. Для этого пользователю необходимо либо получить указатели на функции самостоятельно, либо использовать библиотеку, такую как GLEW, GLProxy или широко используемую сейчас Epoxy.
- Vulkan решил применить аналогичный подход, экспортируя только символы основного профиля.
Однако, что особенно важно, многие Доступ к функциям, специфичным для расширения, можно получить через односвязный список, передаваемый функциям, информирующий о расширениях структуры.
- API DirectX использует единственную функцию, с которой необходимо связать связь.
, который вызывается путем передачи параметра, определяющего версию заголовков, которые использовались во время компиляции. После этого принимается указатель на непрозрачный объект, к которому можно получить доступ через виртуальные функции.Код: Выделить всё
Direct3DCreate9
И я не понимаю, почему другие библиотеки не выбрали этот вариант.
Наверное, мне чего-то не хватает.
Я ценю любой отзыв об опыте поддержки или использования различных подходов API!
Подробнее здесь: https://stackoverflow.com/questions/798 ... ntric-apis
Мобильная версия