Как OpenGL делает запросы к видеокарте?

Я пишу программу с API OpenGL например на C++ и пишу понятные мне команды, скажем glClearColor(0.0f, 0.0f, 0.0f, 1.0f);, а что с ней случается потом? Она превращается в какой-то ассемблер для видеокарт? И ещё интересно, все видеокарты поддерживают OpenGL, а сам он это что, какой-то ассемлер для видеокарт?


Ответы (1 шт):

Автор решения: Kromster

Как OpenGL делает запросы к видеокарте?

Команда отправляется в дрова видеокарты и встает в очередь. Вся отрисовка асинхронная. Что творится внутри - по большому счету, магия реализуемая драйверами.

Для всех основных API (типа OpenGL/Metal/Vulkan/итп) есть документация от производителей, раскрывающая общие детали реализаций. Например, порядок прохода конвеера отрисовки.

Обратите внимание, к примеру, что драйвера могут давать менять настройки (исполнение) независимо от приложения, например пресловутый ползунок "скорость - качество", или выбор алгоритма AA, или даже псевдо-стерео. И уж точно меняют их (в основном к лучшему, но иногда и ломая что-то) от версии к версии.

все видеокарты поддерживают OpenGL, а сам он это что, какой-то ассемлер для видеокарт?

Не все, а только те, у которых сделана соответствующая реализация в драйверах. Немного отстраненный пример, но на смартфонах есть только OpenGL ES (урезаная спецификация).

Сам OpenGL это всего лишь спецификация - описание API. Того ЧТО реализация должна уметь делать. А уж КАК она это будет делать - целиком и полностью на усмотрение реализующего.

Например есть чисто софтверная реализация OpenGL (версии 2.1 если верно помню) от Mesa, которой видеокарта не нужна.

→ Ссылка