Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

Jak na GAPI u přístrojů FS Loox 720 a Dell Axim X50v/X51v?

Johny_G (384)|12.4.2006 15:51
Bohužel jsem zjistil, že má hra psaná v GAPI nefunguje na výše zmiňovaných přístrojích (Loox 720 a Axim X50v/X51v). Vykreslí se první snímek a hra zamrzne. Podle všeho reaguje na kliknutí, avšak nepřekresluje. Dá se to nějak ošetřit?
Crusader_ce4you (624)|13.4.2006 06:45
Ošetřit se to dá za pomoci tlačítka "hledat" na tomto fóru. Po použití zmíněného tlačítka lze nalézt třeba toto ;)
Johny_G (384)|13.4.2006 12:20
Neboj, hledal jsem. Tohle nefunguje. Našel jsem i ekvivalent pro Axim, ale nejde to. Proto se ptám, jestli se s tím někdo osobně nesetkal. Je to nějaký divný :-(.
Saman_ce4you (1451)|13.4.2006 12:46
zkus to na ms newsech, tam ti nekdo poradi..
beecher (9270)|13.4.2006 13:13
Nejjednodussi bude vzit ten kod a udelat debug verzi aplikace, ktera si kazde uprdnuti systemovych knihoven zaloguje do textaku a to ti pak posleme, at vis, jak to mas osetrit... ;)
beecher (9270)|15.4.2006 12:32
Tos nerek, ze je to v C#. Ja myslel, ze je to v C/C++...

Nechces si na to udelat private project na www.gotdotnet.com a mne tam pridat, ze bych se na to mrknul? Nebo posli mi kod...
Johny_G (384)|15.4.2006 13:08
Já nerad předávám kód :-(. Ale tuším, kde je chyba, a pokud s tím umíš, mohl bys mi pomoci. V GAPI si přeci má každý vytvořit managed DLL na míru, aby uměla přesně to, co programátor chce. Jenže na to já jsem příliš dřevěnej, takže jsem vzal už hotové DLL z programu Dancing Zombies, který slouží na MSDN Library coby example. Podle všeho musí být ta chyba právě v té DLL, protože v programu na 99,9% nehrozí. Pokud bys tedy byl schopen mi pomoci s těmi DLL (viz zde), bylo by to super. Musí umět jen a pouze vykreslit bitmapu (resp. obdélníkový výřez) na souřadnice a volitelně i s KeyTransparency. Je to zhruba takhle:

[CODE]*********
deklarace
*********
public GXGraphics gx = null;
public GXBitmap m_image = null;
public System.Reflection.Assembly zdroje =
System.Reflection.Assembly.GetExecutingAssembly();

**************************
loading po startu aplikace
**************************

//inicializace plochy
gx = new GXGraphics(this, GXGraphics.DisplayBufferModes.kDoubleBuffer); gx.SetDrawModes(GXGraphics.DrawFlags.kModeNoBoundsChecking);

//nastavení průhledné barvy pro pozdější KeyTransparency
gx.SetSourceKey(Color.Lime);

//načtení bitmapy uložené jako embedded resource
m_image = new GXBitmap(
zdroje.GetManifestResourceStream(@"MujProjekt.obrazek.bmp"), gx);

*******************
vykreslovací smyčka
*******************

//zahájení kreslení
gx.BeginDraw();

//běžné vykreslení na x=0, y=0
gx.DrawBitmap(0, 0, m_image);

//vykreslení části obrázku (obdélník levého horního rohu šířky i výšky 5 pixelů)
gx.DrawBitmap(0, 0, new Rectangle(0, 0, 5, 5), m_image);

//kreslení s vynecháním průhledné barvy
gx.SetDrawModes(GXGraphics.DrawFlags.kModeSrcKeyTransparency);
gx.DrawBitmap(0, 0, m_image);
gx.ClearDrawModes(GXGraphics.DrawFlags.kModeSrcKeyTransparency);

//otisk gx na display
gx.EndDraw();

***********************
před ukončením aplikace
***********************

m_image.Dispose();

gx.ClearDrawModes(GXGraphics.DrawFlags.kModeNoBoundsChecking);
gx.Dispose();[/CODE]
beecher (9270)|15.4.2006 14:35
Hm, ten kod vypada v pohode...
Aha... Jak to tak ctu hledam, tak tam pouzivas GAPINet, takze to na VGA pada (melo by ti to zlobit i dokonce na Hx4700)... Pripadne pouzij metodu popsanou zde.

Prejdi na .NET CF 2.0 a DirectX Mobile, ktere je uz managed v .NET CF 2.0 standardne (pravda, ale zase jenom ve WM5) a budes mit po startech. ;) :D
Ja jsem zacal taky kdysi neco vyvijet v .NET CF 1.0, ale prozatimni UI jsem mel textove, takze jsem se nedostal k tomu, abych zjistil, ze to pres GAPI nepujde... :)
A stejnak uz je to preportovano do CF 2.0 a DXM...
Johny_G (384)|15.4.2006 14:53
[QUOTE="beecher"]Hm, ten kod vypada v pohode...
Aha... Jak to tak ctu hledam, tak tam pouzivas GAPINet, takze to na VGA pada (melo by ti to zlobit i dokonce na Hx4700)... Pripadne pouzij metodu popsanou zde.

