Как программа для записи ужимается в 40 МБ ОЗУ, пока OBS ест полгига
Habr ·

На Windows для захвата экрана есть два классических пути: GDI (медленно и печально) и DXGI Desktop Duplication API. HomRec использует второй вариант. Смысл DXGI Desktop Duplication в том, что видеокарта сама отдаёт вам текстуру рабочего стола - не нужно постранично вычитывать пиксели через GDI . Вызов AcquireNextFrame возвращает GPU-текстуру с очередным кадром, а если на экране ничего не изменилось - честно говорит "нечего отдавать" (таймаут), и можно просто повторно использовать прошлый кадр вместо лишней работы. Проблема в том, что эта GPU-текстура недоступна напрямую из CPU-памяти - её сначала нужно скопировать в "staging-текстуру" и замапить. А вот тут прячется первая интересная деталь. Читать далее
На Windows для захвата экрана есть два классических пути: GDI (медленно и печально) и DXGI Desktop Duplication API. HomRec использует второй вариант. Смысл DXGI Desktop Duplication в том, что видеокарта сама отдаёт вам текстуру рабочего стола - не нужно постранично вычитывать пиксели через GDI . Вызов AcquireNextFrame возвращает GPU-текстуру с очередным кадром, а если на экране ничего не изменилось - честно говорит "нечего отдавать" (таймаут), и можно просто повторно использовать прошлый кадр вместо лишней работы. Проблема в том, что эта GPU-текстура недоступна напрямую из CPU-памяти - её сначала нужно скопировать в "staging-текстуру" и замапить. А вот тут прячется первая интересная деталь. Читать далее