Я знаю, что уже есть принятый ответ, но я хотел бы добавить еще один: OpenGL / DirectX
Ни один из этих API-интерфейсов не является полной реализацией (хотя DirectX в этом отношении, конечно, немного более нагружен), но вместо этого являются общими методами передачи команд рендеринга на видеокарту.
Поставщики карт - это те, кто предоставляет реализацию (драйвер) для конкретной карты, которая во многих случаях очень специфична для оборудования, но вам, как пользователю, никогда не нужно заботиться о том, чтобы один пользователь работал с GeForce ABC, а другой - Radeon XYZ, потому что точная реализация скрыта за высокоуровневым API. Если бы это было не так, вам нужно было бы иметь кодовый путь в своих играх для каждой карты на рынке, который вы хотели бы поддерживать, что было бы совершенно неуправляемо с первого дня. Еще один большой плюс этого подхода заключается в том, что Nvidia / ATI может выпустить более новая и эффективная версия их драйверов, и вы автоматически получаете выгоду без усилий с вашей стороны.
Тот же принцип действует для звука, сети, мыши, клавиатуры ... практически любого компонента вашего компьютера. Независимо от того, происходит ли инкапсуляция на аппаратном уровне или в программном драйвере, в какой-то момент все особенности устройства скрыты, чтобы вы могли рассматривать любую клавиатуру, например, как просто клавиатуру, а не как Microsoft Ergonomic Media Explorer Deluxe Revision 2 .
Когда вы смотрите на это таким образом, быстро становится очевидным, что без какой-либо формы инкапсуляции / абстракции компьютеры, как мы их знаем сегодня, просто не будут работать вообще. Это достаточно блестяще для тебя?