Prejdi na .NET CF 2.0 a DirectX Mobile, ktere je uz managed v .NET CF 2.0 standardne (pravda, ale zase jenom ve WM5) a budes mit po startech. ;) :D
Ja jsem zacal taky kdysi neco vyvijet v .NET CF 1.0, ale prozatimni UI jsem mel textove, takze jsem se nedostal k tomu, abych zjistil, ze to pres GAPI nepujde... :)
A stejnak uz je to preportovano do CF 2.0 a DXM...[/QUOTE]

Já právě doufal, že se to nějak dá přes GAPINet :-). Do budoucna asi budu muset přeskočit na C++, jinak to dost dobře nepůjde. C# má strašně malou podporu třetích stran :-(. Čili přes GAPINet určitě ne?
beecher (9270)|15.4.2006 15:01
No, kdyz si prectes to, na co odkazuji, tak zjistis, ze ani GAPINet.DLL tomu nepomuze nebo presneji tomu pomuze nejaka jina metoda vykreslovani, nez ta standardni. Je to nejaka chybka obecne...

Na co by potreboval C# podporu tretich stran?

Osobne bych spise doporucil preskocit na WM5, .NET CF 2.0 a DXM a mas vystarano. Videl jsem tajne demo MS 3D enginu ala Quake 3 napsane pro tuto kombinaci a malem mi upadla celist (na neakcelerovanem Universalu to behalo jako z praku)...
Gerbil (29)|19.4.2006 22:50
Pouzivas knihovnu GXGraphics, kde je asi mala chyba, ktera zpusobuje nekompatibilitu bud s hw, ale to asi tezko nebo s verzi gx.
V metode BeginDraw tridy GXGraphics chybi volani nejakyho pointeru nebo co to je, importovanyho z knihovny gx. Jmenuje se GXBeginDraw a je ve tride GAPI. vlastne ani nevim, jestli to tam chybelo, ale potom to uz fungovalo.
Takze do metody BeginDraw v GXGraphics staci pridat GAPI.GXBeginDraw() a zkompilovat.
Stejne to ale funguje jenom v rozliseni 240x320 :(
Johny_G (384)|16.5.2006 21:46
Už jsem z toho fakt špatnej :-(. Neznáte nějakou jinou grafickou knihovnu pro C#, která umí QVGA i VGA současně a dá se použít i v nižších WM, než 5.0?
To, co mi poslal beecher má strašně málo informací a vůbec nic mi to neříká. Nemám nejmenší ponětí o zápisu do pixel bufferu.

Opravdu vás prosím, nemůžu s tím hnout. Nemusí to být nijak rychlé a potřebuju jen a pouze vykreslení bitmapy s možností zapnutí keytransparency. Vůbec nic jiného od toho nechci.
beecher (9270)|17.5.2006 16:03
A co takhle nepouzivat GAPI? Tady je shut-em up gamesa v .NET CF, ktera, pokud jsem to dobre pochopil, nejede pres GAPI...
Johny_G (384)|17.5.2006 18:11
[QUOTE="beecher"]A co takhle nepouzivat GAPI? Tady je shut-em up gamesa v .NET CF, ktera, pokud jsem to dobre pochopil, nejede pres GAPI...[/QUOTE]

No jo vlastně. Na karetní hru by to mělo rychlostně bohatě stačit.
Tady je to dost podrobně. Díky moc, už to zkouším přepsat ;-).
Johny_G (384)|17.5.2006 22:14
Narážím na nové problémy. Potřebuju, abych mohl ovládat orientaci displaye. Je to možné s .NET Compact Framework 1.0?
beecher (9270)|18.5.2006 11:50
Zde

Jinak ti taky doporucim se podivat na OpenNETCF.org, kde jejich SmartDevice Framework pridava spoustu managed P/Invoke volani...
Johny_G (384)|18.5.2006 15:13
Microsoft.WindowsCE.Forms je bohužel namespace z CF 2.0. A ten OpenNETCF mi blbne, nelze vytvořit nové solution a i samply se chovají přinejmenším podivně. Nainstaloval jsem vše správně.

Mám tedy uživatele nutit, aby si instaloval 25MB veliký framework 2.0? :-( Asi to spíš opět zůstane bez VGA podpory. Pro C# prostě slušnou grafickou knihovnu neseženu.
beecher (9270)|18.5.2006 15:20
.NET CF 2.0 ma 3-4 MB v pameti PDA. 25 MB ma instalacni balicek, protoze je tam .NET CF 2.0 pro vsechny mozne platformy (Windows CE 5.0, WM <5.0, WM 5.0 atd.). Nemluve o tom, ze ho za chvili budou potrebovat vsichni, jak poroste pocet aplilkaci pro .NET CF 2.0. ;)
Johny_G (384)|18.5.2006 18:03
Ukecal jsi mě :). Už stahuju SDK. Má CF2 nějaké efektivnější vykreslování grafiky? Tohle je dost nechutně pomalý, když potřebuju vypsat na display několik stovek písmen. Ovšem to by mohlo s landscapem odpadnout, jelikož bych mohl využít systémový textout. Ale tak jako tak - je tam to kreslení udělaný líp?
beecher (9270)|18.5.2006 18:29
Pokud je vykreslujes po jednom, tak to se nediv, musis si udelat rutinu na predpripraveni textu jako jedno obrazku a ten az pak placnout na display...

