Как компьютер рисует экран?

Как компьютер рисует что-либо на экране на самом низком уровне (ничего о внешних библиотеках, таких как X11)? Должны ли быть команды сборки, которые это делают? Как именно CPU контролирует то, что появляется на экране?

3 ответов


обычно существует область памяти под названием буфер кадров в вашей видеокарте. Запись значения там означает установление значения цвета пикселя.

вы можете рассматривать буфер кадров как 2D-массив, где каждый бит представляет пиксель на экране. Для представления цветов используются разные уровни буфера. Сегодня общий буфер кадров имеет 24 уровня (8 для каждого цветового компонента RGB) и позволяет определять 2^24 возможных цвета.

в наше время как правило, доступ к буферу кадров происходит через GPU для проблем перфорации: даже если это возможно для CPU для выполнения этой задачи, это довольно дорого.


принципиально так же, как он читает с жесткого диска или воспроизводит звуковой эффект.

путем записи определенных данных на определенные адреса памяти, которые сопоставляются контроллером памяти с соответствующим внешним оборудованием (жесткий диск, GPU или звуковая карта в этих случаях). Когда оборудование получает эти записи, оно интерпретирует данные, записанные как Инструкции о том, что делать.

процессор действительно изолирован от остальной части системы. Все, что он действительно знает. о шине памяти. Он может читать и записывать данные на этой шине, и это в основном все. Некоторые из этих операций чтения / записи идут в память, а другие могут быть сопоставлены с управляющими регистрами различных аппаратных средств или с памятью устройства, если таковые существуют, что позволяет ЦП общаться с другими устройствами.

современный GPU имеет свой собственный выделенный ОЗУ, в который он может загружать данные. Таким образом, CPU отправляет инструкции GPU, указывая, где в основной памяти он может найти данные, используемые для генерации содержимое экрана и что с ним делать. Затем GPU загружает эти данные из основной памяти в собственную ОЗУ, где выполняет необходимые преобразования и вычисления, прежде чем записывать их в буфер кадров, из которого монтитор постоянно считывает.


где-то есть память, которая посвящена видеоэкрану. Каждый пиксель на экране имеет определенный объем памяти. Избегая исторических решений, таких как палитры и черно-белые, обычно существует определенное количество битов для красного, некоторые биты для синего и некоторые для зеленого. Когда эти цвета добавляются, вы можете получить все, включая Белый (я знаю, что они не являются основными цветами, используемыми с краской, например, не волнуйтесь, это работает). Обычно вы найдете 24-битный цвет, потому что легко управлять 8 битами, байтом, красного цвета, байтом зеленого цвета и байтом синего, а также подключать память и т. д.

видеооборудование постоянно считывает эту память и использует любую технологию для отправки сигналов на монитор, которые по существу сообщают ему количество красного, зеленого и синего цветов для освещения определенного пикселя, постоянно сканируя экран с актуальной информацией.

несколько распространенных методов использования этой памяти-либо использовать что-то, называемое двойной портированный, где два объекта могут читать / записывать память. Или иметь два воспоминания и обмениваться ими. В любом случае есть другой объект, процессор, или сам процессор, или в наши дни много маленьких графических процессоров в видеокарте/чипе. В любом случае работает некоторое программное обеспечение, и они вычисляют местоположение и цвет всех пикселей и записывают их в видеопамять, в зависимости от используемого механизма сторона видео/монитора памяти принимает изменения, когда это имеет смысл. Вы не хотите иметь только некоторые пиксели букв, которые вы вводите, чтобы отображаться на одном проходе по экрану, а затем остальные появляются на следующем проходе, могут мерцать уведомления Пользователя.

видеопамять обычно отображается как системная память, процессор, скорее всего, будет использовать те же инструкции, которые он использует для доступа к не-видео, системе, памяти. Конечно, графические процессоры могут, но процессор обычно не имеет периферийных конкретных инструкций, uart, gpio, видео, usb, хранения и т. д. Периферийные устройства обычно отображаются как определенные адреса в памяти процессора и используются обычные инструкции чтения/записи памяти.

из-за специализированных типов алгоритмов и, что более важно, огромного количества вычислений, необходимых для видеоигр, видеокарты используют много, много, специализированных, простых графических процессоров, они могут вчера, сегодня или завтра иметь конкретные инструкции по производительности, размеру или мощности или по другим причинам. Что? вероятно, не изменится модель наличия памяти framebuffer, памяти, которая содержит экраны стоимостью пикселей, которые видеооборудование использует для создания сигналов для отправки на монитор, чтобы он мог рисовать экран.