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

amiga-news.de Forum > Programmierung > Bitmaps nur durch 16 teilbare Breite? [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 2 -3- 4 5 6 [ - Beitrag schreiben - ]

05.09.2006, 16:51 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
Also nehme ich jetzt AllocRaster oder AllocBitmap oder AllocMem ?

Im RKM steht bei FreeRaster, dass es CHIP Mem wäre.
Aber das muss ja nicht auf ein RTG Sysstem zutreffen.


Solange das RTG System auch nicht auf den Blitter verzichtet MUSS die Maske Immer ins CHIP-MEM, auch bei RTG transfers, kann man beispielweise bei P96 nicht angeben Graphik-Daten ins FAST Ram zu packen, dann wird aber auch kein Chipsatz für den Datentransfer benötigt.

Ich würde empfehlen bei NON-RTG Bitmaps, d.h. beim Transfer auf ECS/AGA/OCS Maps AllocRaster(), bei RTG( > 8BIT ) Maps AllocMem() zu empfehlen, das Problem nur ist wenn man nicht weiß das der Transfer auf einen gewöhnlichen Amiga Screen geht, dann muß man sich damit abfinden die Maske im CHIP-Ram zu haben, auch wenn der Schirm auf RTG liegt, trotz 8 Bit.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 16:52 Uhr

malte2
Posts: 148
Nutzer
@DariusBrewka:

Eine Maske für Interleaved BitMaps muß auch selber interleaved sein (daher Breite * Tiefe * Höhe) damit BltMaskBitMap() funktioniert.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 16:57 Uhr

malte2
Posts: 148
Nutzer
@bubblebobble:

LockBitMapTags() friert das ganze Board ein, daher es können keine Grafikoperation stattfinden. Eine wunderbar einfache Art&Weise deadlocks zu verursachen ;-)

Was die Maske angeht, so kannst Du sie am besten mit AllocRaster() anlegen, denn dann brauchst Du dich nicht um das Grafiksystem weiter zu sorgen. Die RTG Systeme sind auch so schlau und erkennen FastRam BitMaps/Masken, so daß nicht die Gefahr besteht, daß der Amiga Blitter verwendet wird.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:00 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
Sorry, und gleich noch eine Frage.

Ich benutze LockBitmapTagList() um an den RAW Data pointer und die BytesPerRow zu kommen, dann bearbeite ich die Daten und mache dann UnlockBitmap.
Ist das vorgehen korrekt ? Ich vermute, die Daten über die Bitmap sind nur so lange korrekt, wie sie gelocked ist. Ansonsten könnte Picasso96 mir die Bitmap unter den fingern Weg swappen, evtl. sogar das Format verändern.


Das Format wird sich sicherlich nicht ändern, d.h. du bekommst sicherlich keinen 8 Bit Schirm, wenn du vorher 32 Bit hattest oder einen nur halb so Hohen, theoretisch kann (und wird) es aber passieren dass du einen anderen Planepointer bekommen kannst, z.B. wenn du auf RTG Systemen den Bildschirm umschaltest. Wenn du z.B. auf einer 4 MB Gfx-Karte den Screen umschaltest muß er halt aus dem Displaybuffer in den Hauptspeicher umkopiert werden, aber das System / Programm muß weiterhin in diesen Screen malen dürfen.

Auf manchen Systemen erhälst du als User aber erst garnicht den Displaybuffer zurück.



