Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 25. květen 2012, 09:57:52 Předmět: |
|
|
VladR napsal: |
Tak predovsetkym je to posrane v Linuxe (nie ze by ma to ale prekvapovalo).
Pod Winom som s lokalizaciou nemal nikdy vyraznejsi problem, ci uz WTF-8 alebo WTF-16. |
boze ty ale pletes jabka a hrusky - jedna vec je michani wchar_t a char a druha je vec je schopnej framework na lokalizace - treba v linuxu je mnohem lepe dostupnej gettext a hlavne v linuxu s neoperuje s pochybnym WCHAR (ktery je Unicode nikoliv UTF-16 - je to rozdil!) ale ciste s UTF-8 - alespon v zakladnim libc API |
|
Návrat nahoru |
|
 |
Aroidzap

Založen: 14. 11. 2011 Příspěvky: 68
|
Zaslal: 25. květen 2012, 15:43:04 Předmět: |
|
|
Tak muzu se jeste jednou zeptat? Jde mi tu o nacitatni xml dat, presneji collada, jde mi o rychlost a o to, aby se zbytecne nepouzivala pamet. chtel jsem pouzit char* z toho duvodu, ze si myslim, ze tam nejsou zadne zbytecnosti co by zrali pamet a zadne zbytecne skryte funkce, kdyz se s nima manipuluje. Pokud si myslite, ze pro nacitani collady neni char* dobry, poradite mi prosim neco lepsiho? diky  |
|
Návrat nahoru |
|
 |
if.then
Založen: 13. 04. 2008 Příspěvky: 579
|
Zaslal: 25. květen 2012, 16:15:24 Předmět: |
|
|
Na tvou otázku: char * použít můžeš, ale rozhodně bych to nedoporučoval. Jsi pak vázaný na ANSI C funkce k manipulaci s řetězci, které by dnes nikdo nepoužíval, protože nejsou ani bezpečné, ani příliš intuitivní. Svoje vlastní si taky můžeš napsat, ale bude to z louže do bláta, pokud neznáš ukazatele jako svoje boty.
To už je lepší std::string a z toho to rozházet do hiearchické struktury (Collada je v XML).
A pokud bych neměl odpovídat na tvou otázku? Collada je děs, příšerně obsáhlá a většinou neurčitá specifikace, každý nadává, když si píše vlastní importer.
Takže použij Assimp. Ušetří ti to mnoho nadávek. _________________ For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++. |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 25. květen 2012, 16:44:53 Předmět: |
|
|
Aroidzap> Pokud neprogramuješ něco hodně specifického (a pokud ano, tak bys to věděl), tak úspora daná použitím char* místo std::string nestojí za řeč a za práci navíc.
Jinak pokud potřebuješ parsovat XML, rozhodně použij nějakou existující knihovnu, XML je podstatně složitější formát než na první pohled vypadá a kdybys měl správně ošetřit všechny možnosti, tak u toho strávíš podobně času jako u zbytku hry. A pokud existuje kód pro parsování přímo Collady, tak nejlepší co můžeš udělat je použít přímo ten. _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 25. květen 2012, 19:26:27 Předmět: |
|
|
Na parsing XML doporučuju TinyXML.. rozhodně to nepsat ručně Na Colladu jsem si to napsal ručně pak s pomocí toho.. ale byla to k**** práce  _________________ Perry.cz |
|
Návrat nahoru |
|
 |
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 25. květen 2012, 19:35:29 Předmět: |
|
|
VladR napsal: |
Kedze uz tu riesime ten string a kopol som si do C++ kvoli C#, tak v ramci ferovosti to musim spravit aj naopak, lebo pod C# runtime jedna instancia stringu leakuje 4 KB ! Cize, v hre clovek si nemoze len tak jednoducho pouzit string (ale stringBuilder), lebo po par sekundach leakne 1 MB a uz sa pusta GarbageCollector. Z jedneho stringu...
|
Můžeš mi k tomu prosím dát konkrétnější info?
citace: |
tak tak - alespon neco ve smyslu "Muj ultimatni %1 text, kterej obsahuje %2 reference" - s timhle uz se da pracovat protoze nikdo mam nema problem napsat preklad typu "Hoi tong %2 tong hong honky tonky %1."
|
To mě nikdy nenapadlo, díky za radu, proč nekonkatenovat. |
|
Návrat nahoru |
|
 |
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 6. červen 2012, 17:11:03 Předmět: |
|
|
Pardon za bump, ale vidím, že VladR už je přítomen, tak upozorňuji na můj dotaz výše. |
|
Návrat nahoru |
|
 |
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 7. červen 2012, 00:11:05 Předmět: |
|
|
No, problem je, ze .NET kod v style "string A = B+C" je v hlavnej smycke neskutocne zverstvo. Pretoze, aj ked kodim pomaly 30 rokov, tak toto sa mi este fakt nestalo, ze by jeden sprosty string zral tolko RAMky. O tomto sa budem hadat kludne aj do krvi. Toto proste nemozes ocakavat !
To je ako keby si povedal, ze je normalne, ze int Num zozerie 4 KB...
Ja som vyrastal na strojovom kode 6502, takze ked vidim nieco take, tak sa mi proste obracia zaludok...
Na PC si to nevsimnes, lebo tam sa ti GC spusta na osobitnom jadre, takze ti to beh nespomaluje.
Ale z XBOXU si veeeelmi zretelne spominam, ako som cumel na vypis z toho debug toolu od MS jak puk, ze kolko RAMky vlastne leakuje jeden sprosty string. Co si spominam, tak to bolo 8 KB na 1 instanciu. Cize na vyssie uvedeny riadok zozeries 3*8=24 KB. Pri 60 framoch za sekundu to mas 24*60 = 1 MB+, takze sa ti kazdu sekundu (vzdy po prekroceni 1 MB) spusti Garbage Collector.
Co na XBOXe, prirodzene, vdaka GC implementacii v .CF znamena, ze ti hra kazdu sekundu na pol sekundy zadrhne.
Ked som vyssie uvedeny riadok vyremoval, tak samozrejme sekanie na XBOXe prestalo. Na PC ziadna zmena (logicky).
Takychto pruserov je pod .NET viacej. A nejde len o (Un)Boxing. Ked som naraz bindoval 3 vertex buffery na mesh, tak by ma tiez v zivote nenapadlo, ze to bude leakovat jak hovado. A ono leakovalo (workaround bol sice jednoduchy, ale WTF to bol teda riadny)
Implementacia CF ma proste svoje, nazvime to, specifika
Ak si chces byt isty, tak udajne musis skumat IL kod. Ale to je blbost ! to si mozem zacat kodit rovno v assembleri. Nejdem predsa do hi-level jazyka ako C# preto, aby som detailne skumal, ze co za paseku tam ten sprosty kompilator narobil. |
|
Návrat nahoru |
|
 |
