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?

Gerbil (29)|7.6.2006 00:06
[QUOTE="Johny_G"]
[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]
[/QUOTE]

To podporuje VGA rozlišení??
beecher (9270)|7.6.2006 00:13
To na VGA zarizenich pri pouziti GAPI nevytuhava... ;)
Gerbil (29)|7.6.2006 07:16
Mě to ale taky nevytuhává, jenom to funguje s rozlišením 240x320 na VGA
Gerbil (29)|8.6.2006 20:42
Vypadá to, že to, co nepodporuje VGA rozlišení, je gx :( . Chyba překreslování je v GXGraphics v metodě BeginDraw().
beecher (9270)|8.6.2006 20:47
A timhle workaroundem, co popsal Johnny, se to vyresi... :)
Gerbil (29)|8.6.2006 22:58
Zdrojáky GXGraphics se určitě dají někde stáhnout, pak stačí opravit tu chybu a zkompilovat.
Před zapisováním pixelů do bufferu by se měla volat metoda GXBeginDraw() z gx.dll, která vrací pointer s adresou bufferu. Ta adresa je pořád stejná, takže jí stačí na začátku jednou zkopírovat, jenže novější verze gx se bez zavolání GXBeginDraw po volání GXEndDraw sekne na původním snímku a GXEndDraw už obraz neobnoví, takže do GXGraphics.BeginDraw stačí přidat GAPI.GXBeginDraw().
Johny_G (384)|9.6.2006 22:28
[QUOTE="Gerbil"]Mě to ale taky nevytuhává, jenom to funguje s rozlišením 240x320 na VGA[/QUOTE]

Teď ti nerozumím. Budeš samozřejmě pracovat na canvasu 320x240 pixelů, ovšem korektně se to zobrazí i na VGA se zdvojenými pixely, i na RealVGA (pak ovšem narazíš na to, že kupříkladu tapnutí myši pracuje s rozlišením 640x480, zatímco GAPI s 320x240).
[QUOTE="Gerbil"]Zdrojáky GXGraphics se určitě dají někde stáhnout, pak stačí opravit tu chybu a zkompilovat.
Před zapisováním pixelů do bufferu by se měla volat metoda GXBeginDraw() z gx.dll, která vrací pointer s adresou bufferu. Ta adresa je pořád stejná, takže jí stačí na začátku jednou zkopírovat, jenže novější verze gx se bez zavolání GXBeginDraw po volání GXEndDraw sekne na původním snímku a GXEndDraw už obraz neobnoví, takže do GXGraphics.BeginDraw stačí přidat GAPI.GXBeginDraw().
[/QUOTE]

GAPI je takový divný v tom, že si tu knihovnu musíš prakticky napsat sám :). Já se tomu chtěl vyhnout, tak jsem si zkompiloval už hotovou knihovnu z tutorialu na MSDN. Zkusím do toho ten řádek přidat. Bylo by sympatické, kdyby to zabralo.
Gerbil (29)|10.6.2006 11:48
Problém s polohou myši by měl jít vyřešit tak, že se souřadnice x vynásobí šířkou vykreslovací plochy gx a vydělí šířkou okna, který odchytává události myši, s y je to stejný. Násobit nebo dělit polohu myši nějakou konstantou vytvořenou na začátku není dobrý, protože pda počítá s typem float nebo double hrozně pomalu.

[CODE]Příklad
public class MainForm : Form
{
public MainForm()
{
SuspendLayout();
AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
AutoScroll = false;
ClientSize = new System.Drawing.Size(240, 268);
Dock = DockStyle.Fill;
WindowState = FormWindowState.Maximized;
Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
Name = "MainForm";
Text = "MainForm";
MouseDown += new MouseEventHandler(_MouseDown);
ResumeLayout(false);
}
private void _MouseDown(object sender, MouseEventArgs e)
{
Form f = (Form)sender;
JinaUdalost((e.X * GXP.cxWidth) / f.ClientSize.Width, (e.Y * GXP.cyHeight) / f.ClientSize.Height);
}
}

[/CODE]

cxWidth a cyHeight je z GAPI.GXDisplayProperties

Thomas. (102)|10.6.2006 12:24
Nesel by takhle optimalizovat Quake 2 pro VGA zarizeni? Nemohl by jste nekdo Quaka 2 optimalozovat pro VGA pristroje?
Johny_G (384)|10.6.2006 12:56
[QUOTE="Gerbil"]Problém s polohou myši by měl jít vyřešit tak, že se souřadnice x vynásobí šířkou vykreslovací plochy gx a vydělí šířkou okna, který odchytává události myši, s y je to stejný. Násobit nebo dělit polohu myši nějakou konstantou vytvořenou na začátku není dobrý, protože pda počítá s typem float nebo double hrozně pomalu.

(...)

cxWidth a cyHeight je z GAPI.GXDisplayProperties

[/QUOTE]

Ne, neboj. Já to ošéfovaný mám a bylo to daleko jednodušší než uvádíš :). Ale díky ;).
[QUOTE="Thomas."]Nesel by takhle optimalizovat Quake 2 pro VGA zarizeni?[/QUOTE]

Pochybuju, že je psaný v C# pod GAPI. Každopádně u realtimové hry bys prudce narazil na zpomalení, které je u Eleworie prakticky nepoznatelné.
Gerbil (29)|10.6.2006 13:54
Neznám nic jednoduššího než upravit tu polohu takhle.
Btw, rychlost vykreslení bufferu s gx je docela rychlý.