Показать полную графическую версию : Двойная буферизация в X Window
Проблема такая:
Нужно в памяти нарисовать кадр изображения (кадр большой, размером с экран), а потом быстро вывести его на экран. Вывод функциями X Window (никаких GTK, QT).
Как это лучше сделать? Можно ли в X Window реализовать несколько страниц в видеопамяти, чтобы быстро переключаться между ними?
Пока использую XPutImage (XShmPutImage), но XImage не является drawable и это очень неудобно.
ruslandh
15-05-2005, 16:26
1 Напрямую к видеопамяти обратиться через X сервер нельзя: так-как X-клиенты работают с X-сервером по сетевому протоколу, то никакого прямого размещения изображение с видеопамяти со стороны X клиента быть не может.
2 Если только создавать файл картинки на каком-нибудь RAM диске, и "выплевывать" его на экран
А если клиент и сервер - это один компьютер? Ведь для этого придуманы shared memory segments..
ruslandh
16-05-2005, 08:04
penykovОни всё равно работают по сетевому протоколу. А передача через общее поле памяти не используется в этих программах.
Да что я Вам рассказываю - посмотрите исходники X сервера и проверьте - может что-то полезное для себя найдёте :)
Хорошо, возвращаясь к другой части вопроса: как в памяти хранить кадр изображения и рисовать туда? XImage не является drawable; пиксельная карта на весь экран мне кажется неправильным решением.
ruslandh
18-05-2005, 07:54
Варианты
1 Рисовать в цикле (стандартная перерисовка) и только то, что меняется со временем. И хранить соответственно только изменения.
2 Хранить рисунок в каком-то формате (преобразовав его в заданный вид) и при необходимости из этого формата считывать и выдавать заново.
Напрямую к видеопамяти можно обратиться через расширение DGA, когда сервер и клиент работают на одном компьютере.
Двойную бефиразцию можно сделать через расширение VidMode, если сделать размер виртуального экрана в несколько раз больше видимой области.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.