.[ ČeskéHry.cz ].
LPDIRECT3DDEVICE - kam s nim ? Singleton ? Referencia ?
Jdi na stránku 1, 2  Další
 
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
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 11. listopad 2007, 09:49:29    Předmět: LPDIRECT3DDEVICE - kam s nim ? Singleton ? Referencia ? Odpovědět s citátem

V predoslej diskusii o designe 3D enginu bol jeden zaujimavy link na nazor o singletonoch. Padla tam aj zmienka o tom, ze casto pouzivane parametre by mohli byt referencovane v triedach.

Dotycnemu to prislo ako "ciste", ze to vsade vchadza ako parameter, co je ale vrcholne nepohodlne.
Na druhej strane, je podla mna absurdne, aby kazda trieda mala vlastnu referenciu na LPDIRECT3DDEVICE - to by bol uz bordel, aby to clovek ustrazil pri stovkach tried, ze kde to je a kde este nie je zinicializovane.

Tu mi pride globalna premenna ako najpraktickejsie riesenie.
Ja to tak sice nepouzivam, lebo to pcham do kazdej funkcie ako parameter, ale pri buducom refactore by som to uz rad zriesil nejako pohodlnejsie a cistejsie.

Nejake napady ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mnemonic



Založen: 28. 07. 2007
Příspěvky: 93

PříspěvekZaslal: 11. listopad 2007, 10:24:49    Předmět: Odpovědět s citátem

Posilat vsude LPDIRECT3DDEVICE mi taky prijde absurdni. Ale posilat vsude nejaky "globalni manager", tedy objekt, ktereho se doptas na ruzne sdilene odkazy (treba vcetne toho D3D device, ale to by mela byt spis vlastnost rendereru), to uz mi tak absurdni neprijde, protoze to presne tak delam Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 11. listopad 2007, 10:31:41    Předmět: Odpovědět s citátem

Ale to je vlastne to iste, ked budes posielat nejaky iny objekt, z hladiska pohodlnosti (furt musis daco pisat do vstupnych parametrov a ked v nejakej funkcii vnorenej do 4 urovne zistis, ze to potrebujes, tak zrazu musis zasvinit vsetky hlavicky 3 urovne vyssie), i ked je to aspon o to cistejsie, ze tam uz mas viacej objektov.

Singleton by mal tu vyhodu, ze ho vidi kazda trieda a nikde nemusi vstupovat ako parameter. Ale to by uz bol vlastne globalnou premennou, cize by to bola len kamuflaz Smile

Cize, pre pohodlnost globalna premenna, ale co pre cistotu designu (mne to neprijde osobne designove ciste, to pchat ako parameter vsade) ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 11. listopad 2007, 11:04:21    Předmět: Odpovědět s citátem

posilani referenci je nepohodlne, ale IMHO prave objektove ciste.

podle me ve spravnem objektovem navrhu bys mel vystacit s prave 0 globalnimi promennymi/objekty (resp. singleton - bo to je jenom schovani globalni promenne za jeji inicializaci)

s tim ze si posilas primo LP...DEVICE je to podle me spatne - protoze pak opravdu vsude musis kontrolovat jestli uz je nastaveny nebo ne - tu je cistejsi to delat jak to ma Mnemonic - zaobalujici trida, ktera ti tu referenci/pointer preda - vyhoda je v tom ze ten "test" jestli uz je device ready mas potom na jednom miste.

obecne ale pokud vim ze v aplikaci je treba prave jeden objekt daneho druhu (tedy treba ten Engine nebo device) - tak bych se spis priklonil k pouziti singletonu - nebude to uplne objektove ciste, ale bude to zase kodove cistejsi.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 11. listopad 2007, 11:07:31    Předmět: Odpovědět s citátem

Podle mě se člověk musí zamyslet, jaké mu může přinést problémy, když to bude mít v globální proměnné/singletonu. Designovou čistotu bych sem v tomhle případě netahal, protože se jedná o jeden specifický případ.

