[ boomLM @ 05.03.2007. 22:52 ] @
Tragovi, tragovi... senke,.. flick...

Koliko sam uspeo da se informisem GDI+ neiskoristava potencijal hardvera... i zbog toga se javlja sledeci (moj) problem.

Aplikacija koju radim koristi CustomControls i generise odredjeni br tih kontrola... Problem se javlja kada se kontrole pomeraju. tj kada im menjam pomocu MouseMove eventa lokaciju.

Javlja se trag (senka) koju Paint aplikacije ne odradjuje dobro ili se kontrole vrlo sporo pomeraju (dolazi do cepkanja) u zavisnosti od ControlStyle podesavanja. Pokusao sam sve moguce (i nemoguce) kombinacije SetStyle(ControlStyle....., tru/false) ali sve daje rezultate koje sam naveo. Naravno efekat se pogorsava sa porastom broja kontrola.

ControlStyle sa podesavao i za kontrole i za aplikaciju i isto... pokusao sam i sa Invalidate u OnPaintu ali isto...
Jel se neko mozda hvatao u kostac sa ovim problemom do sada i ima li nade ?


[ radoica @ 05.03.2007. 23:55 ] @
Par saveta:

http://www.elitesecurity.org/p1448738
[ boomLM @ 06.03.2007. 09:31 ] @
Ma probao sam sve sto si ti savetovao, ali i dalje je sporo... Nije neizdrzivo ali nije to to.
Nego da li moze da se na neki nacin refresuje samo deo pozadine Forme npr oko kontrole(da je na to prisilim).Da ne iscrtava celu Formu svaki put kada pomerim misa nego deo forme, ali da ne kacim jos neku kontrolu....?
Mozda zvuci glupo ali vise ne znam ni sam!!!
[ mmix @ 06.03.2007. 14:26 ] @
Ne postoji nacin da kontrolises paint requests, to radi windows na osnovu pomeranja ostalih kontrola u z-patternu i InvalidateXXX fukcija, tvoje je samo da odgovaras na te zahteve i iscrtavas. Brzina GDI+ zavisi od dva faktora:

1. Da li kontrola moze da isrta samo deo sebe ili mora da izrenderuje ceo svoj canvas. npr, bitmape bi mogle, labele ne bi (moraju da izrenederuju ceo svoj sadrzaj)
2. Da li je ukljucena hardverska akceleracija na kartici (ovo najvise utice na paint kroz bitblt, npr bitmape i slicno)

Nazalost, brush-ovi koji zahtevaju rendering i ciji sadrzaj ne moze da se baferuje ne mogu dobiti nikakav znacajan boost od hardvera. U principu windows se trudi da baferuje i koristi bitblt kad god je moguce i to uglavnom za funkcije koje on pruza (npr kad pomeras ceo prozor), ali windows ne moze da pogadja sta se desava unutar tvoje aplikacije, jedini nacin komunikacije je preko WM_PAINT poruka.

[ mmix @ 06.03.2007. 14:39 ] @
Dobar prirucnik za optimizaciju GDI+ je:

Programming Windows with C# (Core Reference) od Charles Petzold
(Microsoft press)

Iako je knjiga malo bajata (2001 ;)), ima dosta dobrih stvari o integraciji C# i Windowsa (ukljucujuci GDI+)



[ radoica @ 06.03.2007. 14:48 ] @
Sa Invalidate(Rectangle) mozes samo jedan deo forme da osvezis.
Pogledaj Invalidate metod, postoji vise parametara koje prima, mozda ti neki drugi bude vise odgovarao.
[ boomLM @ 06.03.2007. 17:18 ] @
tnx
[ Vreljanski Milan @ 07.03.2007. 08:51 ] @
E jeste ovo ja bash smor, pogotovo ako si dan i noc nad aplikacijom i onda vidis kad se iscrtava.

meni se javlja problem kod Skinova, jer sam ubacio da mi skin menja izgled aplikacije i onda je jos zahtevnije kod paint i slicno. Ima nacina da se ovo ubrza, ali kad dodje do samog iscrtavanja, onda kolko sam skontao nista tu ne moze da se promeni :-(.

pogotovo ako su u pitanju promene pozicije kontrole prilikom menjanja velicine prozora ili nekih drugih events.

za utehu, jako mali broj korisnika obraca paznju na ove stvari.
[ boomLM @ 07.03.2007. 10:35 ] @
Dok se nesto novo ne pojavi ostaje nam GDI
[ Vreljanski Milan @ 09.03.2007. 11:41 ] @
e nisam nista ozbiljno jos radio u 2005 mozda su tu nesto sredili malo?

a mozda treba neka gadna graficka...

mada sam razmisljao kako bi bilo da ubacim sva ta iscrtavanja formulara u direct 3d :-D mislim da bi pomoglo :-D

[ negyxo @ 09.03.2007. 12:14 ] @
Citat:
boomLM: Dok se nesto novo ne pojavi ostaje nam GDI


Nesto se vec odavno pojavilo a to je WPF. Moj neki subjektivan osecaj je da se daleko bolje kontrole iscrtavaju (kada ih je vise nema tolikog seckanja).
[ mmix @ 09.03.2007. 13:41 ] @
Citat:
negyxo: Nesto se vec odavno pojavilo a to je WPF. Moj neki subjektivan osecaj je da se daleko bolje kontrole iscrtavaju (kada ih je vise nema tolikog seckanja).


To je zato sto si u pravu . WPF ne koristi GDI+, ima svoj rendering queue i baziran je na DirectX engine-u u pozadini, dosta je brzi. Koga interesuje moze da pogledaj ovaj clanak, ima dosta zanimljivih podataka (cak i oko samog GDI-a)

Windows Presentation Foundation Graphics Rendering Overview
[ negyxo @ 09.03.2007. 14:15 ] @
Sta kazes na ovo http://blogs.msdn.com/greg_sch...archive/2006/05/02/588934.aspx
Ja sam se iznenadio, to znaci da ce GDI sporije da radi pod Vistom nego WPF i ostale DirectX aplikacije.
Inace, moji prvi utisci dok se jos nije pojavio zvanicni .NET 3.0, o WPF-u su bili, 'nista narocito' zato sto sam gledao iz VS WPF kapabilities Onda sam naleto na par zanimlnjivih clanaka i skinuo Expression Blend, posle rada u Belnd-u, blago receno, odusevio sam se. Jedva cekam da ostavim iza sebe WinForms.
[ mmix @ 09.03.2007. 15:09 ] @
Citat:
negyxo: Sta kazes na ovo http://blogs.msdn.com/greg_sch...archive/2006/05/02/588934.aspx
Ja sam se iznenadio, to znaci da ce GDI sporije da radi pod Vistom nego WPF i ostale DirectX aplikacije.
Inace, moji prvi utisci dok se jos nije pojavio zvanicni .NET 3.0, o WPF-u su bili, 'nista narocito' zato sto sam gledao iz VS WPF kapabilities Onda sam naleto na par zanimlnjivih clanaka i skinuo Expression Blend, posle rada u Belnd-u, blago receno, odusevio sam se. Jedva cekam da ostavim iza sebe WinForms.


To je bio problem sa svima, ukljucujuci i mene. Medjutim WPF ce zaista biti bolji od GDI+ formi i radice brze, pride, ako stvarno stvar doteraju do kraja kao sto kazu, konacno cu moci da uradjenu funkcionalnu xaml formu dam dizajneru na sminkanje bez bojazni da ce mi upropastiti kod i obratno. Samo to ce biti dovoljan podstrek za WPF