Двойная буферизация в X Window
Проблема такая:
Нужно в памяти нарисовать кадр изображения (кадр большой, размером с экран), а потом быстро вывести его на экран. Вывод функциями X Window (никаких GTK, QT). Как это лучше сделать? Можно ли в X Window реализовать несколько страниц в видеопамяти, чтобы быстро переключаться между ними? Пока использую XPutImage (XShmPutImage), но XImage не является drawable и это очень неудобно. |
1 Напрямую к видеопамяти обратиться через X сервер нельзя: так-как X-клиенты работают с X-сервером по сетевому протоколу, то никакого прямого размещения изображение с видеопамяти со стороны X клиента быть не может.
2 Если только создавать файл картинки на каком-нибудь RAM диске, и "выплевывать" его на экран |
А если клиент и сервер - это один компьютер? Ведь для этого придуманы shared memory segments..
|
penykovОни всё равно работают по сетевому протоколу. А передача через общее поле памяти не используется в этих программах.
Да что я Вам рассказываю - посмотрите исходники X сервера и проверьте - может что-то полезное для себя найдёте :) |
Хорошо, возвращаясь к другой части вопроса: как в памяти хранить кадр изображения и рисовать туда? XImage не является drawable; пиксельная карта на весь экран мне кажется неправильным решением.
|
Варианты
1 Рисовать в цикле (стандартная перерисовка) и только то, что меняется со временем. И хранить соответственно только изменения. 2 Хранить рисунок в каком-то формате (преобразовав его в заданный вид) и при необходимости из этого формата считывать и выдавать заново. |
Напрямую к видеопамяти можно обратиться через расширение DGA, когда сервер и клиент работают на одном компьютере.
Двойную бефиразцию можно сделать через расширение VidMode, если сделать размер виртуального экрана в несколько раз больше видимой области. |
Время: 01:00. |
Время: 01:00.
© OSzone.net 2001-