Jediný problém, který mě napadá je, jak už jsem asi třikrát psal, kdybys chtěl mít více instancí toho device a potom rozlišovat, které třídy budou používat kterou instanci.

Další možné řešení, které mě teď napadlo je v The Nebula Device (nebo alespoň něco podobného). Tam mají strom objektů a v tomto případě by mohl být ten direct3D device kořenem takového stromu (a každý objekt ve stromu se umí dostat na jeho kořen). Pak by v případě potřeby více dx devices bylo možné mít více stromů, přičemž v daném stromě by byly objekty závislé na jeho kořeni.

Samozřejmě vícenásobný dx device je docela diskutabilní záležitost.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 11. listopad 2007, 14:31:24    Předmět: Odpovědět s citátem

no v predchazdjucom threade MD nieco hovoril ze sa musel zbavit singletonov aby mohol spustit dve runtime naraz. to znamena ze singleton je spolocny aj pre dve instancie spusteneho prgramu? to snad nie.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 11. listopad 2007, 14:35:04    Předmět: Odpovědět s citátem

Zřejmě chtěl spustit dvě runtime v jednom procesu.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
MD



Založen: 29. 07. 2007
Příspěvky: 437
Bydliště: Praha

PříspěvekZaslal: 11. listopad 2007, 15:04:15    Předmět: Odpovědět s citátem

Ja pouzivam asi mix uplne vseho: Pokud je neco, u ceho si sem jistej, ze je naprosto nelogicke to mit 2krat, tak mam singleton, obcas predavam objekty v parametrech, ale asi nejvice pouzivam tu stromovou hierarchii. Priklad: objekt Expression se postupne dokaze dostat ke vsem svym rodicum: Statement, MethodAnalysys a Compilation (pozn. Nejsou to predci ve smyslu objektovho dedeni Wink ) a z nich pak ma pristupne uplne vse. Protoze tam mivam pomerne velkou hloubku rekurze, tak radeji, nez abych pro dany blok kroku predaval parametry, tak si vytvorim specializovanou tridu, ktera parametry prevezme a sama to udela. Taky se daji parametry sdruzovat ve tride (strukture) a pak je predavat nebo vracet v jednom "baliku".

2nou: jj je to v jednom procesu. Predstav si ze mas napriklad editor levlu (ktery uz sam o sobe vyuziva runtime (nebo engine, chces-li)), neco tam pridas a chces to vyzkouset aniz bys editor ukoncoval (-> novy runtime). Podobne je to s vyvojovym prostredim, kde si pises skriptiky a muzes je spoustet a ladit (take paralelne). Puvodne jsem mel "Runtime" jako singleton, takze jsem pak predelaval asi milion odkazu ... Wink
_________________
- play with objects - www.krkal.org -
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 11. listopad 2007, 16:56:13    Předmět: Odpovědět s citátem

rezna napsal:
posilani referenci je nepohodlne, ale IMHO prave objektove ciste.
To je prave ta ironia. je to sice ciste, ale nepohodlne Confused

rezna napsal:
s tim ze si posilas primo LP...DEVICE je to podle me spatne - protoze pak opravdu vsude musis kontrolovat jestli uz je nastaveny nebo ne
Question Nechapem, preco by som to mal vsade kontrolovat. To staci len raz pri inicializacii gfx modu (Alt-Tab neratam - to je separe problem). Potom uz to nepotrebujes testovat, ci je to inicializovane nikdy pocas behu enginu.


rezna napsal:
tu je cistejsi to delat jak to ma Mnemonic - zaobalujici trida, ktera ti tu referenci/pointer preda - vyhoda je v tom ze ten "test" jestli uz je device ready mas potom na jednom miste.
Vyhodu vidim skor v tom, ze tam mozes predat viacero polo-globalnych instancii, pekne zapuzdrenych v 1 triede.

