Тогда другая версия: это "работает" через "отображение памяти".
Когда видеопамять "отображается" в оперативку. То есть, используется оперативная память
Когда мелкомягкие изобретали свой директ икс - ещё не было видеокарт. Были видеоадаптеры.
Картинка просчитывалась процессором в оперативке - в которой выделялся видеобуфер - и отправлялась в видеоадаптер, который уже сканировал свои 64К памяти 60 раз в секунду для вывода через VGA.
Тогда уже был OpenGL c его клиент-серверной архитектурой - чтобы можно было вести просчёт на одном компьютере в локальной сети, а смотреть результат на другом.
А мелкомягкие решили так - а давайте запилим прямой доступ к памяти!
Ну как прямой... Нельзя просто так взять и позволить прикладному программисту лазить в системной памяти.
Нужно "запереть" буфер, нарисовать в нём что-то - и не забыть "отпереть", а то система-то ждёт!
Ну так вот. Сделали они свой прямой доступ.
А потом появились видеоускорители. Которые взяли работу по рисованию на себя. И видеобуфер переехал туда же.
И никакого прямого доступа к видеобуферу быть не могло.
А OpenGL с клиент-серверной архитектурой оказался наоборот удачным для связки процессор-видеокарта.
Мелкомягкие потом долго DirectX допиливали... Игры делали на OpenGL в те годы.
Потом в OpenGL внедрили эту "фичу" из DirectX - по запиранию буфера. Которое тут нафиг не нужно.
В чём суть.
В OpenGL программист отдаёт команду - загрузить в память устройства (видеопамять) то-то и то-то.
В DirectX (и в OpenGL через "фичу") надо "запереть" буфер. Указав флаг - предполагается ли чтение из "запертого" буфера
(В это время в оперативке создаётся буфер. Если предполагается, что будет чтение - то туда надо достать инфу из видеопамяти - а этот обратный поток данных менее оптимизирован, чем прямой.)
Потом, вместо явной отправки инфы в видеопамять, программист кидает инфу в буфер.
Потом командует: Сезам, откройся... ой, буфер, отопрись!
(Тут содержимое буфера копируется из оперативки в видеопамять.)
В этот момент может произойти ошибка.
Если, например, юзер сменит разрешение экрана - то данные поломаются.
И программисту придётся повторить всю процедуру.
(То, что я написал в скобках, в руководствах не пишут напрямую, но это очевидно из тех же руководств.)