Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako eliminisati treperenje (flickering)

[es] :: 3D programiranje :: Kako eliminisati treperenje (flickering)

[ Pregleda: 2863 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mikky

Član broj: 18
Poruke: 1563
*.verat.net

ICQ: 44582291


+58 Profil

icon Kako eliminisati treperenje (flickering)19.11.2003. u 11:22 - pre 247 meseci
Ovo me u stvari zanima za GDI, jer se nebavim 3d programiranjem a mislim da je ovo bolji forum za ovo pitanje od c/c++.
U svakom slucaju poznato je da kad se prozor resizuje dolazi do treperenja usled refresh rate-a. Jedno od resenja ovog problema je back-buffering, odnosno crtanje u memoriju pa kopiranje toga na DC prozora, umesto direktno crtanje na prozor.
Ono sto mene zanima je da li je ovo moguce primeniti i na kontrole, tipa listview, treeview itd. S obzirom da njih crta windows a ne moj program.
Znaci ja na prozoru imam recimo 3 child prozora, jedan treeview, jedan dialog i jedan moj custom prozor. Pri resizovanju glavnog prozora dolazi do jakog treperenja, ja recimo mogu da backbufferujem moj prozor ali kako to da postignem sa ova druga dva? Postoji li nacin da se kaze kontroli da uradi crtanje na DC koji ja odredim? Time bih pored mog prozora i ostale kontrole uradile crtanje po memory DC-u, koji bi posle jednostavno kopirao na glavni prozor, samo ne znam da li je ovo i kako moguce. Ili mozda posoji jos neka fora za koju ne znam?
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.attbi.cable.earthlink.net



+18 Profil

icon Re: Kako eliminisati treperenje (flickering)19.11.2003. u 16:02 - pre 247 meseci
Da, ako ceo prozor crtas u offscreen DC, mozes da izbegnes treperenje. Samo, ima jedan 'trik' koji si ti spomenuo - uopste nema potrebe da menjas kontrole, dovoljno je da DC koji im das za crtanje bude onaj baferovan (offscreen), a ne onaj koji crta direktno na ekranu. Zamenu DCa mozes da uradis u WM_PAINT handleru.

Inace, u Longhornu ovo Windows radi automatski za tebe, jer ceo desktop radi kao engine za video igru - back buffering, vertical sync, offscreen compositing, i naravno sve na 3D kartici. I nema vise DCa - konacno.
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.verat.net

ICQ: 44582291


+58 Profil

icon Re: Kako eliminisati treperenje (flickering)19.11.2003. u 21:08 - pre 247 meseci
Ok ali kako proslediti kontrolama i dialogu zeljeni DC, probao sam ovako, u WndProc mog glavnog prozora kada dobijem WM_PAINT poruku prvo napravim memory DC iscrtam ono sto je moj posao i zatim posaljem WM_PAINT child kontrolama i child dialogu da i oni to urade na mom memory DC:

SendMessage(hDlg, WM_PAINT, hMemDC,0);

Posle toga kopiram memory DC u onaj na ekranu ali dialog i dalje treperi kad se resizuje? Da li mozda treba da subclassujem kontrole ili u dialog proceduri da nekako obradim to sve?
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

[es] :: 3D programiranje :: Kako eliminisati treperenje (flickering)

[ Pregleda: 2863 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.