Jinak nevim, jestli je tam vykreslovani rychlejsi, ja pouzivam DX Mobile... ;)
Johny_G (384)|18.5.2006 18:42
No všechno kreslím na OffScreen, který se pak otiskne celý najednou. Vytvoření jednoho obrázku z textu by mi asi nebylo moc platné.
beecher (9270)|18.5.2006 18:50
To sice jo, ale taky nezapomen, ze i to kresleni offscreen do bufferu pro kazde pismenko zvlast je docela zahul...
Johny_G (384)|19.5.2006 20:18
SDK jsem nainstaloval, ale vůbec nic se nestalo. Asi že nemám SP2. Mno nic. VGA nepůjde, dokud nenajdu slušnou knihovnu.
beecher (9270)|19.5.2006 22:49
Co myslis tim, vubec nic se nestalo? Mas nainstalovano VS 2k5?
Johny_G (384)|19.5.2006 23:11
[QUOTE="beecher"]Co myslis tim, vubec nic se nestalo? Mas nainstalovano VS 2k5?[/QUOTE]

VS 2k5 už SDK pro 2.0 má. Stažený balíček by měl být pro 2k3 (soudě podle textů pod ním, které konkrétně říká, že uživatelé 2k5 jej nepotřebují).
beecher (9270)|20.5.2006 06:22
Njo, to je hruby omyl... VS2k5 ma v sobe .NET CF 1.x, 2.0 se musi doinstalovat. Ver mi, mam to nainstalovane dvakrat (prace & notas), tak vim... ;)
Nemluve o tom, ze ve VS2k3 nelze vyvijet pro .NET CF 2.0.
Johny_G (384)|20.5.2006 11:57
A 2k5 vyžadují SP2. Čili je to jesný :(.
beecher (9270)|20.5.2006 14:16
A v cem je problem?
Johny_G (384)|20.5.2006 14:59
[QUOTE="beecher"]A v cem je problem?[/QUOTE]

Nevím, zda to bylo jenom u mě, ale SP2 měly veliké problémy s kompatibilitou a menší problémy se síťovými protokoly. Krom toho mě obtěžovaly ty neustálé dotazy, zda chci aplikaci povolit připojení k internetu. Nevím, nějak mi to nesedlo. Já to vidím tak, že na příští hru se pokusím naučit C++, a tuhle už si nebudu ničím komplikovat. Nebo o nějaké knihovně víš? Pro C++ je jich tolik, a pro C# leda prd.
beecher (9270)|20.5.2006 15:44
Se SP2 neni vubec zadny problem, je-li nainstalovany hned po nainstalovani WXP.
Johny_G (384)|22.5.2006 22:43
Sice už odbíhám od nadpisu, ale nebudu kvůli jedné hře zakládat stále nová vlákna. Existuje free knihovna, která umí přes CF 1.0 přehrát MP3 či OGG?
beecher (9270)|23.5.2006 13:57
Nasel jsem akorat toto...
EDIT: Takze FMOD 3 knihovnu muzes pouzit zdarma, pokud nebudes svuj produkt prodavat. A pokud pouzijes .ogg, tak nemusis platit za MP3 licence...

EDIT: Nebude jednodussi prehravat nejake .wavy s mensim bitratem a samplingem? Jak to jednoduse umi OpenNETCF?
beecher (9270)|23.5.2006 14:48
A pokud si preportujes toto na ARM architekturu a udelas .NET wrapper, tak to bude prehravat skoro vsechno (.ogg, .mp3, .wav, .mod., .s3m, .xm, .it, .aiff)... ;)
Johny_G (384)|24.5.2006 08:32
Ať se snažíš, jak se snažíš, ne a na mě potěšit :-). Takhle nějak jsem to myslel, když jsem říkal, že C# má minimální podporu třetích stran. Jsem high-level programátor (to je ta horší varianta - píšu algoritmy, ale systémové záležitosti nechám na někom jiném), čili "pokud si přeportuješ toto na ARM architekturu a udeláš .NET wrapper" pro mě znamená totéž, jako "nic takového neexistuje" :-).
beecher (9270)|24.5.2006 09:57
Tak se podivej na ten prvni odkaz s tou FMOD 3 knihovnou... Pokud bys mel problem s tim wrapperem, tak dej vedet, vytvorim ti jej...
Johny_G (384)|24.5.2006 10:04
[QUOTE="beecher"]Tak se podivej na ten prvni odkaz s tou FMOD 3 knihovnou... Pokud bys mel problem s tim wrapperem, tak dej vedet, vytvorim ti jej...[/QUOTE]

