Как HD-видео работает на современном оборудовании (OpenGL)?

#opengl #gpu

#opengl #gpu

Вопрос:

Во времена DOS мы просто копировали необработанные данные изображения в память для каждого кадра.

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

1080 * 1200 * 4 (цветовые данные) * 60 (кадров в секунду) = 311 мегабайт каждую секунду.

Итак, мы предварительно загрузили текстуры и вершины в память GPU и просто отправили преобразования.

Итак, как решается задача воспроизведения HD-видео на современном оборудовании? Есть ли способ сжимать каждый кадр, отправляемый на GPU? Или мы просто отправляем необработанные 311 МБ / с, как в старые времена?

Ответ №1:

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

Однако ваша математика не работает. 1080p — это 1920×1080. для видео с разрешением 30 кадров в секунду при 1080p требуется ~ 238 МБ / с. И … это вполне выполнимо. Даже PCIe 1.0 x1 может справиться с этим (хотя и с трудом), а графические процессоры, как правило, используют слоты x16, поэтому пропускная способность в 16 раз больше. А PCIe находится в версии 4.0 (на большинстве компьютеров), так что сегодня это намного быстрее.