Это не совсем вопрос программирования (или нет?), Но мне было интересно:
Как графическая информация и звук обрабатываются из кода и выводятся на ПК?
Myпредположение для графики:
Где-то есть зарезервированное пространство памяти, в котором достаточно места для кадра графического вывода на ваш монитор.IE: 800 x 600, 24-битный цветной режим == 800x600x3 = ~ 1,4 МБ памяти
Между каждым обновлением программа записывает видеоданные в это пространство.Это действие выполняется до обновления монитора.Предположим простую 2D-игру: графические данные хранятся в машинном коде в виде множества байтов, представляющих значения цвета.В зависимости от того, какая программа (ы) инструктирует ПК, процессор считывает соответствующие данные и записывает их в область памяти.
Когда пришло время обновить монитор,он читает из каждого байт-памяти пространство памяти и активирует аппаратное обеспечение в зависимости от этих значений для каждого цветового элемента каждого пикселя.
Все это, конечно, происходит безумно быстро и повторяетсях раз в секунду, х - частота обновления монитора.Я упростил собственное, вероятно, неверное объяснение, избегая разговоров о двойной буферизации и т. Д.
Вот мои вопросы:
a) Насколько близка приведенная выше догадка (три шага)?
б) Как можно включить графику в чистый код C ++?Я предполагаю, что практическая вещь, которую делают все, - это использование графической библиотеки (SDL, OpenGL и т. Д.), Но, например, как эти библиотеки выполняют то, что они делают?Включает ли ручное включение графики в чистый код C ++ (скажем, 2D-злобу) создание двумерного массива битовых значений (или трехмерного для включения нескольких значений RGB на пиксель)?Неужели это так и будет сделано в тот день?
в) Кроме того, продолжая сверху, делайте библиотеки, такие как SDL и т. Д., Которые используют фактические битовые карты, просто встраивая файлы битовых карт / etc в машинный код исполняемого файла.и использовать их так, как если бы они были построены по тому же вопросу, который упомянут в вопросе b выше?
d) На моем гипотетическом шаге 3 выше есть ли какие-либо регистры?Например, вы могли бы записать какое-нибудь значение байта в какой-либо регистр, чтобы вывести на экран один цвет одного байта?Или это чисто выделенное пространство памяти (= RAM) + аппаратное взаимодействие?
e) Наконец, как все это делается для звука?(Понятия не имею :))