Plovoucí desetinnou čárkou nebo pevný bod pro OpenGL aplikace Android NDK?

hlasů
8

Snažím se rozhodnout o tom, zda se v první řadě používají plováky nebo celých čísel pro všechny prvky ve své aplikaci 3D související s (což je C ++ ve většině případů). Chápu, že většina zařízení ARM založené nemají hardware plovoucí čárkou podporu, takže jsem přijít, že jakýkoli zvedání těžkých břemen s plováky by bylo výrazně pomalejší.

Nicméně, mám v plánu na přípravu všech dat ve většině případů (tj již vertex buffery případně i transformují pomocí matic, které nemění hodně), takže jsem jen cpou dat dolů OpenGL krku. Mohu předpokládat, že to jde více či méně přímo na GPU, a jako takový být přiměřeně rychle? (Btw, minimálním požadavkem je OpenGL ES 2.0, takže pravděpodobně vylučuje starší 1.x založené telefony.)

Také - jak je trest, kdy jsem kombinovat ints a plave? Za předpokladu, že všechny mé geometrie je stejně předem postavený float nárazníky, ale já používám celých čísel pro matrice, protože ty si vyžadují nákladné operace, jako násobení matic, kolik hněv budu vzniknou tady?

Mimochodem, já vím, že bych měl držet nízko moje očekávání (vypadá dokonce žádá plováky na CPU je žádá o příliš mnoho), ale je tu něco, co vzdáleně připomínalo 128-bit VMX registruje?

(A já jsem tajně doufal, že fadden čte tuto otázku a má úžasnou odpověď.)

Položena 02/08/2010 v 08:54
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
14

Starší zařízení se systémem Android, jako je G1 a myTouch mít ARMv6 CPU bez plovoucí opěrného bodu. Většina novějších zařízení, jako Droid, Nexus One a Incredible, použijte ARMv7-A procesory, které mají FP hardware. Pokud je vaše hra je opravdu 3D-náročné, to by mohlo vyžadovat více v souvislosti s prováděním 3D než starší přístroje mohou poskytnout stejně, takže budete muset rozhodnout, jaká úroveň hardware, který chcete podpořit.

Pokud jste kód výhradně v Javě, bude vaše aplikace využít hardware FP-li k dispozici. Máte-li psát nativní kód s NDK a vyberte armv5te architekturu, nebude mít hardwarovou FP vůbec. Zvolíte-li ARMv7-architekturu, budete, ale vaše aplikace nebude k dispozici v zařízeních pre-ARMv7-A.

OpenGL z Javy je třeba sedí na vrcholu „přímé“ bajtu vyrovnávací paměti nyní, které jsou v současné době pomalu přístup z Javy, ale velmi rychle se z rodné strany. (Nevím moc o provádění GL i když, takže nemohu nabídnout mnohem víc než to.)

Některá zařízení navíc podporují NEON „Advanced SIMD“ rozšíření, které poskytuje některé ozdobné prvky rámec toho, co je základní podpora VFP má. Je však třeba otestovat pro to za běhu, chcete-li jej použít (Vypadá to, že ukázkový kód pro to teď - viz strana NDK pro NDK R4b).

Dřívější odpověď má nějaké informace o gcc vlajek používaných NDK pro „tvrdé“ FP.

Nakonec je třeba odpovědět na „pevné nebo float“ přijde na to, co třída zařízení chcete, aby vaše aplikace běžet. Je to určitě jednodušší kódu ARMv7-a, ale se říznete off z kusu trhu.

Odpovězeno 02/08/2010 v 23:39
zdroj uživatelem

hlasů
5

Podle mého názoru je třeba držet s pevným bodem v maximální možné míře.

Nejen staré telefony chybět podporu s plovoucí desetinnou čárkou, ale i nové, jako je HTC Wildfire.

Také, pokud se rozhodnete požadovat ARMv7, upozorňujeme, že například Motorola Milestone (Droid pro Evropu) se vyznačují ARMv7 CPU, ale kvůli tomu, jak Android 2.1 byl postaven pro tento přístroj, zařízení nebude používat armeabi- v7a libs (a mohou skrývat svou aplikaci ze služby Market).

Já osobně obejít tím, že detekce ARMv7 podporu pomocí nové knihovny cpufeatures opatřenou NDK R4b načíst některé armeabi-v7a lib na požádání s dlopen ().

Odpovězeno 05/08/2010 v 12:10
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more