[ 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