[ LUGOS ] X programiranje
Igor Zaverski
igor.zaverski na izum.si
Čet Sep 25 11:56:50 CEST 1997
Gasper Fele wrote:
> > - z XPutImage preslikaj sliko v pixmap-o na Xserver-ju in ne na zaslon
> Kako ? v en window a kaj ?
Ne v window ampak v pixmap-o.
Ne me zopet razumet napacno: ne gre za podcenjevanje!
V knjigi MOTIF programming pise:
A pixmap is an off-screen area of memory that you can use as a drawable
for all X drawing commands except XClearArea and XClearWindow. The only
difference between an X window and an X pixmap is that the window,
unlike the pixmap, appears on the screen.
Se pravi z XCreatePixmap rezerviras v naslovnem prostoru Xserverja
podrocje-pixmapo 'p':
p = XCreatePixmap(display, screen, width, height, depth);
Po tem ukazu ima torej 'p' v Xserverju 'display' ima sirino 'width',
visino 'height' in barvno globino 'depth'.
Nato s funkcijo XPutImage prepises sliko 'image' iz tvojega programa
(client) v Xserver in sicer ravno v pravkar napravljeno pixmap-o 'p':
XPutImage(display, p, gc, image, src_x, src_y, dst_x, dst_y, width,
height);
'image' je sedaj ze shranjena v spominu Xserver-ja (konkretno v pixmap-i
'p'), vendar je ne vidis v oknu. Nato s funkcijo XCopyArea prekopiras
'p' v okno 'window':
XCopyArea(display, p, window, gc, src_x, src_y, width, height, dst_x,
dst_y);
Slika se v celoti prakticno v trenutku prikaze v oknu, saj jo Xserver
dejansko prekopira iz RAM-a v DRAM/WRAM na graficni kartici.
Prednosti:
- ker imas v pixmap-i kopijo tega kar je v oknu, lahko v primeru, ko
to okno prekrije kako durgo okno in se potem zopet umakne, ocem nevidno
prislikas prejsnje stanje, saj slika ne rabi potovati preko
mreze/cevi-pipe. Enako je, ce imas 'scrolling area'.
- obremenitev mreze je precej manjsa, saj sliko preneses v server le
enkrat potem pa preko mreze posiljas le ukaz XCopyArea, ki pa je dolg le
nekaj bytov.
- tudi v pixmap-o lahko vrisujes crte, kroge, kvadrate itd. Ko koncas
izris, vse skupaj pocis v window.
Slabosti:
- na racunalniku, kjer tece Xserver, zasedas vec spomina. Zato je, ce
je slika velika, potrebno spraviti v pixmap-e le tiste dele slike, ki bi
jih sicer pogostokrat moral poslati Xserverju preko mreze.
Namig: Netscape je eden od programov, ki izkorisca prednosti tega,
vendar se s slabostmi ne ukvarja prevec, zato pozre ogromno resursov.
> > - nato z XCopyArea preslikaj pixmap-o na Display, kar se zgodi
> Ce uporabim XCopyArea a je to dosti hitrejse kot ce bi dal pixmap
> preprosto
> na window in poiskusil XMapWindow ?
Hmm. Priznati moram, da funkcije XMapWindow nisem nikoli uporabljal, saj
sem delal z Motif Drawing Area, kjer tega ne potrebujes.
Sedaj, ko si jo ti omenil, sem sel pogledat v knjigo X WINDOW SYSTEM.
Po beznem pregledu zelo dvomim, da ima ta funkcija kaj s prikazom slike
v oknu.
> > prakticno v trenutku in ocem nezaznavno. Takemu nacinu se rece
> > DubbleBuffering, saj se slika poleg tega, da je na zaslonu (se pravi v
> No _TOLK_ me pa ni treba podcenjevat. DubbleBuffering valda de vem kwa
> je.
No, s tem nisem mislil, da ti tega ne ves. Hotel sem le dodatno
razloziti svoje prejsnje priporocilo.
L.P.
IgorZ
Dodatne informacije o seznamu Starilist