Аппаратно-программное обеспечение

Компьютерная графика = Компьютер + графика… помните?

Что у нас есть на стороне компьютера ?
Ну, я не знаю 😛 это может быть мощный ПК или смартфон на Android или iOS, или бог знает какой чип… Мы должны предположить вещи и установить их как минимальные требования, необходимые для запуска нашего приложения.
В этом случае мы можем предположить, что у нас есть процессор, оперативная память, графический процессор, видеопамять и немного места на диске.

Это, конечно, сложнее, чем я собираюсь объяснить или предположить прямо сейчас, но давайте минимизировать сложность проблемы..

Процессор

Во-первых, у нас есть ЦП (центральный процессор), который в основном является исполнителем, он выполняет инструкции, вот и все. Ничего другого он не делает, он не способен хранить какие-либо данные (кроме кеша…). Каждый ЦП имеет определенную архитектуру и набор инструкций (ISA). Любая программа, которая будет выполняться ЦП, должна обеспечивать свою логику только с помощью разрешенных инструкций для этого ЦП. Иначе не запустится.
Не будем забывать, что ЦП выполняет инструкции последовательно, поэтому инструкции не выполняются параллельно. Если у нас более 1 ядра, приложение может использовать дополнительные ядра для параллельного выполнения инструкций других программ.

ОЗУ

Оперативная память или основная оперативная память — это место, где мы можем быстро хранить и извлекать данные. Этот тип хранилища является энергозависимым, а это означает, что ему нужно, чтобы компьютер продолжал проталкивать через него электроны, чтобы сохранить данные, иначе все будет стерто, и именно это происходит, когда вы выключаете компьютер….
ОЗУ обычно работает с чрезвычайно низкой частотой, чем ЦП.
Это означает, что ЦП должен замедляться и ждать каждый раз, когда он извлекает или сохраняет некоторые данные в ОЗУ.
Пример ОЗУ работает на частоте 2400 МГц, а ЦП работает на 1,8 ГГц …
Это означает, что для бесперебойной работы нашего приложения нам нужно убедиться, что ЦП не использует оперативную память настолько, насколько это возможно… Но где данные верны? … Просто имейте это в виду, мы вернемся к этому позже..

графический процессор

Графический процессор в основном противоположен центральному процессору. Он выполняет инструкции параллельно и очень быстро решает параллельные задачи. С другой стороны, это чрезвычайно медленно в случае последовательных проблем... Так что будьте осторожны, когда пытаетесь выполнить алгоритмы, которые должны выполняться синхронно...
Обычно существуют API, которые позволяют вам взаимодействовать с графическим процессором. Например, OpenGL или OpenCL… В графике реального времени вы пишете шейдеры, которые по сути являются программами, работающими на графическом процессоре… позже мы напишем некоторые шейдеры…

видеопамять

Видеопамять с произвольным доступом, предназначенная исключительно для GPU для хранения данных и шейдерных программ… Очень важно понимать, что она отличается от основной оперативной памяти. Обычно размер видеопамяти позволяет хранить текстуры с более высоким разрешением и, таким образом, воспроизводить более привлекательную графику.

Какое отношение все это имеет к OpenGL?

В современном OpenGL API мы храним геометрию сцены в VRAM. OpenGL помогает нам «загружать» данные геометрии сцены и шейдеры в VRAM, чтобы уменьшить задержку, вызванную пропускной способностью PCI Express.
Позвольте мне объяснить…
Intel предоставляет высокоскоростной аппаратный интерфейс «PCIe lanes» для подключения периферийных устройств к ЦП обычно графическому процессору требуется 16 линий PCIe. Эти дорожки очень важны, потому что они представляют связь между GPU и CPU. Любые данные, которые должны передаваться от ЦП и обратно к ГП, должны проходить через эти дорожки. Это создает огромную проблему. Каждый кадр, который мы хотим отрендерить, мы не можем продолжать передавать данные кадра через эти драгоценные дорожки… Если сцена станет больше, эти дорожки будут заблокированы, и приложение замедлится. Что ж, ответ был таков: перемещайте данные на графический процессор как можно дольше, сохраняя минимальный объем данных, передаваемых в каждом кадре через эти линии PCIe.

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

Что вы должны вынести из этой статьи, так это то, почему мы даже загружаем данные в GPU и почему больше VRAM имеет значение…
В следующей статье мы создадим базовое приложение OpenGL helllo world.
Ура!