[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:01 Uhr

bubblebobble
Posts: 707
Nutzer
@malte

Ja, aber auf einem System mit CustomChips und Grafikkarte kann Allocraster ja nicht wissen, ob ich jetzt damit eine Custom Chip Bitmap blitten will oder eine RTG bitmap.

Nunja, dann nehme ich erstmal AllocRaster und schuae was passiert.
Ich gucke auch mal in den Quellcode von GUIGFX, wie es da gelöst ist.

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

05.09.2006, 17:02 Uhr

bubblebobble
Posts: 707
Nutzer
@Darius

Aber ich sollte die Bitmap schon so lange gelocked halten, bis ich nicht mehr auf die Grafikdaten zugreife, richtig ?

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

05.09.2006, 17:12 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von malte2:
@DariusBrewka:

Eine Maske für Interleaved BitMaps muß auch selber interleaved sein (daher Breite * Tiefe * Höhe) damit BltMaskBitMap() funktioniert.


Hmm, ich glaube nicht daran, denn dann würden viele Ältere ulktools die auf die WB mittels MaskenFunktionen blitten nicht funktionieren. Interleaved wurde mit 3.0? eingeführt.

Interleaved bezieht sich IMHO nur auf das Display nicht auf die Vorgehensweise wie man darauf malt, d.h. eine 4 Bit masken Zeichenop auf ein Interleaved Schirm wird dennoch 4 Mal durch den Blitter für jede Plane einzeln gemacht und nicht nur in einem Rutsch. Es geht nicht Rückwärtskompatibel anders, ansonsten müssten die Masken jede Zeile DEPTH mal wiederholen.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:13 Uhr

malte2
Posts: 148
Nutzer
@bubblebobble:

Das braucht AR() auch nicht zu wissen, die anderen Grafikfunktionen (Blt MaskBitMap, BltBitMap etc.) überprüfen den Speichertyp.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:18 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von bubblebobble:
@malte

Ja, aber auf einem System mit CustomChips und Grafikkarte kann Allocraster ja nicht wissen, ob ich jetzt damit eine Custom Chip Bitmap blitten will oder eine RTG bitmap.


Ja, damit hatte ich auch mal eine Weile zu kämpfen... normal sollte die Variante mit AllocBitmap() und Depth = 1 sowie Angabe einer friend bitmap ihren Zweck erfüllen.

Die RTG-Systeme kommen damit jedenfalls klar, normalerweise sollte das dann auch für ECS/AGA-Bitmaps/-Masken in Ordnung gehen. Genau für diesen Zweck war/ist AllocBitmap() ja eigentlich gedacht. Um Bitmaps ohne tieferes Wissen über das Bitmap-Format und die Speicher-Art anlegen zu können.

Kann halt nur passieren, daß Du eine "selbstgebaute" Maske temporär noch einmal anlegen mußt, damit das funktioniert. Ganz ohne Kompromisse dürfte die "eierlegende AGA-RTG-Sau" jedenfalls nicht machbar sein ;)

Grüße

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:19 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
@Aber ich sollte die Bitmap schon so lange gelocked halten, bis ich nicht mehr auf die Grafikdaten zugreife, richtig ?


Natürlich, denn solange du Locks wird nichts umkopiert/verschoben, aber das System bleibt auch "stehen". Wie gesagt auf manchen Systemen (z.B. AROS) bekommst du die Adresse des Displaybuffers sowieso nicht und das ist das einzige Merkmal, was ich kenne, welches es erfordern würde die Bitmap länger zu locken.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:22 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von malte2:
@bubblebobble:

Das braucht AR() auch nicht zu wissen, die anderen Grafikfunktionen (Blt MaskBitMap, BltBitMap etc.) überprüfen den Speichertyp.


Und was machen die dann? wenn z.B. die Maske im Fast-Ram liegt aber der Bliitter benutzt wird? kopieren die die Maske dann immer erst ins Chip-Ram um?

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:28 Uhr

bubblebobble
Posts: 707
Nutzer
@Darius
Soll ich nun gelockt halten oder nicht ?

Realistisch gesehen muss ich es nicht gelockt halten, weil die Bitmap nicht Displayable ist, keine Friend Bitmap hat und nur mein Task darauf zugreift.
D.h. Picasso wird sie wohl kaum swappen, weil sie sowieso im RAM liegt, und andere Tasks funken mir nicht dazwischen.