On se snad bez znalosti C++ ani wrapper udělat nedá, ne? :). Pokud ho vyrobíš, budu ti neskonale vděčný. A abys byl velkolepě oceněn, můžu tě zapsat do credits :D. Pak by to chtělo taky někoho, kdo nemá cca měsíc nic na práci a udělá wrapper PocketHALu :D
beecher (9270)|24.5.2006 11:28
Ten PocketHAL, hm, to je podle mne hodne stare, nejsem si jist, jestli to na novejsich OSech bude chodit (WM2K3SE, WM5)...
Johny_G (384)|24.5.2006 11:29
[QUOTE="beecher"]Ten PocketHAL, hm, to je podle mne hodne stare, nejsem si jist, jestli to na novejsich OSech bude chodit (WM2K3SE, WM5)...[/QUOTE]

Je v něm psaný Undercroft a hry od 1st-Easy-Softu (Atomix, Galatron), pokud vím. A je stále ve vývoji. Nejnovější verze přinesla právě kompatibilitu s WM5. Ale vychází z něj i PocketFrog a podobné.
beecher (9270)|24.5.2006 13:50
Aha... Tak jo, ja se na to podivam a neco s tim zkusim vymyslet... ;)
Johny_G (384)|24.5.2006 16:37
[QUOTE="beecher"]Aha... Tak jo, ja se na to podivam a neco s tim zkusim vymyslet... ;)[/QUOTE]

