• Nie Znaleziono Wyników

Wykorzystanie spe y zny h jednostek w pro esora h

//... };

lass OGLRenderContext : publi IRenderContext {

//... };

lass SoftRenderContext : publi IRenderContext {

//... };

Listing4.4-9-Klasyrendererasoftware'owego

Kontekstrenderuj¡ ynale»ydourz¡dzeniagra znegoijestznim bezpo-±redniozwi¡zany.Jestontak»eprzeztakieurz¡dzenietworzony. Implementa- je wirtualny h urz¡dze« powinny ini jalizowa¢odpowiedni¡ bibliotekoraz stworzy¢odpowiedni kontekstrenderuj¡ y.

4.5 Wykorzystanie spe y zny h jednostek w pro esora h

Bardzowa»nymzagadnieniem jest wykorzystanie spe jalisty zny hukªadów jednostki entralnej.Je»elisprztwyposa»onyjestwdodatkoweukªadyi na-rzdziaterozwi¡zuj¡jakie±zagadnienia,trzebatowykorzysta¢,gdy» rozwi¡-zywaniei hbezudziaªuty hukªadówjestmarnotrawstwemwdwojakisposób. Po pierwsze, dedykowane ukªady do spe y zny h zada« s¡ zawsze szybsze ni»jednostka entralnawykorzystanawtakim elu.Podrugie,gdynie wyko-rzystujemydedykowanegoukªadu,jednostkagªównajestbardziejob i¡»ona. Bardzowielewspóª zesny hplatformwyposa»ony hjestwukªadydo ob-li ze«ma ierzowy h.Jestto spowodowanetym,»e wprzypadkugier trójwy-miarowy hogromnawikszo±¢obli ze«doty zyopera jinama ierza hi wek-tora h,któreokre±laj¡wzgldnepoªo»enieobiektówtrójwymiarowy h.Z dru-giej strony na rynku i¡gle istniej¡ platformy, na który h wszelkie opera je

Stworzenie szybkiej i uniwersalnej midzyplatformowej biblioteki mate-maty znejnie jesttrywialnepomimotego,»ewikszo±¢platform udostpnia API dotaki hopera ji.Zjednej stronyu»y ie opera ji na ma ierza h, wek-tora h zy kwaterniona hmusi by¢bardzo ªatwe i intui yjne, z drugiej za±, bibliotekatakamusi by¢maksymalnie wydajna i widealnym przypadkunie powinnagenerowa¢»adnegonarzutu.Obate ele jestdo±¢trudno pogodzi¢. Rozpatrzmyproblemnaprzykªadzieprostejklasywektora.Wektorskªadasi z 3pól:

x, y, z

oraz metod do standardowy h opera ji na wektora h, taki h jak:dodawanie,odejmowanie,mno»enieskalarneorazwektorowe.Zewzgldu nawygod przydeklara jiklasmatematy zny hwartostosowa¢prze i¡»one operatorymatematy zne. lass Ve tor3f { publi : union { stru t { float x; float y; float z; }; float elements[VECTOR3F_ALIGMENT℄; }; publi :

inline Ve tor3f(float x,float y,float z); inline Ve tor3f( onst Ve tor3f& v3Other);

inline Ve tor3f operator+( onst Ve tor3f& v3Other); inline Ve tor3f operator-( onst Ve tor3f& v3Other); inline float operator*( onst Ve tor3f& v3Other); inline Ve tor3f operator^( onst Ve tor3f& v3Other); inline Ve tor3f& operator=( onst Ve tor3f& v3Other); };

Listing4.5-1-Klasawektora

Powy»szadeklara jawektora jestbardzo prostaiwygodnawu»y iu. Na przykªaddodawaniewektorówjestintui yjne:

Ve tor3f a(10.0f,10.0f); Ve tor3f b(-15.0f,10.0f); Ve tor3f = a + b;

Takzadeklarowanywektormafunk jonalnyinterfejs,wi jegou»y ienie powinnosprawia¢problemów.Niestety,przytakiejdeklara jido±¢trudnojest uniezale»ni¢implementa jodplatformy.Implementa jaopera jidodawania, odejmowania zymno»eniamo»eby¢innawzale»no± iodplatformy.Na pla-tformy nieposiadaj¡ e jednostki ma ierzowej metoda sªu»¡ a do dodawania mo»ewygl¡da¢nastpuj¡ o:

Ve tor3f Ve tor3f::operator+( onst Ve tor3f& v3Other) {

return Ve tor3f(x+v3Other.x,y+v3Othe r.y,z +v3O ther. z); }

Listing4.5-3-Operatordodawaniawektorówbezwykorzystaniajednostki ma ierzowej

Wprzypadku,gdysprztwyposa»onyjestwjednostkdoobli ze« wekto-rowy h,kodmetodydodaj¡ ejmo»ewygl¡da¢nastpuj¡ o(przykªadowykod wykorzystujebibliotekA elerateFramework rmyApple,którawzale»no± i oddostpnegopro esorawykorzystujerozkazyAltiVe lubSSE):

Ve tor3f Ve tor3f::operator+( onst Ve tor3f& v3Other) {

Ve tor3f v3Result;

vDSP_vadd( elements, 1, v3Other.elements, 1, v3Result.elements, 1, VECTOR3F_ALIGMENT ); return v3Result;

}

Listing4.5-4-Operatordodawaniawektorówzwykorzystaniemjednostki ma ierzowej

Jak wida¢ napowy»szym przykªadzie, deni je metod wektora s¡ ro»ne w zale»no± iod platformy.Obsªuga opera ji na wektora h przyu»y iu poli-morzmu jest niemo»liwaprzynajmniej zdwó h powodów. Po pierwsze, ty-poweopera jetakiejakdodawanie,odejmowanie zymno»enieskalarnejako wynikpowinnystworzy¢orazzwró i¢nowyobiekt wektora.Niemo»eto by¢ referen ja lub wska¹nik dointerfejsu bazowego. Jest to zwi¡zane z problem wªasno± iobiektu.Gdybyopera jezwra aªytylkoreferen jedoobiektu, mu-siaªybyprze howywa¢wynik. Rozwi¡zaniemtegoproblemu s¡metody które wynik zwra aj¡za pomo ¡ referen ji przekazanej jakoargument. Jednak s¡ one nieintui yjne i nie nadaj¡ si do stosowaniajakoprze i¡»one operatory arytmety zne.Podrugie,opera jematematy znes¡ do±¢krótkie,alezªo»one

tod optymaliza ji jest napisanie i h w posta i funk ji inline. W przypadku interfejsu oraz metod wirtualny h wywoªanie inline dziaªa tylko wsytua ji, gdy metoda wywoªana jest jawnie z konkretnego poziomu dziedzi zenia (za pomo ¡operatorazakresu).Dlategowywoªywaniemetodwirtualny hz wyko-rzystaniem polimorzmu jestwolniejsze.Projektuj¡ klasydo obsªugi mate-matyki,dziaªaj¡ e pod wieloma platformami,nale»y skorzysta¢zkompila ji warunkowej.Niejesttomo»etakelegan kierozwi¡zaniejakzastosowanie po-limorzmu, alewtymprzypadkukonie zne.

Nale»yzauwa»y¢,»ewprzypadkuwektoranawetdeni jaklasymo»eby¢ ró»nawsytua jiro»ny hplatform.Wjednostka hwektorowy hVMX, stoso-wany hwkonsola hdogier,wektordany hpowinienmie¢dªugo±¢128bitów, o odpowiada zterem 32 bitowym li zbom zmiennoprze inkowym (float). Dlategowdeklara ji klasy zastosowano uni, którawrazie potrzeby rozsze-rzyrozmiarwektorazapomo ¡makraVECTOR3F_ALIGMENT.

Zaªó»my,»e silnikbdzie domy±lnieli zyªopera jematematy znew spo-sóbstandardowyzapomo ¡jednostkigªównej.Je»elizostanieskompilowany z zdeniowanym makrem DIRECT_VMX_ENABLE,bdzie korzystaª z jednostki wektorowej VMX bezpo±rednio za pomo ¡ rozkazów Altive . Dla zdenio-wanego makra ACCELERATE_ENABLE skorzysta z biblioteki A elerate, która wprzypadkupro esoraPowerPCwyposa»onegowjednostkVMXskorzysta zrozkazówAltive ,awprzypadkupro esoraIntelskorzystazrozkazówSSE. Zewzgldunato,»emetodypowinnyby¢inlinei»edeklara jaklasyjest ró»na,wzale»no± iodwersji,sek jewarunkowemusz¡ju»znajdowa¢siw pli-kunagªówkowym.Wa»nejest,abykodwarunkowyniezdominowaªpliku nag-ªówkowego.Spowodowaªobytopogorszenie zytelno± itegopliku,apliki na-gªówkowes¡bardzopomo neprogramistom.

#ifndef_VECTOR3F_H #define_VECTOR3F_H #ifdef DIRECT_VMX_ENABLE #define VECTOR3F_ALIGMENT 4 #elif defined(ACCELERATE_ENABLE) #define VECTOR3F_ALIGMENT 4 #else #define VECTOR3F_ALIGMENT 3 #endif lass Ve tor3f { //.. };

#ifdef VMX_ENABLE #in lude "Ve tor3fVMX.inl" #elif defined(ACCELERATE_ENABLE) #in lude "Ve tor3fA elerate.inl" #else #in lude "Ve tor3f.inl" #endif #endif

Listing4.5-4-U»y iekompila ji warunkowejdlaklasywektora

Jakwida¢powy»ej,makroVECTOR3F_ALIGMENTjestró»newzale»no± iod wersji.Dlawersjidomy±lnej wektorskªadasiztrze hli zb zmiennoprze in-kowy h, zylizajmuje 12bajtów, dlawersji obsªuguj¡ ejjednostk wektoro-w¡wektorzajmuje 16bajtów.Nadoleplikunagªówkowegoznajdujesi sek- jawarunkowaodpowiedzialnazadoª¡ zenie odpowiedniegopliku zawieraj¡- egodeni jefunk jiinlinedlaspe y znejplatformy.Dlawersjiobsªuguj¡ ej VMXdoª¡ zonyjestplik zdeni jamifunk jikorzystaj¡ ymizbibliotekido obsªugijednostkiwektorowej,domy±lniedoª¡ zonyjestrównie»plikz deni -jami,wktóry hobli zeniawykonywalnes¡normalnie,korzystaj¡ zjednostki gªównej.

W analogi zny sposób mo»na o zywi± ie zaprojektowa¢ klasy ma ierzy, kwaternionówiinny h,wktóry hmo»na wykorzysta¢obli zeniawektorowe.

Powiązane dokumenty