Gelockt halten ist halt für mich blöd, weil dann der Debugger dort nicht unterbrechen darf, und somit kann ich meine GFX operationen nicht debuggen.


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

05.09.2006, 17:33 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von DariusBrewka:
Zitat:
Original von malte2:
@DariusBrewka:

Eine Maske für Interleaved BitMaps muß auch selber interleaved sein (daher Breite * Tiefe * Höhe) damit BltMaskBitMap() funktioniert.


Hmm, ich glaube nicht daran, denn dann würden viele Ältere ulktools die auf die WB mittels MaskenFunktionen blitten nicht funktionieren. Interleaved wurde mit 3.0? eingeführt.


Wie Holger schon ausführte, ist die 1Bit-Maske so oder so "nicht interleaved". Wichtig ist nur, was BltMaskBitMapRastPort() draus macht.

Zitat:
Interleaved bezieht sich IMHO nur auf das Display nicht auf die Vorgehensweise wie man darauf malt, d.h. eine 4 Bit masken Zeichenop auf ein Interleaved Schirm wird dennoch 4 Mal durch den Blitter für jede Plane einzeln gemacht und nicht nur in einem Rutsch. Es geht nicht Rückwärtskompatibel anders, ansonsten müssten die Masken jede Zeile DEPTH mal wiederholen.

Und was, wenn die 4Bit-Maske auch interleaved vorliegt?

Grüße


--
---

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

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:41 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von bubblebobble:
@Darius
Soll ich nun gelockt halten oder nicht ?

Realistisch gesehen muss ich es nicht gelockt halten, weil die Bitmap nicht Displayable ist, keine Friend Bitmap hat und nur mein Task darauf zugreift.
D.h. Picasso wird sie wohl kaum swappen, weil sie sowieso im RAM liegt, und andere Tasks funken mir nicht dazwischen.

Gelockt halten ist halt für mich blöd, weil dann der Debugger dort nicht unterbrechen darf, und somit kann ich meine GFX operationen nicht debuggen.


Wenn Du garantieren kannst, daß die Bitmap nicht "aus Versehen" in die RTG-Mangel gerät, dann brauchst Du eigentlich auch nicht zu locken. Sicherer wäre aber wohl ein "Debug-Build", bei dem das Locking nur für Deine Debugging-Arbeit deaktiviert wird.

Grüße

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:45 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
Soll ich nun gelockt halten oder nicht ?


Es kommt drauf an was du damit machst, die Displayproperties (Größe, Tiefe) werden sich sicherlich nicht ändern, auf den Bildschirmspeicher ansich darfst du nur innerhalb eines Lock()/Unlock() konstrukts zugreifen.

So 100% weiß ich das zwar nicht, aber es kann durchaus möglich sein, dass selbst eine Offscreen Bitmap in neueren OS-Versionen geswappt werden kann zumindestens dann wenn du AllocBitmap() verwendest. Dem kannst du zwar dadurch aus dem Weg gehen, dass du die Bitmap per Hand erzeugst, aber außerhalb von NON-RTG ist dass sowieso nicht gestattet.

z.Z. wird es aber bei Offscreen-Maps kein Problem machen, den zeiger auf den eigentlichen Speicher auch außerhalb von Lock()/UnLock() zu verwenden, aber dann muß man damit Rechnen dass irgendwann Probleme auftauchen könnten.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:45 Uhr

malte2
Posts: 148
Nutzer
@DariusBrewka:

Die Grafiksysteme enthalten CPU Routinen, die den Amiga Blitter emulieren können.

@bubblebobble

Wenn Du die BitMap blittest (mit BltBitMap), so kann sie auch im Videoram landen. Daher ist LockBitMap() sicherer. Es gibt noch UserPrivate BitMaps bei p96 aber die IIRC funktionieren nicht korrekt.



Bzgl. Interleaved BitMaps:

