Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Двойная буферизация в X Window (http://forum.oszone.net/showthread.php?t=49319)

penykov 15-05-2005 15:29 324318

Двойная буферизация в X Window
 
Проблема такая:
Нужно в памяти нарисовать кадр изображения (кадр большой, размером с экран), а потом быстро вывести его на экран. Вывод функциями X Window (никаких GTK, QT).
Как это лучше сделать? Можно ли в X Window реализовать несколько страниц в видеопамяти, чтобы быстро переключаться между ними?
Пока использую XPutImage (XShmPutImage), но XImage не является drawable и это очень неудобно.

ruslandh 15-05-2005 16:26 324330

1 Напрямую к видеопамяти обратиться через X сервер нельзя: так-как X-клиенты работают с X-сервером по сетевому протоколу, то никакого прямого размещения изображение с видеопамяти со стороны X клиента быть не может.
2 Если только создавать файл картинки на каком-нибудь RAM диске, и "выплевывать" его на экран

penykov 15-05-2005 20:13 324376

А если клиент и сервер - это один компьютер? Ведь для этого придуманы shared memory segments..

ruslandh 16-05-2005 08:04 324452

penykovОни всё равно работают по сетевому протоколу. А передача через общее поле памяти не используется в этих программах.
Да что я Вам рассказываю - посмотрите исходники X сервера и проверьте - может что-то полезное для себя найдёте :)

penykov 17-05-2005 23:12 325072

Хорошо, возвращаясь к другой части вопроса: как в памяти хранить кадр изображения и рисовать туда? XImage не является drawable; пиксельная карта на весь экран мне кажется неправильным решением.

ruslandh 18-05-2005 07:54 325139

Варианты
1 Рисовать в цикле (стандартная перерисовка) и только то, что меняется со временем. И хранить соответственно только изменения.
2 Хранить рисунок в каком-то формате (преобразовав его в заданный вид) и при необходимости из этого формата считывать и выдавать заново.

penykov 28-05-2005 23:10 328211

Напрямую к видеопамяти можно обратиться через расширение DGA, когда сервер и клиент работают на одном компьютере.

Двойную бефиразцию можно сделать через расширение VidMode, если сделать размер виртуального экрана в несколько раз больше видимой области.


Время: 12:24.

Время: 12:24.
© OSzone.net 2001-