OndraSej

Založen: 28. 07. 2007 Příspěvky: 767 Bydliště: Brandýs nad Labem
|
Zaslal: 7. červen 2012, 04:23:58 Předmět: |
|
|
VladR napsal: |
Ak si chces byt isty, tak udajne musis skumat IL kod. Ale to je blbost ! to si mozem zacat kodit rovno v assembleri. Nejdem predsa do hi-level jazyka ako C# preto, aby som detailne skumal, ze co za paseku tam ten sprosty kompilator narobil. |
U .NET nemusis zkoumat primo IL, existuji hodne dobre dekompilatory do C#/VB.NET (napr. Reflector); zdrojaky od nekterych nejmenovanych "programatoru" dokonce vypadaji lepe po dekompilovani
Jinak ten rozdil mezi desktopem a XBoxem je mozna i v tom, ze na XBoxu je .NET CF, ktery dost pravdepodobne ma i uplne jiny GC nez ta desktopova verze. Ze by XBox nemel dost vykonu (nebo dost procesoru) na to, aby spustil GC nekde mimo si nemyslim... _________________ http://trionteam.net |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 7. červen 2012, 08:13:15 Předmět: |
|
|
O tom VladR mluvil už dřív, že problém je v použítí .NET CF. XBox360 má samozřejmě dost výkonný CPU (3jádrový 3,2GHz PowerPC). _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 7. červen 2012, 14:59:47 Předmět: |
|
|
OndraSej napsal: |
Jinak ten rozdil mezi desktopem a XBoxem je mozna i v tom, ze na XBoxu je .NET CF, ktery dost pravdepodobne ma i uplne jiny GC nez ta desktopova verze. Ze by XBox nemel dost vykonu (nebo dost procesoru) na to, aby spustil GC nekde mimo si nemyslim... |
No ved to som pisal, ze je to kvoli Compact Framework.
To, ze ti hra zatuhne pri GC zatuhne aj na 2.5 sekundy (a pravidelne, ak leakujes vela) je priodzene problem implementacie GC. Aj ked su na X-ku 3 jadra, GC bezi len na tom, na ktorom bezi CF, cize aj XNA. Takze multithreading ti tu nepomoze absolutne, lebo ked fici GC, tak vsetko ostatne stoji...
Na WP7.5 , prirodzene, nebol problem zmenit implementaciu GC na mark-and-sweep, ale na X-ko sa MS zvysoka vysral... |
|
Návrat nahoru |
|
 |
|