LINUX.ORG.RU

Тупой вопрос. Потерпите ) Как физически реализован вывод видео в Android на экран, если в OpenGL одни текстуры можно выводить?

 


1

1

Как физически выводится видеоизображение в OpenGL-средах? Неужели 60 раз в секунду текстура обновляется на 2 треугольниках, составляющих прямоугольный экран?

Рассмотрим приложение YouTube под андроидом. С точки зрения приложения, вывод на экран - это сплошной OpenGL? Смесь OpenGL + попиксельного доступа к экранному буферу?



Последнее исправление: hlamotron (всего исправлений: 2)

Да под ним даже шрифтов не бывает, руками надо всё рендерить в текстуры

Ты так говоришь, как будто где-то шрифты не надо рендерить... Какая тебе разница если есть 2d api, где всё уже украдено сделано до тебя?

no-such-file ★★★★★
()

за все не отвечу, но

Да под ним даже шрифтов не бывает

когда пилили свой гуй на опенгле, сначала да, шрифты рендерил руками в текстуры, потом прикрутил sdl-ttf.

vvviperrr ★★★★★
()

Главное кадр сформировать. Плевать что его формировать будет - OpenGL или что-то другое. Тот же OpenGL просто формирует кадр и он выводится. Шрифты рендерятся в текстуру, а текстура уже формирует кадр и т.д..

ozzee
()
Ответ на: комментарий от ozzee

А вообще все рендерится в текстуру. Потом ее выводит графическая система(как иксы на декстопах).

ozzee
()

Как физически выводится видеоизображение в OpenGL-средах?

PBO - Pixel Buffer Object

Неужели 60 раз в секунду текстура обновляется на 2 треугольниках, составляющих прямоугольный экран?

А что вас здесь смущает ? Текстуры есть разные, если ее разместить в правильном адресном пространстве (для чего и служит PBO) то обновлять ее можно очень быстро. Особенно если использовать YUV + шейдеры вместо RGB

Смесь OpenGL + попиксельного доступа к экранному буферу?

Так исторически сложилось что в 3D системах CPU не имеет доступа к «экранному буферу», и если CPU нужно прочитать содержимое буффера (скриншот сделать) то он просит GPU скопировать ВЕСЬ буффер кудато в системную память (очень медленно и дорого), если CPU нужно записать чтото в буффер - то он формирует содержимое в отдельном буфере и просит GPU перенести/скопировать его содержимое на в экранный буфер.

zaz ★★★★
()
Последнее исправление: zaz (всего исправлений: 1)
Ответ на: комментарий от vvviperrr

он тоже в текстуру рисует. даже Qt в текстуру рисует сперва. просто у них есть манагер букв в текстуре.

i36_zubov
()

В 1х андроидах, когда ещё не всё выводилось через опенжл был обычный /dev/fb0 и флип аппаратный или через memcpy. + skia что-то там рисовала.

sergej ★★★★★
()

Рассмотрим приложение YouTube под андроидом. С точки зрения приложения, вывод на экран - это сплошной OpenGL? Смесь OpenGL + попиксельного доступа к экранному буферу?

Зависит от реализации - кроме 3D GPU бывают 2D GPU заточенные для композитинга, специализированные пиксельные процессоры для захвата и обработки изображений так что они могут быть использованы для энергосбережения так как они затачиваются на специализированные преобразования то потребляют на порядок меньше. Физически на конечном этапе RGB картинка через енкодер - HDMI, LVDS, MIPI и тд передается на устройство отображения - LCD панель. В принципе часто встраивают и аналоговые енкодеры для TV но на телепонах они конечно не используются.

anonymous
()
Ответ на: комментарий от anonymous

3D тут ни при чём. OpenGL он живёт и в 2D, ибо всё что он умеет делать - быстро рисовать текстурированные треугольники, а они 2D. WebGL так вообще про 3D ничего не знает.

hlamotron
() автор топика

Не на 2x треугольниках, а например для перекрывающихся элементов свои.

anonymous
()
Ответ на: комментарий от anonymous

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

hlamotron
() автор топика

Потерпите

Прочитал как «Поттеринга».

rezedent12 ☆☆☆
()
Ответ на: комментарий от hlamotron

3D тут ни при чём. OpenGL он живёт и в 2D

болеешь чтоли - покажи реализацию OpenGL на 2D GPU ? не, понятно что хоть на CPU можно реализоавть, но везде используют 3D GPU, 2D для композиторов и векторной графики.

anonymous
()
Ответ на: комментарий от anonymous

GPU по определению 2D. Графика двумерная. Он с пикселями работает в основном. Треугольники заливает пикселями (беря их из текстуры или генерируя шейдерами). Всё что там есть от 3D - небольшая нахлабучка. Ускоритель ускоряет именно рутинную работу с пикселями, масштабированием, поворотом текстур и т.п., а не глубиной картинки занимается.

hlamotron
() автор топика
Ответ на: комментарий от anonymous

Это вот типичный набор графических корок на типичном мобильном процессоре для типичных задач - мобильная ОС типа андроед.

anonymous
()
Ответ на: комментарий от anonymous

В каком месте этот скриншот что-то подтверждает или опровергает? Написанное на плоскости слово «3D» должно воздействовать гипнотически или чё?

hlamotron
() автор топика
Ответ на: комментарий от hlamotron

В каком месте этот скриншот что-то подтверждает или опровергает?

Там показано что OpenGL реализована на 3D GPU - по крайней мере производители GPU их так называют, а то что ты придумал - меня не интересует - как минимум по тому что вопросы у тебя тупые и сильно заметно что не разбираешься ты в вопросе совсем.

anonymous
()
Ответ на: комментарий от anonymous

вероятно он имеет ввиду что OpenGL обрабатывает поверхности модели, но никак не объём модели целиком.

OpenGL помимо рисования умеет обсчитывать 3D модели, например считать освещенность, тени, пересечение поверхностей. Всё это невозможно с применением только 2D алгебры, поэтому и говорят что OpenGL - это 3D modelling

anonymous
()

В современном андроиде выпилено всё API видео-акселераторов, умеет оно только GLES. Иногда, когда GLES тормозит, вендоры городят треш и угар с буферами и v4l и костылят это туда, но тут у каждого свой велосипед. Композитинг тоже на GLES. Отрисовка всего в текстуры софтовая (freetype) потом текстуры композитятся. Видео гонится тоже в текстуру и конвертится shader'ом из YUV в RGB и композитится всё вместе. Когда шейдером медленно, делают костыль (из-за этого часто видео раотает только полноэкранное, так как используют оверлей) на v4l в композиторе (surfaceflinger). Там часто вендором в графическом стеке всё в требуху разнесено, и всё обмотано изолентой. Просто нету в штатном андроиде ни поддержки аппаратных скейлеров, ни матричных процессоров, ничего нету кроме GLES, а часто бывает, что это не эффективно на многих не самых медленных SoC, поэтому пддержку приходится реализовывать.

slapin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.