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

D3d9 BeginScene, EndScene i Present

[es] :: 3D programiranje :: D3d9 BeginScene, EndScene i Present

[ Pregleda: 2169 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

eva01

Član broj: 49540
Poruke: 120
*.ptt.yu.

Jabber: eva01@jabber.3gnt.org


Profil

icon D3d9 BeginScene, EndScene i Present20.12.2005. u 19:06 - pre 223 meseci
Ovo me odavno muči:

1.
Recimo ako moj program može da postigne 200fps, ali ja prilikom kreiranja device-a zatražim sinhronizaciju sa Vertical Retrace-om. Gde se moja aplikacija blokira, tj. gde čeka na Vertical Retrace? Da li u Present-u? Da li se uopšte blokira ili se prosledi kontrola nekim drugim procesima?

2.
BeginScene i EndScene ograničavaju "prostor" u kome mogu da rendam objekte. Ipak recimo da više modula koda crtaju nešto po ekranu, da li da svaki od njih ograničavam posebno sa BeginScene i EndScene ili da maltene celu glavnu petlju podvučem pod jedan par ovih funkcija? Naravno radi oboje, ali me ovo ograničavanje totalno zbunjuje jer mi samim postojanjem sugeriše da bih trebao izolovati sav rendering unutar jednog poziva, a svo procesiranje podataka (ono što nema veze sa d3d-om) vani.

3.
Komande ka d3d-u se baferuju, ali šta je sa pozivom Present? Pretpostavljam da se program blokira dok se ekran ne iscrta. Ukoliko imam double buffering površi ekrana, da li to znači da će Present zaustaviti program sve dok d3d ne obradi sve komande koje se nalaze u njegovim baferima? Ako je tako, onda pretpostavljam, da bi bilo dobro da prvo pošaljem sve batch-ove na render, zatim obavim sve cpu zahtevne operaije, i na kraju pozovem Present.
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.microsoft.com.



+18 Profil

icon Re: D3d9 BeginScene, EndScene i Present20.12.2005. u 22:49 - pre 223 meseci
1) Blokiranje se desava u Presentu. Vista (tacnije LDDM) to radi bolje od XPa, tako da u Visti vise procesorskog vremena ostaje za druge threadove kada se glavni thread blokira u presentu.

2) BeginScene i EndScene treba pozivati otprilike jedanput po frejmu. Pozovi EndScene neposredno pre Presenta, a BeginScene posle, i sve ce biti ok. :)
U stvari, drajveri su dosli do tacke gde im Begin/EndScene stvarno i ne trebaju mnogo, tako da pravila vise nisu toliko stroga kao sto su nekada bila.

3) Imas nekoliko teorija o tome kako treba raditi game loop. U principu da, ako uradis to sto si napisao dobices dobre performanse, ali takodje razmisli i o vise threadova (samo jedan treba da prica sa deviceom) - uveliko smo usli u eru multicore procesora.
 
Odgovor na temu

[es] :: 3D programiranje :: D3d9 BeginScene, EndScene i Present

[ Pregleda: 2169 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

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