Budu velice rád. Podle všeho jsem totiž přišel na kloub podpoře VGA pod GAPINetem. Snad dokonce i RealVGA :-). Nerad bych to zakřiknul, ale když to vyjde, tak se podělím o řešení. Je trochu kostrbaté, ale funkční. Když vyjde navíc i ten Ogg, budu nadšen :-). Pokud budeš dělat ten wrapper, tak postačí přehrávání oggů coby hudby a pokud to umí, tak wavů jako efektů. Díky moc.
Johny_G (384)|25.5.2006 20:34
Tak ten wrapper nedělej. Vygooglil jsem si ho a FMOD aplikaci znatelně zpomaluje. Zkusím si tedy sehnat nového hudebníka, který udělá hudbu ve formátu MOD. VGA kompatibilita se mi skutečně zadařila a to dokonce i pro RealVGA. Je to trochu kostrbaté a mírně zpomalující řešení, ale funguje to. Když se mi to potvrdí z více stran, řeknu vám jak na to. Je to fakt primitivní, nevím, že mě to nenapadlo dřív :-).
beecher (9270)|26.5.2006 08:57
Jak je libo... :)
Johny_G (384)|27.5.2006 21:53
Tak se mi ta moje VGA kompatibilita GAPINetu potvrdila na Aceru n311 a na Looxu 720. Je to neprofesionální řešení, je také o něco pomalejší (ale kam se to hrabe na rychlost při použití FMODu :sarcastic: ), nicméně prostě to funguje. A dokonce i v RealVGA (jen si musíte přepočítat kolizní obdélníky, jelikož jsou jinak pouze ve čtvrtině displaye a neodpovídají obrazu). Mno nic, nesmějte se mi, ale dělám to takhle: Využil jsem toho, že se vykreslí pouze první snímek. Po jeho vykreslení uvolním GXGraphics z paměti a následně inicializuji nový, který dokáže vykreslit snímek následující. Je to sice trochu pomalejší (ale zase ne o moc, protože GAPINet se tak jako tak nedá kvůli své rychlosti použít pro realtimové hry), ale prostě to šlape. Takže konkrétně:

[CODE]gx.EndDraw();[/CODE]

jsem prostě vyměnil za

[CODE]gx.EndDraw();

if (vga_support)
{
gx.Dispose();
gx = new GXGraphics(this, GXGraphics.DisplayBufferModes.kDoubleBuffer);
gx.SetDrawModes(GXGraphics.DrawFlags.kModeNoBoundsChecking);
gx.SetSourceKey(Color.Lime);
}[/CODE]

přičemž vga_support je konstanta typu bool, díky které můžu přehozením jediné hodnoty zkompilovat hru pro QVGA či VGA zařízení. Budu vydávat obě verze, protože QVGA je přecijen čistší a o ždibec rychlejší. Krom toho se u VGA projevily nějaké podivnosti, pokud je aplikace spuštěna v landscapu. Ale nemělo by to být nic zásadního.

EDIT: A vůbec, zatím nikdo nepřišel s jiným řešením, tak ať se jim to sebevíc nelíbí, je to prostě funkční. Benchmarkovým testem jsem si ověřil, že se skutečně GXGraphics uvolní celá a beze zbytku, takže neroste zatížení paměti.
beecher (9270)|28.5.2006 11:30
No, tak to je pekna prasarna...
Johny_G (384)|28.5.2006 18:03
[QUOTE="beecher"]No, tak to je pekna prasarna...[/QUOTE]

A pěkně funkční :-). Ale máš-li lepší nápad ;-).
beecher (9270)|28.5.2006 18:19
Uz jsem to napsal o par stranek drive... ;)
Johny_G (384)|28.5.2006 22:36
[QUOTE="beecher"]Uz jsem to napsal o par stranek drive... ;)[/QUOTE]

Nenašel jsem tam nic, čeho bych se mohl chytit :-). Jen link na fórum bez použitelné odpovědi :-).
beecher (9270)|29.5.2006 08:02
Ja jsem taky nemyslel GAPI... ;)
Hunter_man (213)|2.6.2006 23:37
[QUOTE="beecher"].NET CF 2.0 ma 3-4 MB v pameti PDA. 25 MB ma instalacni balicek, protoze je tam .NET CF 2.0 pro vsechny mozne platformy (Windows CE 5.0, WM <5.0, WM 5.0 atd.). Nemluve o tom, ze ho za chvili budou potrebovat vsichni, jak poroste pocet aplilkaci pro .NET CF 2.0. ;)[/QUOTE]
Kde toto stahnu ? Na webu MS jsem to sice nasel, ale pro stolni WIN (XP...).
Hunter_man (213)|2.6.2006 23:48
Uz jsem to tu na webu nasel.