Видео (1)

Feb 14, 2010 10:20

Построение экранного изображения, в принципе, довольно примитивное занятие. Если отбросить все безумные подробности, X11 и OpenGL, то дело сводится к наличию некоторого количества фрагментов памяти (буферов), имеющих разную структуру (глубина цвета, цветовое пространство, упаковка пикселов) и к механизму смешивания этих буферов. В конце концов, в ( Read more... )

linux

Leave a comment

Comments 28

duke_igthorn February 14 2010, 09:23:31 UTC
"обычно это либо magenta, как единственный цвет, который отсутствует в естественном световом потоке."
либо что?

Reply

abbra February 14 2010, 09:32:34 UTC
Либо все, что удалось подобрать автору приложения. Многие используют оттенок синего, что не очень правильно.

Я убрал "либо".

Reply


duke_igthorn February 14 2010, 09:28:33 UTC
Какие GL расширения отвечают за него?

Reply

abbra February 14 2010, 09:32:57 UTC
Отвечают за что? За texture streaming?

Reply

duke_igthorn February 14 2010, 09:38:32 UTC
Да. Или вопрос лишен смысла?

Reply

abbra February 14 2010, 09:54:15 UTC
Нет, не лишен. Тут есть несколько проблем. Во-первых, у каждого вендора эти расширения называются по-разному и им соответствуют разные функции. Во-вторых, в игровой индустрии под texture streaming понимают совершенно иное -- динамическую подгрузку текстур в зависимости от расстояния зрителя до элемента сцены.

В случае PowerVR, который стоит в N900 (SGX530) и во многих других мобильных устройствах, соответствующие функции доступны в расширении GL_IMG_texture_stream. В качестве работающего примера на OMAP3 смотри код Роба Кларка из TI -- http://gitorious.org/gst-plugin-bc/gst-plugin-bc/blobs/master/bc-app/bc-app.c
Этот код требует сборки модуля к ядру. :)

Reply


wizzard0 February 14 2010, 12:06:55 UTC
ммм. а разве Х-сервер не умеет асинхронно буферизовать? (т.е. частота запихивания кадров в конвейер всегда ограничена временем полной прокрутки конвейера?)

Reply

abbra February 14 2010, 16:16:01 UTC
Буферизировать умеет, но мы же не знаем, когда он реально кадр с XShmPutImage обработает, придется делать пул буферов и надеяться, что когда мы обработаем последний из пула, первый уже освободится.

Reply

luarvique February 14 2010, 19:30:04 UTC
Знаем. XFlush().

Reply

abbra February 14 2010, 20:37:53 UTC
XFlush() лишь заставит все запросы с нашей стороны реальной уйти на сервер, но не гарантирует, что хоть какая-то обработка этих запросов реально произошла. Можно было бы использовать в этом случае XSync(), это как раз его случай -- для синхронизации доступа к одной и той же картинке, разделяемой через MIT-SHM, но в общем случае XSync() скорее вреден, чем полезен.

Reply


zed_0xff February 14 2010, 13:58:09 UTC
спасибо, очень интересно, узнал много нового! :)
а можно поподробнее, или где можно почитать на тему того что magenta отсутствует в естественном?

Reply

abbra February 14 2010, 16:33:14 UTC
Magenta -- это единственный цвет, которому не соответствует отдельная длина волны света. Magenta получается смешиванием длин волн, соответствующих красному и синему, но при расщеплении белого света призмой мы никогда не увидим magenta.

Также важно понимать, что фуксин, который использовали для создания этого цвета до изобретения печатной magenta в 1890-х и электронной magenta в 1980-х, отличается от электронной magenta (#FF00FF в RGB). Поэтому то, что мы наблюдаем при печати и в природе, это чуть другой цвет. Точнее, наш мозг воспринимает их по-разному, потому что цвета -- это реакция нашего мозга на свет.

Почитайте http://www.biotele.com/magenta.html для начала.

Reply

zed_0xff February 14 2010, 16:50:59 UTC
thx

Reply

eth0_blog February 15 2010, 00:34:13 UTC
Какой ужас ))
Ну ноты, надеюсь, все реально существующие? Нельзя ж так представления о мире резко разрушать ))))

Reply


luarvique February 14 2010, 19:54:09 UTC
Вообще, конечно же, всегда можно open("/dev/fb0",O_RDWR);mmap(...

Reply

abbra February 14 2010, 20:41:13 UTC
Хочется обеспечить что-нибудь цивилизованное. :) К тому же, не все драйвера фреймбуферов выставляют дополнительные порты как /dev/fb*, например, это не так с Nvidia.

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

Reply

luarvique February 14 2010, 23:00:49 UTC
Ну тут же явный случай просящийся в fb0: имеет место полноэкранное приложение которое все делает само, а от системы хочет всего лишь место чтобы положить картинку. То есть оно (приложение) практически прямым текстом просит у системы frame buffer :)

Насчет непереносимости, я бы поспорил: в отличие от всех этих X, Xext, Xv, и прочих заклинаний, кусок памяти с картинкой нынче имеется практически везде.

Reply

abbra February 15 2010, 06:02:28 UTC
Да, если оно полноэкранное. Мне интересен случай неполноэкранного (вроде application grid в N900 и видео во фрагменте окна). Полноэкранное никто не даст, там же композитный менеджер в общем случае всю малину портит. Да и в камере есть конкретный пример с toolbar, а значит, и остальным хозяйством извне.

Reply


Leave a comment

Up