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

amiga-news.de Forum > Programmierung > LAYERS_CLIPRECTS_LOST bei InstallClipRegion() [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

15.10.2006, 19:15 Uhr

NoImag
Posts: 1050
Nutzer
Hallo,

Wenn nach dem Installieren einer Clipregion in l->Flags das Bit LAYERS_CLIPRECTS_LOST anzeigt, dass nicht genügend Speicher für die Berechnung der ClipRects vorhanden war, wie sieht dann eine sinnvolle Reaktion des Programms aus?

Tschüß


[ - Antworten - Zitieren - Direktlink - ]

16.10.2006, 18:03 Uhr

bubblebobble
Posts: 707
Nutzer
Das würde bedeuten, du hast evtl. noch eine handvoll Bytes frei.
Der Rechner ist dann quasi schon abgestürzt.
Ich denke das passiert extrem selten, weil vermutlich andere
Sachen schon viel früher crashen. Ich würde es irgnorieren.
Im schlimmsten fall wird dann über den Rand der Clipregion hinausgeblittet.


--
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 - ]

16.10.2006, 22:54 Uhr

Georg
Posts: 107
Nutzer
Ich würde es auch ignorieren. Bin mir nicht ganz sicher aber ich glaub' uralte Programme hatten teilweise "Refresh" Menus, die das Fenster (GUI usw.) komplett neu zeichneten. Für den Fall, wo irgendwelche Speicherplatzmängel wie in InstallClipRegion dazu führten das es Gfx Müll gab.


[ - Antworten - Zitieren - Direktlink - ]

16.10.2006, 23:10 Uhr

NoImag
Posts: 1050
Nutzer
Danke für die Antworten. Also ignorieren.

Tschüß


[ - Antworten - Zitieren - Direktlink - ]

17.10.2006, 13:51 Uhr

Holger
Posts: 8116
Nutzer
Es gibt zwei Szenarien.

Das erste ist, dass man eine generische Zeichenroutine aufrufen will, deren Operationen immer im gültigen Bereich liegen, aber der Refresh soll aus Performance-Gründen auf den Bereich beschränkt werden, in dem sich etwas geändert hat oder der vorher in der damage-List war (das macht ja BeginUpdate).
Dann kann man natürlich trotzdem zeichnen, da die Abwesenheit der Regionen nur zur Folge hat, das mehr übermalt wird als notwendig. Also leidet nur die Performance ein wenig.

Das zweite Szenario ist, dass man vermutet oder weiß, dass die Routine Bereiche übermalen könnte, in die es nicht zeichnen sollte. Man blittet z.B. ein komplettes Bild in's Fenster und schützt Fensterrahmen und Gadgets per ClipRegions.
Dann sollte man natürlich nicht zeichnen, wenn LAYERS_CLIPRECTS_LOST gesetzt ist, sondern es zu einem späteren Zeitpunkt noch mal versuchen...

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

[ - Antworten - Zitieren - Direktlink - ]

19.10.2006, 00:10 Uhr

NoImag
Posts: 1050
Nutzer
Zitat:
Original von Holger:
Dann sollte man natürlich nicht zeichnen, wenn LAYERS_CLIPRECTS_LOST gesetzt ist, sondern es zu einem späteren Zeitpunkt noch mal versuchen...


Was verstehst Du unter einem späteren Zeitpunkt? Eine zehntel Sekunde, kürzer, länger?
Der Anwender wird nicht glücklich sein, wenn die erwartete Ausgabe nicht kommt. Ich vermute sogar, dass er eher unglücklicher sein wird, als wenn die Ausgabe ein paar optische Fehler hat. Was den Schutz der Fensterrahmen und den von Gadgets betrifft, die könnte ich natürlich in dem Fall einfach anschließend refreshen. Die eigentliche Grafik wäre aber entweder gar nicht da, veraltet oder (beim Ignorieren des Flags) fehlerhaft.

Tschüß


[ - Antworten - Zitieren - Direktlink - ]

19.10.2006, 12:46 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von NoImag:
Was verstehst Du unter einem späteren Zeitpunkt? Eine zehntel Sekunde, kürzer, länger?
Der Anwender wird nicht glücklich sein, wenn die erwartete Ausgabe nicht kommt. Ich vermute sogar, dass er eher unglücklicher sein wird, als wenn die Ausgabe ein paar optische Fehler hat. Was den Schutz der Fensterrahmen und den von Gadgets betrifft, die könnte ich natürlich in dem Fall einfach anschließend refreshen.

