amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Grafikfehler unter UAE [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

01.02.2006, 08:09 Uhr

Micha1701
Posts: 938
Nutzer
Hi!

Ich hab vor kurzem mein neues Spiel SUDOKU online gestellt. Nun ist es bei vielen zu gelegentlichen Grafikfehlern gekommen.

Innerhalb des Spieles wird zwischen P96 und CGX Systemen unterschieden. Unter CGX werden Screenbuffer besorgt und diese dann einfach gewechselt und unter P96 besorg ich mir ne BitMap und wechsel die dann mit ChangeVPBitMap().

Auf "echten" Amigas funktioniert das auch wunderbar. Hab das früher auf meinem 1200er mit BVision und CGX getestet und jetzt auf nem A1 mit P96. Alles keine Probleme.

Unter WinUAE gibts da aber ein Problem:

  • ich sichere einen Bereich der angezeigten BitMap in die nicht angezeigte BitMap per ClipBlit()
  • dann erstelle ich z.B. ein Menu in der nicht angezeigten BitMap und kopiere das per ClipBlit() wieder in den angezeigten Bereich
  • nachdem im Menu etwas ausgewählt wurde kopiere ich den gesicherten Bereich aus der nicht angezeigten BitMap in die angezeigte BitMap.
  • wenn man nun die Maus bewegt, gibts an der Stelle plötzlich Zeugs aus der nicht sichtbaren Bitmap.

Es sieht so aus, als ob WinUAE den Bereich unter der Maus mitkopiert und dann bei einer Mausbewegung wieder auf den Bildschirm pappt...

Hat jemand schonmal so ein Problem gesehen und weiß wie man das beheben kann?


--
:boing: Micha :boing:

Look at my HPs:
http://www.Silicon-Wizards.com
http://www.RealmsofPower.de.vu

[ - Antworten - Zitieren - Direktlink - ]

01.02.2006, 09:47 Uhr

thomas
Posts: 7718
Nutzer
Zitat:
Original von Micha1701:
[list]
  • ich sichere einen Bereich der angezeigten BitMap in die nicht angezeigte BitMap per ClipBlit()
  • dann erstelle ich z.B. ein Menu in der nicht angezeigten BitMap

  • Hast du zwei nicht-angezeigte BitMaps ? Sonst ist mit dem Erstellen des Menüs die Sicherung kaputt.

    Zitat:
    wenn man nun die Maus bewegt, gibts an der Stelle plötzlich Zeugs aus der nicht sichtbaren Bitmap

    Bist du sicher, daß du nicht eher Zeugs aus der sichtbaren Bitmap bekommst, aus der Zeit, als du die Maus zuletzt bewegt hast ?

    Welche Version von WinUAE und von Picasso96 benutzt du ? Mouse-Trails waren lange Zeit ein Problem bei WinUAE. Vielleicht ist der Workaround dafür nicht ganz kompatibel.

    Gruß Thomas

    --
    Email: thomas-rapp@web.de
    Home: thomas-rapp.homepage.t-online.de/

    [ - Antworten - Zitieren - Direktlink - ]

    01.02.2006, 10:12 Uhr

    Micha1701
    Posts: 938
    Nutzer
    Auf diese Überschneidungen achte ich natürlich. In diesem Fall kopiere ich nur 300 Zeilen aus der Mitte des Bildes in die oberen 300 Zeilen der anderen BitMap. Gezeichnet wird dann im unteren Bereich. Da gibts also keine Überschneidungen...

    Das mit den Maustrails müsste es sein. Es bleibt der Teil an der Stelle übrig an dem die Maus zu letzt gewesen ist. Benutze derzeit WinUAE V1.1.1, rtg.library V40.3993 und picasso96API.library V2.3
    Gibts da was neueres?

    --
    :boing: Micha :boing:

    Look at my HPs:
    http://www.Silicon-Wizards.com
    http://www.RealmsofPower.de.vu

    [ - Antworten - Zitieren - Direktlink - ]

    01.02.2006, 10:21 Uhr

    MaikG
    Posts: 5172
    Nutzer
    Unter WinUAE 0.8.x - 0.9.x hab ich selbst bei der Workbench 3.9(Menüs etc.)
    manchmal grafikfehler. Da ich es sehr selten benutze hab
    ichs es noch nicht aktualisiert.

    [ - Antworten - Zitieren - Direktlink - ]

    01.02.2006, 13:20 Uhr

    Holger
    Posts: 8116
    Nutzer
    Zitat:
    Original von Micha1701:
    Unter WinUAE gibts da aber ein Problem:

    • ich sichere einen Bereich der angezeigten BitMap in die nicht angezeigte BitMap per ClipBlit()
    • dann erstelle ich z.B. ein Menu in der nicht angezeigten BitMap und kopiere das per ClipBlit() wieder in den angezeigten Bereich
    • nachdem im Menu etwas ausgewählt wurde kopiere ich den gesicherten Bereich aus der nicht angezeigten BitMap in die angezeigte BitMap.
    • wenn man nun die Maus bewegt, gibts an der Stelle plötzlich Zeugs aus der nicht sichtbaren Bitmap.


    Versteh ich nicht. Nach Deiner Beschreibung kopierst Du von a nach b und dann wieder von b nach a. Dann wäre der Inhalt identisch. Wie kannst Du also "Zeugs aus der nicht sichtbaren BitMap" sehen?
    Was mich noch viel mehr verwundert: Du blittest zwischen den BitMaps hin und her, schreibst aber Eingangs, daß Du ChangeVPBitMap() benutzt. Das haut doch irgendwie nicht hin...

    mfg
    --
    Good coders do not comment. What was hard to write should be hard to read too.

    [ - Antworten - Zitieren - Direktlink - ]

    01.02.2006, 14:52 Uhr

    Micha1701
    Posts: 938
    Nutzer
    OK, ich hab mich wohl etwas unklar ausgedrückt.

    Also an für sich bereite ich alles vor um doublebuffering zu verwenden.
    Z.B. wird das Titelbild im Hintergrund gezeichnet und dann nach vorne geholt (ChangeVPBitMap). Innerhalb des Spieles verwende ich die 2. BitMap nur zum rendern und kopiere dann die fertigen Teile in die sichtbare BitMap.

    Obwohl ich also nicht die BitMaps wechsle sondern nur in der einen BitMap zeichne und das dann in die andere reinkopiere gibts dennoch "Maustrails". Wenn man also die Maus bewegt, dann erscheint wieder ein Stück von der angezeigten BitMap so wie sie vor dem ClipBlit() ausgesehen hat...

    Besser erklärt?


    --
    :boing: Micha :boing:

    Look at my HPs:
    http://www.Silicon-Wizards.com
    http://www.RealmsofPower.de.vu

    [ - Antworten - Zitieren - Direktlink - ]

    01.02.2006, 18:48 Uhr

    Holger
    Posts: 8116
    Nutzer
    @Micha1701:
    Auch wenn die Fehler möglicherweise mit Bugs in WinUAE zusammenhängen, ist es nicht ratsam, Daten vom dargestellten Bildschirm in den Offscreen-Buffer zu übertragen.
    Dagegen sprechend die potentiellen Performance-Probleme (z.B. unter cgx gibt es m.W. keine Möglickeit, sicherzustellen, daß die BitMap im Gfxcard-Speicher statt im FastRAM liegt, FastRAM->Gfx ist schneller als Gfx->FastRAM), der Verlust der Option, nicht im Vollbildmodus zu operieren, und natürlich die Probleme mit dem Mauszeiger.
    Selbst wenn das Problem UAE-seitig gefixt wird, muß UAE mehrmals Mauszeiger, resp. alten Hintergrund wiederherstellen, damit Deine Anwendung korrekt läuft.
    Da Du aber alle Grafikdaten zur Verfügung hast, um den Bildschirminhalt zu rekonstruieren, ist es sinnvoller, genau dies im Backbuffer zu tun, statt die Daten aus dem live-Bildschirm zu kopieren.
    Dann kannst Du auch gleich richtiges Double-Buffering benutzen...

    mfg
    --
    Good coders do not comment. What was hard to write should be hard to read too.

    [ - Antworten - Zitieren - Direktlink - ]

    01.02.2006, 19:01 Uhr

    bubblebobble
    Posts: 707
    Nutzer
    Ich würde auf jeden Fall BlitBmapRastport verwenden. Ich glaube auch, dass es unter WinUAE gehen müsste, hatte damit nie Probleme.
    LEsen von Graka ist aber immer schlecht. Besser ist es, das Bild komplett im RAM zu komponieren und nur schreibend auf den Graka Speicher zuzugreifen.
    --
    Thilo Köhler, Author von:
    HD-Rec, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, TKUnpacker
    Homepage: http://www.hd-rec.de


    [ - Antworten - Zitieren - Direktlink - ]

    02.02.2006, 15:16 Uhr

    Micha1701
    Posts: 938
    Nutzer
    OK, ich hab das Problem jetzt umgangen, indem ich eben nicht von einem Buffer in den anderen schreibe sonder im Hintergrund ein neues Bild rendere und das dann nach vorne hole...

    --
    :boing: Micha :boing:

    Look at my HPs:
    http://www.Silicon-Wizards.com
    http://www.RealmsofPower.de.vu

    [ - Antworten - Zitieren - Direktlink - ]

    02.02.2006, 15:37 Uhr

    whose
    Posts: 2156
    Nutzer
    Zitat:
    Original von Micha1701:
    OK, ich hab das Problem jetzt umgangen, indem ich eben nicht von einem Buffer in den anderen schreibe sonder im Hintergrund ein neues Bild rendere und das dann nach vorne hole...


    Das ist eigentlich generell eine gute Vorgehensweise... unter WinUAE wirst Du allerdings die Mousetrails bei Doublebuffering dadurch trotzdem nicht ganz los, es sei denn, Du zeichnest in jedem Frame das Bild komplett neu. Ich weiß jetzt nicht genau, ob sich das beim Pseudo-Doublebuffering in einem Fenster auf der Workbench genauso verhält, da dort meist das gesamte Bild aus der Offscreen-Bitmap platt ins Fenster geblittet wird.

    Allerdings kann man dort ein Flackern des Mauszeigers beobachten, solange er im Zeichenbereich steht, daher dürften sich auch dort die Mousetrails oder Blitfehler bemerkbar machen, wenn nicht der komplette Fensterinhalt jedes Mal neu gezeichnet wird.

    Für das Doublebuffering in einem eigenen Screen kannst Du übrigens auch auf die ChangeScreenBuffer()-Methode zurückgreifen, sofern OS3.1 Voraussetzung sein soll. Das funktioniert auch unter WinUAE prima und scheint nebenbei die einzige Methode zu sein, die auf 99% aller Systeme rasterstrahlsynchron abläuft (ich muß allerdings gestehen, daß ich ChangeVPBitMap() bisher nicht benutzt habe, diese ist ja Teil des ChangeScreenBuffer()-Mechanismus, gut möglich, daß diese Funktion auch synchronisiert abläuft).

    Evtl. sollte man beim WinUAE-Team mal darüber grübeln, wie man sicherstellen kann, daß das Zeichnen des Mauszeigers garantiert als letzte Operation bei der Frameerstellung ausgeführt wird, dann wäre man das Problem der Mousetrails und Blitfehler los.

    Grüße

    --
    ---

    :boing: µA1 PPC 750GX-800
    :boing: A4000 PPC 604e-233

    [ - Antworten - Zitieren - Direktlink - ]


    -1- [ - Beitrag schreiben - ]


    amiga-news.de Forum > Programmierung > Grafikfehler unter UAE [ - Suche - Neue Beiträge - Registrieren - Login - ]


    .
    Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
    Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
    .