rezna napsal:
obecne ale pokud vim ze v aplikaci je treba prave jeden objekt daneho druhu (tedy treba ten Engine nebo device) - tak bych se spis priklonil k pouziti singletonu - nebude to uplne objektove ciste, ale bude to zase kodove cistejsi.
Bude to aj prehladnejsie, co rozhodne nie je na skodu.
Ja ked teraz prezeram hlavickove subory a v kazdej tretej funkcii vidim LPDIRECT3DDEVICE m_pd3dDevice, tak to hodne rusi a dosial som si na to za tie roky nezvykol - odvadza to totiz pozornost, kedze je to tak dlhy zhluk pismen, preto s tym chcem nieco urobit.

Asi tam radsej hodim singleton, nech je to prehladnejsie - cisty design je pekna vec, ale urcite nie za cenu znizenej orientacie.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 11. listopad 2007, 17:05:39    Předmět: Odpovědět s citátem

Quiark : Fakt by ma zaujimalo prakticke vyuzite viacerych devices. Ake to vlastne su ?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 11. listopad 2007, 17:14:39    Předmět: Odpovědět s citátem

VladR:
kód:
#define PD3D LPDIRECT3DDEVICE

to preci jisti ne? Wink
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VladR



Založen: 30. 07. 2007
Příspěvky: 1322
Bydliště: Greater New York City Area

PříspěvekZaslal: 11. listopad 2007, 17:27:11    Předmět: Odpovědět s citátem

Idea
VladR - running in circles spreading unarticulated screams...
Evil or Very Mad
....

5 minutes later....

To mam za to, ze som takym zaprisahlym odporcom makier...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mnemonic



Založen: 28. 07. 2007
Příspěvky: 93

PříspěvekZaslal: 11. listopad 2007, 17:27:33    Předmět: Odpovědět s citátem

Nevim, jak dalece je to "objektove ciste", ale mam tridu Game, jejiz instanci predavam vetsine hernich objektu uz v kontruktoru (tedy vsem autonomnim objektum typu Actor, ne pidiobjektum jako Point), a ty si na ni pak drzi odkaz. A pres Game se jsem schopen odkudkoliv dostat na Renderer, TextureManager, SoundManager, ScriptManager atd. Duvod je prave ten zmineny, ze potrebuji mit v jedne aplikaci vic Game objektu (editor = vic dokumentu). Za ty roky se mi to dobre osvedcilo, a ani me moc neotravuje, ze kazdy konstruktor musi mit jako prvni parametr odkaz na Game.
Ciste akademicky objektove vzato, asi neni uplne idealni, ze si kdejaky objekt muze sahat na kterykoliv herni manazer, ale v praxi je to pohodlne a efektivni.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 11. listopad 2007, 17:28:54    Předmět: Odpovědět s citátem

VladR: To byl jen hypotetický námět na zamyšlení. V praxi se to asi nevyskytuje.
_________________
Mám strach
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
goddard



Založen: 06. 11. 2007
Příspěvky: 175
Bydliště: Brno

PříspěvekZaslal: 11. listopad 2007, 17:44:43    Předmět: Odpovědět s citátem

je asi lepsi udelat jedinacka ktery bude vracet odkaz na device, a ty odkazy pak pouzivat tam kde je potreba.
globalni promenna neni dobry napad, protoze jediny zpusob jak si ohlidat zda jsem nekde neumyslne nezmenil objekt reprezentujici device je cpat nejaky test vsude mozne. coz zvysuje nekolikrat nachylnost k chybe a zhorsuje to udrzovatelnost kodu.
jeste by snad slo udelat konstantni odkaz ktery ukazuje jen na dany device a ten pak pouzivat vsude. jenze to zase nezajisti ze si nevyrobim nekde jiny odkaz na device. proste je lepsi kodovat defenzivne a pouzit jedinacka.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
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
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
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