Und Du denkst, der Refresh der Fensterrahmen funktioniert, wenn nicht genug Speicher für ClipRects vorhanden ist?
Der würde dann ja Deine Grafik übermalen, wenn das AmigaOS genauso denken würde, wie Du.
Allerdings dachten die Commodore-Entwickler anders. Zumindest für BeginRefresh steht da, dass man im Falle von LAYERS_CLIPRECTS_LOST EndRefresh mit FALSE aufrufen und es eben "später versuchen" soll.

Frag mich nicht, was später heißt. Wenn wieder Speicher verfügbar ist.

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

[ - Antworten - Zitieren - Direktlink - ]

19.10.2006, 23:59 Uhr

NoImag
Posts: 1050
Nutzer
Zitat:
Original von Holger:
Und Du denkst, der Refresh der Fensterrahmen funktioniert, wenn nicht genug Speicher für ClipRects vorhanden ist?
Der würde dann ja Deine Grafik übermalen, wenn das AmigaOS genauso denken würde, wie Du.


Woher soll ich wissen, wie RefreshWindowFrame() realisiert wurde? In den Autodocs steht nichts dazu und die Verwendung von ClipRects ist dafür keineswegs zwingend.

Zitat:
Allerdings dachten die Commodore-Entwickler anders. Zumindest für BeginRefresh steht da, dass man im Falle von LAYERS_CLIPRECTS_LOST EndRefresh mit FALSE aufrufen und es eben "später versuchen" soll.

Wo steht das? In den Autodocs zu BeginRefresh() habe ich keine solche Bemerkung gefunden.

Zitat:
Frag mich nicht, was später heißt. Wenn wieder Speicher verfügbar ist.

Schade. Dies war eigentlich meine Frage. Was mache ich ganz konkret.

Tschüß


[ - Antworten - Zitieren - Direktlink - ]

20.10.2006, 13:28 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von NoImag:
Wo steht das? In den Autodocs zu BeginRefresh() habe ich keine solche Bemerkung gefunden.

Stimmt, da steht nicht mal, dass es dieses Flag gibt. Dummerweise steht da, dass es auf BeginUpdate() der layers.library zurückgreift und diese Funktion liefert den Erfolgsstatus auch gleich als Rückgabewert. Laut Dokumentation muss man im Falle eines Fehlschlags den Refreshversuch abbrechen und EndUpdate( l, FALSE ) aufrufen, was intuition wohl nicht für Dich machen kann. Da BeginRefresh() keinen Rückgabewert liefert, bleibt nur noch LAYERS_CLIPRECTS_LOST als Indiz, wenn so etwas passiert ist. Aber angesichts des Dokumentationsstands wird wohl niemand das berücksichtigen...

Aber Deine ursprüngliche Frage bezog sich ja auf InstallClipRegion. Und in dessen Dokumentation steht eindeutig: As soon as there is enough memory and the layer library gets called again the ClipRect list will be rebuilt. Also musst Du halt die (oder irgendeine?) Funktion wieder aufrufen "as soon as there is enough memory"...
Zitat:
Schade. Dies war eigentlich meine Frage. Was mache ich ganz konkret.
Wenn Dir die o.g. Option nicht gefällt, Alert(AG_NoMemory) und Programm beenden, möglicherweise...

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

[ - Antworten - Zitieren - Direktlink - ]

20.10.2006, 17:29 Uhr

bubblebobble
Posts: 707
Nutzer
Ich glaube in Zeiten von mehreren MB oder sogar GB als RAM ist diese Frage eher hypothetisch.
Ist dir denn dieser Fall schonmal passiert ?
Wie ich schon sagte, wenn so wenig Memory frei ist, dass nicht einmal mehr eine Clipreagion reinpasst (vermutlich eine handvoll Bytes), dann ist der Rechner sowieso schon über dem Jordan.
Vermutlich wirst du aber nie so wenig Speicher frei haben, weil andere Programm schon viel früher crashen.

--
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 - ]

21.10.2006, 23:55 Uhr

NoImag
Posts: 1050
Nutzer
@bubblebobble:

Nein, mir ist sowas noch nicht passiert. Bisher habe ich dieses Flag ignoriert. Es ist einfach so, dass es mich manchmal überkommt und ich etwas richtig machen möchte. Das Programm (oder die Operation) wegen fehlerhaften Clippings abzubrechen, kommt mir nur etwas übertrieben vor. Wie ich das mit dem Warten sinnvoll realisieren soll, ist mir schleierhaft. Ich dachte einfach, der geballte Sachverstand hier weiß mehr als ich, also frage ich einfach mal. Ich denke, ich werde das Flag auch weiterhin ignorieren.

Nochmals danke für die Antworten.

Tschüß


[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > LAYERS_CLIPRECTS_LOST bei InstallClipRegion() [ - Suche - Neue Beiträge - Registrieren - Login - ]


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