Wenn die Quellbitmap interleaved ist, so muß auch die Maske interleaved sein. Das heißt, bei 4 Bit Tiefe muß jede Zeile der Maske 4x wiederholt werden bevor die nächste Zeile kommt. BltMaskBitMap() benötigt sie so.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:53 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von whose:
Und was, wenn die 4Bit-Maske auch interleaved vorliegt?


4 Bit Masken? soetwas kenne Ich nicht und bin mir auch sicher dass es die nicht gibt.

darum

Zitat:
Wie Holger schon ausführte, ist die 1Bit-Maske so oder so "nicht interleaved". Wichtig ist nur, was BltMaskBitMapRastPort() draus macht.

es gibt kein Interleaved bei 1 Bit, Interleaved heißt nur dass die Zeilen ineinander Verschränkt sind und darum man den Blitter nur einmal starten muß und nicht Depth mal (unter Anpassung der MODULU Werte des Blitters) d.h.

interleaved:
zeile 1 plane 1
zeile 1 plane 2
zeile 1 plane 3
zeile 2 plane 1
zeile 2 plane 2
zeile 2 plane 3
zeile 3 plane 1
zeile 3 plane 2
zeile 3 plane 3

non-interleaved:
zeile 1 plane 1
zeile 2 plane 1
zeile 3 plane 1
zeile 1 plane 2
zeile 2 plane 2
zeile 3 plane 2
zeile 1 plane 3
zeile 2 plane 3
zeile 3 plane 3

wenn du nur eine Plane hast ist kein Unterschied zw. Interleaved und non-interleaved

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 17:58 Uhr

bubblebobble
Posts: 707
Nutzer
Sind den interleaved Bitmaps gebräuchlich ?
Welches System verwendet das ?

Den Raw Pointer frage ich vor jeder Operation neu an. Sollte die bitmap also zwischenzeitlich geswapped worden sein ist das kein Problem.
Nur während ich operationen auf der Bitmap ausführe, halte ich sie dann nicht gelockt. In der gleichen Zeit passiert aber auch nichts anderes mit der Bitmap. Ich denke das ist einigermassen sicher.
Vielleicht regle ich das auch mit einem Debug Switch.

Die Bitmap auf der ich male benutze ich nicht zum Blitten, nur die eingangs erwähnte Shadow Bitmap. Auf die greife ich aber niemals direkt zu, da ich ja das Screenformat nicht kenne.

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

05.09.2006, 18:07 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von malte2:
@DariusBrewka:

Die Grafiksysteme enthalten CPU Routinen, die den Amiga Blitter emulieren können.


KÖNNEN?, das System bietet mir auch die Möglichkeit den Blitter Hardwaremäßig zu Programmieren (z.B. OwnBlitter()) und Ich als User will mich darauf Verlassen, dass mir Sachen so liefert wie Ich sie Brauche, d.h. Speicher im CHIP-RAM wenn ich AllocRaster() nutze, aber liess dir mal die P96 Doku durch wo P96 seine Maps ablegt und was P96 Defaultmäßig mit dem Blitter macht.

Zitat:
Wenn die Quellbitmap interleaved ist, so muß auch die Maske interleaved sein. Das heißt, bei 4 Bit Tiefe muß jede Zeile der Maske 4x wiederholt werden bevor die nächste Zeile kommt. BltMaskBitMap() benötigt sie so.

wo steht das?

zitat:

Zitat:
pointer to the single bit-plane mask, which must be the
same size and dimensions as the planes of the
source bitmap.


Ob das in der Realität anders ist weiß Ich nicht, wäre meines Erachtens völlig hirnrissig. Und was noch hinzukommt, ich kann z.B. mir eine Maske von Icons erstellen lassen und diese Funktioniert sowohl auf Interleaved als auch auf non-interleaved Maps was deiner Theorie völlig wiederspricht. Guigfx liefert auch Masken, die sowohl mit interleaved als auch mit non-interleaved Maps klarkommen.

Komisch oder?

