.[ ČeskéHry.cz ].
Blikani aplikaci

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Fundin



Založen: 19. 08. 2007
Příspěvky: 51
Bydliště: Praha

PříspěvekZaslal: 16. září 2008, 17:00:26    Předmět: Blikani aplikaci Odpovědět s citátem

Mam takovej malej problem...a to ze mi pri rendrovani blikaj ostatni aplikace a menu, ale nejsem schopnej si s tim poradit. Rendruju pomoci PeekMessage() ale to nevim jestli je tak dulezity, takze kdyby jste nekdo mel nejakou radu tak budu moc vdecnej:)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 16. září 2008, 17:11:56    Předmět: Odpovědět s citátem

Můžeš to blíkání nějak podrobněji specifikovat?
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 16. září 2008, 19:34:05    Předmět: Odpovědět s citátem

Jelikož jsi pořádně nepopsal tvůj problém, mohu jen spekulovat, ale dělo se mi něco podobného a to když jsem jako vykreslovací plátno nastavil hlavní formulář a na formuláři jsem měl nějaké menu. Poté docházelo k blikání. Možná je to zcestný, pokud ano tak to ignoruj Smile

Měl by jsi mít plátno pro vykreslení staovené na nějaký samostatný prvek, form nebo panel, pokud budeš používat jakékoliv menu a komponenty, musíš si ošetřit jejich refresh a i tak to nevypadá nic moc, ale alespoň to nebliká.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 16. září 2008, 20:11:37    Předmět: Odpovědět s citátem

Blikání ostatních oken se mi někde děje v systému např. při refreshi mmc konzole když probíhá nějaká zátěž (typicky db skript vytěžuje jedno jádro CPU), přičítám to ale 2 monitorům a desktop sidebaru (ten si zase problikává u některých fullscreen her). Možná dochází k invalidate regionů a už se kvůli vytížení nestíhá překreslovat, kdo ví
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Fundin



Založen: 19. 08. 2007
Příspěvky: 51
Bydliště: Praha

PříspěvekZaslal: 16. září 2008, 20:35:28    Předmět: Odpovědět s citátem

Dobre, nasledujici problem se mi objevil na WinXP, MDX, a C#...vykresluju do Panelu, kterej je umistinej na formulari na kterym je Menu a kdyz vyberu nejakou polozku toho menu, tak se zacne trhat zobraovani. A to "blikani" se neprojevuje u vsech aplikaci. A vetsinou to je treba u polopruhlednejch oken a nebo u ToolTipu a podobnejch poli. Jinak vykresluju pomoci tohodle kodu:

kód:
        private void OnApplicationIdleEvent(object sender, EventArgs e)
        {
            while (AppStillIdle())
            {
                Render();
            }
        }
        private bool AppStillIdle()
        {
            ExternDll.Message msg;
            return !ExternDll.PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
        }
       
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 16. září 2008, 20:43:55    Předmět: Odpovědět s citátem

Fundin napsal:
Dobre, nasledujici problem se mi objevil na WinXP, MDX, a C#...vykresluju do Panelu, kterej je umistinej na formulari na kterym je Menu a kdyz vyberu nejakou polozku toho menu, tak se zacne trhat zobraovani. A to "blikani" se neprojevuje u vsech aplikaci. A vetsinou to je treba u polopruhlednejch oken a nebo u ToolTipu a podobnejch poli. Jinak vykresluju pomoci tohodle kodu:

kód:
        private void OnApplicationIdleEvent(object sender, EventArgs e)
        {
            while (AppStillIdle())
            {
                Render();
            }
        }
        private bool AppStillIdle()
        {
            ExternDll.Message msg;
            return !ExternDll.PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
        }
       


Předpokládal bych že vykrelsuješ nekonečnou smyčkou a pouze ošetřuješ WinApi. Já jsem to vyřešil když jsem chtěl používat menu, zastavil jsem vykreslování. Ale pokud potřeuješ vykreslovat neustále, pokus se nějak lépe ošetřit refresh ostatních komponent, třeba každý frame..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Khaj



Založen: 16. 01. 2008
Příspěvky: 49

PříspěvekZaslal: 17. září 2008, 07:11:43    Předmět: Reseni Odpovědět s citátem

Jediny reseni je presunout vsechny ne-panelovy komponenty z panelu, na kterej se kresli (a to na jiny panely).

Kresleni vsech komponent pri kazdym framu nepomuze, ale jen to zhorsi.

Tenhle problem nastava napr. i u Win Media Playeru minimalizovanyho na liste, ukazujiciho v okynku prave hranou skladbu, kdyz vyskoci nad DirectXovou aplikaci.

Arrow Proste Win kresleni nestiha DX kresleni, opozduje se a proto to blika. Exclamation

Idea Pokud chces mit zakomponovany menu do renderovaciho pohledu na scenu, musis ho kreslit taky DX nebo musi bejt na vlastnim panelu (... konkretne na necem zdedenym od TWinControl pokud delas v Borlandech jako ja ... a ten muze mit klidne jako rodice onen kreslici panel, to uz je jedno).

Ja osobne mam vzdycky menu a pohled do hry striktne oddeleny (mozna casem zacnu delat DX-kresleny prvky, ale na to je casu dost).

EDIT: Pokud si to myslel tak, ze blikani neni problem tvy aplikace, ale jinejch co lezou prez ni, jako u toho Win MP, tak to nevyresis (pokud nehodlas udelat nakou kontrolu a automaticky zavirat vsechny wokna co se opovazi vyskocit nad tvoje okno Very Happy).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Fundin



Založen: 19. 08. 2007
Příspěvky: 51
Bydliště: Praha

PříspěvekZaslal: 17. září 2008, 19:03:41    Předmět: Odpovědět s citátem

To jste me asi spatne pochopily v panelu do ktereho se vykresluje neni zadne menu. Ale asi to bude fakt jak rikal Khaj ze to proste jen nestiha, jinak pro to nemam jiny vysvetleni:(

EDIT: Ale je to divny, protoze ikdyz vykresluju tri cary, tak to porad blika a to asi tolik nebere vykon.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Fundin



Založen: 19. 08. 2007
Příspěvky: 51
Bydliště: Praha

PříspěvekZaslal: 18. září 2008, 16:13:02    Předmět: Odpovědět s citátem

VYRESENO: bylo to tim ze jsem na ten panel musel v iniciaci zarizeni odkazat na Handle a ne primo na Panel:)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna