[ Dark Icarus @ 22.12.2004. 17:32 ] @
Možda je blago off-topic, ali dogovorili smo se da je ovo nezvaničan forum za programere igara, so.... Ovo pitanje je upućeno svima koji su radili sa fontovima u DirectDrawu i Direct3Du.

Koristim DX7 tako da zaboravite D3DXFont i slično. Ne treba mi toliko mnogo - kontrola nad bold-om, bojom, veličinom i vertikalnim i horizontalnim alignment-om fonta u trenutku kada ga iscrtavam na površinu putem DirectDrawSurface7.DrawText.

Video sam da postoji zgodna procedura DirectDrawSurface7.SetFont(IFont) , čime ću sigurno rešiti problem sa veličinom, boldom itd., ali ne mogu nikako da nateram DX7 da radi sa alignmentom preko IFonta, a to mi je ključno u celoj priči.

Dakle, pitanje: Da li mogu da iskoristim IFont da kontrolišem vertikalni i horizontalni alignment ispisane reči?
Ako ne, da li mogu ikako da izračunam rect u kojem će se font prikazati (možda tome služi onaj opskurni GetFontMetrics?), jer ako bih to uspeo lako bih simulirao alignment tako što bih promenio X i Y teksta.

Alternativa kojoj već polako naginjem je da tekst u svojoj igri predstavljam korišćenjem teksture koja sadrži slike svih slova i znakova. Koristio bih DirectDraw7 da blitujem slovo po slovo na backbuffer. Pa me interesuje da li je neko već radio tako nešto i da li je isplativo uraditi to (sa stanovišta brzine izvršenja programa i vremena koje će mi trebati da nacrtam font i ispeglam sve bitne procedure).

I na kraju, oduvek me je interesovalo kako Windows uopšte radi sa vektorskim fontovima. Ako pozovem proceduru DirectDrawSurface7.DrawText da li DD poziva windows procedure za prikaz teksta ili se koristi GPU? Koliko su ove windows procedure brze? Najbitnija mi je u stvari informacija da li je metod lepljenja slova sa teksture brži od prepuštanja windowsu da računa prikazivanje vektorskih fontova?

Pošto sam primetio da mnoge igre, i to visokobudžetne, koriste svoje sopstvene procedure za ispis teksta, pretpostavljam da postoji razlog što se to tako radi u gamedev industriji (npr. možda je bitmap blit 100x brži od windowsovih procedura a ja to ne znam).
[ SashaM @ 22.12.2004. 22:49 ] @
Nisam mnogo radio sa fontovima tako da ti ne mogu reci suvise detalja, ali ono sto znam je da imas Windowsove funkcije DrawText i DrawTextEx pomocu kojih ispisujes tekst na surface (surcafe->getdc,lock surface,drawtext,unlock...) medjutim sto se brzine tice ne znam sta da ti kazem.
Ja sam se opredelio za drugi izbor (vadjenje slike fonta iz teksture i prikazivanje na ekran) zato sto ne moras da brines da li korisnik ima dotican font na sistemu, i slova (tj. slike) mozes da ulepsavas i menjas po sopstvenom ukusu (i ubacis nasa slova ako zelis).
Toliko od mene, nadam se da sam ti bar malo pomogao.

Sasa
[ Dark Icarus @ 23.12.2004. 15:36 ] @
Kako da nisi :) Ali onda da te čujem kako si to izveo. Da li u svakom render passu prikazuješ slovo po slovo na ekran, ili (prva optimizacija koja mi pada na pamet) kada kreiraš tekstualni "string" na ekranu složiš slova u novu privremenu teksturu koju onda crtaš u celosti?

Pošto se baviš D3Dom i DDrawom, da li možeš da mi kažeš, po tvom iskustvu: da li je mnogo sporije blitovati gomilu malih slika nego ih agregirati u jednu veliku sliku pa ih onda blitovati? Konkretno baš za ovaj primer:

Da li bi mi ubrzalo da "slepim" željena slova u teksturu pri kreaciji stringa, tako da u jednom prolazu treba da blitujem celu rečenicu odjednom (tekstura rečenice, npr. 512x128)? Ili da izvršim 120 blitova pojedinačnih slova 16x16 u svakom prolazu? Čisto da znam da se ne slamam oko optimizacije ako bih postigao minimalnu ili nikakvu brzinsku dobit...
[ SashaM @ 24.12.2004. 23:42 ] @
Ne znam sta da ti kazem. Ja sam blitovao gomile malih slika i do sada FPS nije opao ni za jedan. S obzirom da radim logicku igru gde brzina nije kljucan faktor ovako mi sasvim odgovara... Ti probaj i jedno i drugo ako hoces da proveris mada mislim da nema neke bitnije razlike (mozda jedino kada je ceo ekran prekriven tekstom).

Sasa
[ Dark Icarus @ 26.12.2004. 16:21 ] @
Evo, radi se... hvala na savetima! Uostalom, kada uradim procedure napraviću mali benchmark pa ću ovde da okačim komparativne rezultate.
[ Dark Icarus @ 29.12.2004. 17:13 ] @
Evo ima već dva dana kako sam rešio problem... do prekjuče, o blama, nisam znao za Form.TextWidth i Form.TextHeight funkcije (gee, baš vam hvala što ste mi rekli za njih, momci... kidding of course ).

Anyways, koga interesuje, da zatvorimo temu: zaključno sa implementacijom ove dve funkcije rešio sam sve moguće probleme sa manipulacijom True Type fontovima u DirectDraw-u... pa ako je iko zainteresovan mogao bih ovde da okačim ceo DirectDraw engine. Doduše u VBu. Pre mi je za ovaj forum nego za VB&ASP ...
[ Vranac @ 29.12.2004. 17:32 ] @
Ajde molim te okaci fajl il mi posalji na mail, interesuje me
[ Dark Icarus @ 29.12.2004. 20:31 ] @
Evo kompletnog engine-a u jednom modulu, na žalost relativno je kozavistan od nekih eksternih procedura koje su razasute po drugim standardnim modulima koje koristim uz projekte, ali to ne bi trebalo da bude problem.

Inače planiram da pustim "u opticaj" sve elemente engina (DirectDraw, DirectInput, DirectSound itd) kada ih budem ispolirao i učinio manje hardkodiranim... onda ću napraviti i prateći modul koji će sadržati sve eksterne procedure koje ovi moduli pozivaju.

Aj' pa uzdravlje... Pitaj ako te nešto interesuje...
[ Vranac @ 29.12.2004. 20:53 ] @
Hvala na file-u.
Pogledacu ovih dana cim uhvatim vremena

Beavis: "I am the great Cornholio..... There's a teepee in my bunghole ....."

Nisam mogao da odolim da ne nakucam