[ Dieser Beitrag wurde von DariusBrewka am 05.09.2006 um 18:17 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:15 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von DariusBrewka:
Zitat:
Original von whose:
Und was, wenn die 4Bit-Maske auch interleaved vorliegt?


4 Bit Masken? soetwas kenne Ich nicht und bin mir auch sicher dass es die nicht gibt.


Eine Maske für eine Quellbitmap -> 4Bit, interleaved. Siehe dazu malte2s Posting.

Zitat:
Zitat:
Wie Holger schon ausführte, ist die 1Bit-Maske so oder so "nicht interleaved". Wichtig ist nur, was BltMaskBitMapRastPort() draus macht.

es gibt kein Interleaved bei 1 Bit, Interleaved heißt nur dass die Zeilen ineinander Verschränkt sind und darum man den Blitter nur einmal starten muß und nicht Depth mal (unter Anpassung der MODULU Werte des Blitters) d.h.

...

wenn du nur eine Plane hast ist kein Unterschied zw. Interleaved und non-interleaved


Eben. Das schrieb Holger schon und ich habs nochmal wiederholt. Allerdings gibt es den Unterschied, daß die Maske für Blits von Interleaved-Bitmaps entsprechend angelegt werden muß, also im "Notfall" mit entsprechend vielen Wiederholungen einer nicht-interleaved vorliegenden 1Bit-Bitmap (was man rechnerisch als interleaving interpretieren kann).

Genau das beschreiben die Autodocs in Form von "die Formate (interleaving oder nicht) der Bitmaps für einen Maskenblit müssen übereinstimmen". Und BltMaskBitmapRastport() macht dann erst ein brauchbares Ergebnis draus.

Über das Thema hats ellenlange Threads im Usenet gegeben, die man auch heute noch dank Google nachlesen kann. Deswegen arbeite ich z.B. nur noch via AllocBitmap() mit Depth = 1 und friend.

Übrigens funktionieren einige WB-Gag-Programme nicht unbedingt, die sich die Masken "selberbasteln". Es hängt halt davon ab, wie die Screen-Bitmap angelegt wurde. Interleaved kommt doch immer noch eher selten vor für den WB-Screen.

Grüße

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:20 Uhr

malte2
Posts: 148
Nutzer
@DariusBrewka:

Bei direkter HW Programmierung müssen die BitMaps natürlich im ChipRam liegen, nur kein normaler Mensch benutzt heute noch den Blitter direkt. Schon wegen der RTG Kompatiblität...

P96 kann, je nach Konfigurationseinstellung, die Daten auch im Fastram ablegen und den Amiga Blitter komplett abschalten (genaugenommen einfach nicht nutzen). Unabhängig von den Einstellungen wird der Speichertyp immer vorher geprüft und ggf. die CPU verwendet.

Was BltMaskBitMapRP() angeht, so fehlt der Hinweis in den Autodocs. Man könnte es auch als Fehler in der Routine deuten... Die Implementation ist auf jedenfall so, daß die Maske interleaved sein muß, wenn die Quelle Interleaved ist.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:23 Uhr

bubblebobble
Posts: 707
Nutzer
@Darius

Wie erhält man denn die Maske von einem Icon ?
Würde mich interessieren. Bisher komme ich nur an die Bitmap, und nehme die Hintergrundfarbe als transparent an, was aber nicht immer stimmt. Ausserdem würde ich ein Icon gerne in 24bit konvertieren, ohne einen Screen dazu zu benötigen und ohne es unnötig zu remappen.


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

05.09.2006, 18:27 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
Sind den interleaved Bitmaps gebräuchlich ?
Welches System verwendet das ?


Das gibt's nur auf Systemen die Plane Basierend sind. Wenn du jetzt ein Image was non-interleaved ist auf eine Non-Interleaved Map kopierst muß der Blitter DEPTH mal aufgerufen werden, d.h. für jede Plane einzeln und dazwischen immer warten bis die Aktion abgeschlossen ist.

z.B.

CopyMap(plane1_src, plane1_dst,w,h);
WaitBlitter()
CopyMap(plane2_src, plane2_dst,w,h);
WaitBlitter()
CopyMap(plane3_src, plane3_dst,w,h);
WaitBlitter() //muss abernicht sein

daraus resultiert auch manchmal das Flackern das auftritt weil die Planes nacheinander kopiert werden.

Bei interleaved gibt es keine einzelnen Planes sondern zuerst kommen die 1ten Zeilen aller Planes dann die zweiten usw.

Siehe Schema oben, das hat den Vorteil, dass der Blitter nur einmal gestartet werden muss (aber die Höhe ist dann DEPTH mal so groß) und man nicht unbedingt warten muß, außerdem entfällt das Farbflackern.

Nachteile sind aber z.B. dass man nicht DEPTH Kleine Planes hat, sondern eine DEPTH mal so große, der entsprechende Speicherbereich also am Stück vorliegen muß und z.B. auch dass man nicht so einfach eine Plane weglassen kann.

Auf RTG Systemen gibt's das garnicht.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:28 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von DariusBrewka:

Zitat:
pointer to the single bit-plane mask, which must be the
same size and dimensions as the planes of the
source bitmap.


Ob das in der Realität anders ist weiß Ich nicht, wäre meines Erachtens völlig hirnrissig.


Nein, gar nicht. Beachte das (an und für sich unbedeutende) Wörtchen "Dimensions", dann kennst Du den Grund. Eine Interleaved-Bitmap von 4Bit Tiefe ist im Speicher 4 mal "höher" als die letztlich resultierende Pixelmenge. Die Maske paßt dann zwar in der Breite, aber die "Zwischenzeilen" würden fehlen, wenn die Maske nicht 4 mal "höher" wäre.

Da arbeitet der Blitter ja auch bei der Quellbitmap quasi auf Bitebene und nicht auf Byte- oder Halbbyte-Ebene, wie bei non-interleaved Bitmaps.

Wie legst Du denn die Masken für die Icons an? Platt mit AllocRaster() oder AllocBitmap() und Screen als friend? Und wie macht guigfx das genau?

Grüße

--
---

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


[ Dieser Beitrag wurde von whose am 05.09.2006 um 18:35 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:33 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von whose:
Genau das beschreiben die Autodocs in Form von "die Formate (interleaving oder nicht) der Bitmaps für einen Maskenblit müssen übereinstimmen". Und BltMaskBitmapRastport() macht dann erst ein brauchbares Ergebnis draus.


Zitat oben: und in den Autodocs die Ich habe steht von soetwas garnichts.

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:37 Uhr

bubblebobble
Posts: 707
Nutzer
Und benutzt jemand tatsächlich interleaved Bitmaps, oder ist das mehr eine teoretische Diskussion ?
Mir ist das relativ egal, weil meine Soft auf 1GHz+ Rechner abzielt, und dort hat man in der Regel Hi/True Color. Minimum Config sollte ein e60er sein mit Graka.
Ich meine so Dinge wie Alphablitten, transparenz, Beleuchtung etc. auf einem 8 Farb Screen macht einfach keinen Sinn.
Natürlich wäre es schön wenn es auf wirklich allen System läuft, aber der Aufwand rechtfertigt das nicht.
--
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 - ]

05.09.2006, 18:40 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von DariusBrewka:
Zitat:
Original von whose:
Genau das beschreiben die Autodocs in Form von "die Formate (interleaving oder nicht) der Bitmaps für einen Maskenblit müssen übereinstimmen". Und BltMaskBitmapRastport() macht dann erst ein brauchbares Ergebnis draus.


Zitat oben: und in den Autodocs die Ich habe steht von soetwas garnichts.


Dann stehts halt im RKM... Fakt ist, dieses Zitat ist aus den Entwicklerunterlagen und es hat wohl seine Berechtigung.

Mir ist es jedenfalls noch nicht gelungen, einen Blit einer Interleaved-Bitmap mit einer Nicht-Interleaved-Maske hinzukriegen, der vernünftig aussah. Aber für RTG-Systeme ist das eh nicht mehr von Belang, solche Spezialitäten gibts dort ja nicht.

Grüße

--
---

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

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:48 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von bubblebobble:
@Darius
Wie erhält man denn die Maske von einem Icon ?
Würde mich interessieren. Bisher komme ich nur an die Bitmap, und nehme die Hintergrundfarbe als transparent an, was aber nicht immer stimmt. Ausserdem würde ich ein Icon gerne in 24bit konvertieren, ohne einen Screen dazu zu benötigen und ohne es unnötig zu remappen.


Das ist eine Hochkomplizierte Angelegenheit bei der mein Programm manchmal auch versagt.

Für Masken gibt's unter OS3.5/9 die Funktion IconControlA() und das entspechende Tag, aber zu denken das wäre einer Eierlegendewollmilchsau wird dich bei 80% der Icons enttäuschen, da das nur für Native Icons (= OS3.5/9 Icons gilt), das Alles ist su umständlich, nur mit PNG Icons ist das sehr sehr einfach unter OS3.5/9, da kannst du direkt ARGB haben (aber leider nur für PNG Icons, Konvertiert wird nix).


[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:48 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von bubblebobble:
Und benutzt jemand tatsächlich interleaved Bitmaps, oder ist das mehr eine teoretische Diskussion ?


Das ist wohl eher theoretisch. Benutzt wurde dieses Feature wohl hauptsächlich für Spiele, mit OS-Mitteln angelegte Screens sind nicht "von Haus aus" interleaved.

Zitat:
Mir ist das relativ egal, weil meine Soft auf 1GHz+ Rechner abzielt, und dort hat man in der Regel Hi/True Color. Minimum Config sollte ein e60er sein mit Graka.
Ich meine so Dinge wie Alphablitten, transparenz, Beleuchtung etc. auf einem 8 Farb Screen macht einfach keinen Sinn.
Natürlich wäre es schön wenn es auf wirklich allen System läuft, aber der Aufwand rechtfertigt das nicht.


Eigentlich ist es mit der Blitterei und Interleaved-Bitmaps nicht so schwer. Es kann halt nur sein, daß Du eine temporäre Maske anlegen mußt, die im passenden Format für die Quellbitmap vorliegt. Mittels AllocBitmap() kann man das erreichen.

Die Methode funktioniert einwandfrei sowohl auf RTG- als auch AGA-Systemen. Wobei ich sagen muß, daß ich mein Testprogramm nur einmal wissentlich auf einem Screen mit Interleaved Bitmap habe laufen lassen.

Laut den Postings auf comp.sys.amiga.programmer sollte das aber so funktionieren. Unabhängig vom Grafiksystem.

Grüße

--
---

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


[ Dieser Beitrag wurde von whose am 05.09.2006 um 18:50 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

05.09.2006, 18:56 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Zitat:
Original von whose:
Zitat:
Original von bubblebobble:
Und benutzt jemand tatsächlich interleaved Bitmaps, oder ist das mehr eine teoretische Diskussion ?


Das ist wohl eher theoretisch. Benutzt wurde dieses Feature wohl hauptsächlich für Spiele, mit OS-Mitteln angelegte Screens sind nicht "von Haus aus" interleaved.


Also Ich kann hier bei PSI (MUIs Screen Tool) Interleaved einschalten, aber außerhalb von Planaren Screens wird das keine Funktion haben.


[ - Antworten - Zitieren - Direktlink - ]


1 2 -3- 4 5 6 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Bitmaps nur durch 16 teilbare Breite? [ - Suche - Neue Beiträge - Registrieren - Login - ]


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