Возможно, вы знаете, что при попытке захвата приложений в полноэкранном режиме DirectX способ GDI (с использованием BitBlt()
) дает черный скриншот.Почему приложения Fullscreen для DirectX дают черные скриншоты?
Мой вопрос довольно прост, но я не нашел ответа: почему? Я имею в виду технически, почему он дает черный снимок экрана?
Я читаю учебник DirectX здесь: http://www.directxtutorial.com/Lesson.aspx?lessonid=9-4-1. Написано:
[...] Функция BeginScene() [...] выполняет функцию блокировки, где буфер в видеопамяти «заблокирован», предоставляя вам эксклюзивный доступ к этой памяти.
Это причина? VRAM заблокирован, поэтому GDI не может получить к нему доступ, и он дает черный снимок экрана? Или есть еще одна причина? Как DirectX прямо «разговаривает» с графической картой, а GDI не понимает?
спасибо.
Я действительно не знал, что они переключились с волшебной системы цвета, хотя это имеет смысл, учитывая, насколько она хакерская. TIL! Теория остается неизменной, хотя независимо от того, как вы определяете свою область оверлея. – Blindy
Сначала я не понял ваше сообщение, поэтому переформулирую. На самом деле GDI ** использует ** ту же самую память для рендеринга ** все ** графики из ** всех ** процессов (начальное меню, окна и т. Д.). Однако, поскольку все процессы используют одну и ту же память, для этого требуется некоторый ** механизм синхронизации ** (блокировка/разблокировка памяти), чтобы гарантировать, что память не считывается/записывается одновременно с помощью двух потоков. Этот механизм занимает ВРЕМЯ! Чтобы получить лучшие характеристики, DirectX использует ** выделенную ** память, поэтому нет необходимости в синхронизации! Общая память заполнена ** магическим цветом ** (например, черным), поэтому скриншоты черные. – GuiTeK
Вы совершенно не поняли, GDI не владеет чем-либо за пределами маленьких оконных игр, которые даже не используются. GDI работает на процессоре, все, что он затрагивает, обрабатывается процессором, чего мы хотим избежать. Таким образом, вместо этого на GPU подается почти черный прямоугольник (ваше окно), который никогда не меняется (никогда не будет перерисовываться), и графическая карта просто рисует поверх почти черных пикселей сама по себе. – Blindy