ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > GA_BackFill | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- 2 | [ - Beitrag schreiben - ] |
27.07.2009, 08:35 Uhr AGSzabo Posts: 1663 Nutzer |
hilfe, bei mir bewirkt das gadget-attribut GA_BackFill OFF zu setzen nichts! das colorwheel soll natürlich um sich herum die bestehende hintergrundfarbe durchlassen, so wie im farb-voreinsteller der pattern durchgelassen wird. siehe bild wie es NICHT sein soll: http://otaku.onlinehome.de/xui.png -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 27.07.2009 um 08:38 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
27.07.2009, 09:13 Uhr thomas Posts: 7718 Nutzer |
Zitat: Natürlich nicht. Off bzw. NULL ist ja der Default. Das Gadget benutzt EraseRect um den Hintergrund zu löschen. Dabei zieht ein evtl. installierter Backfill-Hook. Ist keiner installiert, wird der Bereich mit Farbe 0 gefüllt. Wenn du etwas anderes möchtest, mußt du einen entsprechenden Hook übergeben. Wie Hooks im Allgemeinen funktionieren, findest du bei der Beschreibung von utility.library/CallHookPkt und in den Kommentaren von utility/hooks.h. Wie ein Backfill-Hook im speziellen programmiert wird, findest du bei layers.library/InstallLayerHook. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
27.07.2009, 10:09 Uhr AGSzabo Posts: 1663 Nutzer |
@thomas: das mit der null finde ich verwirrend es geht ja so oder so nicht egal ob null oder 1. aber aus den docs habe ich folgende lösung ausgegraben: code:move.l layersbase(pc),a6 move.l wd_WLayer(a0),a0 move.l #LAYERS_NOBACKFILL,a1 jsr -198(a6) ;InstallLayerHook das mache ich einmal geich nach dem öffnen des fensters und das problem ist fuer alle faelle erledigt. ich muss es nichtmal wider reuckgeaengig machen wenn ich das fenster schliesse. danke, Andreas ps: in meinen includes fehlen einige routinendefinitionen, daher schreibe ich die offsets manchaml direkt hin. -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 27.07.2009 um 10:11 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
27.07.2009, 14:14 Uhr AGSzabo Posts: 1663 Nutzer |
oops, jetzt hab ich noch ein änliches roblem: ich zeichne ein Symbol mit DrawImage() aber es wird immer der Hintergrund mit farbe 0 überschrieben. es soll natürlch der hintergrund bleiben wie er ist, oder in der farbe gerendert werden die ich angebe. ps: SetABPenDrMd() hab ich schon ausgetestet. mehr noch: der haken wird immer in schwarz gerendert. schwarz auf grau. und btw, wie fülle ich mit einer "trueoclor-kachel"? -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 27.07.2009 um 14:19 Uhr geändert. ] [ Dieser Beitrag wurde von AGSzabo am 27.07.2009 um 15:28 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
28.07.2009, 12:36 Uhr thomas Posts: 7718 Nutzer |
@AGSzabo:Zitat: Ein herkömmliches Image ist immer ein Rechteck. Transparenz gibt es da nicht. Das mit der Hintergrundfarbe könntest du evtl. mit PlanePick und PlaneOnOff hinbekommen, aber das beeinflußt auch die Farben des Symbols. Wenn du echte Transparenz brauchst, dann mußt du es schon selber zeichnen. Üblicherweise würde man sich dafür ein BOOPSI-Image programmieren, dann könnstest du weiterhin DrawImage oder DrawImageState benutzen. Du kannst aber der Einfachheit halber auch deine eigene Zeichenroutine aufrufen. Wenn deine GUI fontsensitiv sein soll, dann solltest du die Symbole ohnehin als Vektorgrafiken realisieren, die du beliebig skalieren kannst. Zitat: Was verstehst du unter einer Truecolor-Kachel ? Bitmaps kannst du einfach mit BltBitMapRastPort in dein Fenster zeichnen. Für den Fensterhintergrund würde man sinnvollerweise wieder auf einen Backfill-Hook zurückgreifen (einen echten, nicht LAYERS_NOBACKFILL). Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
28.07.2009, 15:32 Uhr AGSzabo Posts: 1663 Nutzer |
@thomas: > Was verstehst du unter einer Truecolor-Kachel ? Bitmaps kannst du einfach mit BltBitMapRastPort in dein Fenster zeichnen. ja, bitmaps, zb eine von platte geladene muster. man müsste mit offsets arbeiten damit verschiedene rechtecke zusammen passen, zb der tabs inahlt-hintergrund und der tabs-griffe hitenrhgrund. evtl mit datatypes? > Für den Fensterhintergrund würde man sinnvollerweise wieder auf einen Backfill-Hook zurückgreifen (einen echten, nicht LAYERS_NOBACKFILL). unter os4.1 funzt der pseudo-hook anscheinend nicht oder anders. -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 28.07.2009 um 15:34 Uhr geändert. ] [ Dieser Beitrag wurde von AGSzabo am 28.07.2009 um 15:36 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 08:43 Uhr AGSzabo Posts: 1663 Nutzer |
@thomas ich lese gerade deine datatypes beispielsources und rätsele ob ich platz für die bitmap- und bitmapheader strukturen reservieren muss oder blos zeiger darauf. oder muss ich diese strukturen auch initialisieren? mit c kenne ich mich kaum aus. -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 12:28 Uhr Thore Posts: 2266 Nutzer |
@AGSzabo: Probiers mal nur mit Pointer aus, Du wirst es dann direkt bemerken ob Du Speicher reservieren musst oder nicht Programmieren lernt man auch durch Aha-Effekte beim selber Ausprobieren. Und das hilft oft mehr weiter als bereits vorgekauter Code. Wenn Du Dir unsicher bist, mach ein Backup von deinem Programm, änder es ab und starte es einfach (oder RAM Disk für den kurz abgeänderten Testcode verwenden). Den Computer kannst du normalerweise nicht zerstören dadurch, höchstens neu Booten ist drin (Naja außer man programmiert Videomodi und verpasst dem Monitor ungesunde Frequenzen *g*) [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 12:33 Uhr AGSzabo Posts: 1663 Nutzer |
@Thore: was glaubst du wieviel aha-effekte ich schon erlebt habe und wievel backups ich täglich mache schritt für schritt! aber seit es schokolade gibt, eh ich meine flachbildschirme gibt, sind die frequenzmäßig unkaputtbar! -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 12:43 Uhr Thore Posts: 2266 Nutzer |
Und welchen Aha-Effekt hast Du mit der Bitmap und BMHD Struktur erzielt? =) [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 12:55 Uhr AGSzabo Posts: 1663 Nutzer |
@Thore: es spricht auch in diesem fall ueberhaupt nix dagegen wenn ich auf die antwort von thomas warte, der diese sources anbietet. es muss nicht alles immer selbst erfunden werden, bis auf das rad natürlich ... obwohl, ich verwende ja das boopsi-teil... -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 13:55 Uhr Thore Posts: 2266 Nutzer |
Bei der Standard API für Datatypes erfindest Du nichts neu, sondern lernst, wie man damit umgeht =) Aber ich kann Dir die Lösung verraten: Pointer sind richtig. GetDTAttrs liefert Dir den Pointer der entsprechenden bitmap oder bmhd zurück, welches dem angegebenen Datatype-Objekt angehörig ist. Über DisposeDTObject wird dann das Objekt wieder gelöscht und mit ihm seine angehängten Strukturen, bmhd und bitmap müssen/dürfen also nicht manuell gefreed werden. Ich hoff Du weißt wie man in Assembler mit Taglisten umgeht. Falls ich Müll erzählt hab, korrigiert mich bitte mit 10 Peitschenhieben. [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 13:59 Uhr AGSzabo Posts: 1663 Nutzer |
@Thore: >Bei der Standard API für Datatypes erfindest Du nichts neu, sondern lernst, wie man damit umgeht =) jaa >Aber ich kann Dir die Lösung verraten: mann bist du fies! >Ich hoff Du weißt wie man in Assembler mit Taglisten umgeht. xui verwendet verschachtelte taglisten zu erzeugen von objektbäumen. -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 15:58 Uhr AGSzabo Posts: 1663 Nutzer |
OK, ich habe datatypes als mittel zum backfill eingebaut wie im source von thomas erklärt. nur leider wird das bild immer auf ganz wenige farben runtergemappt, egal ob ich das Tag "remap" setzte oder nicht. mein screen ist aber sehr viel farbtief, es müsste die bitmap in viel mehr farben angezeigt werden. ps, die "message" die an das obj mit DoMethod gesendet wird verstehe ich nicht. was macht das? wo finde ich die erklärt? ich hab schon in diversen includes gesucht... -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 29.07.2009 um 16:59 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 17:08 Uhr thomas Posts: 7718 Nutzer |
"Ganz wenige Farben" und "sehr viel farbtief" sind natürlich sehr präzise Angaben, da kann man genau erkennen, was du meinst. Die Zusammenhänge sind wie folgt: Mit PDTA_Remap = FALSE bekommst du das Bild im Original, ohne daß die Farben verändert werden. Es wird wird nur ggf. auf 8 Bitplanes und 256 Farben heruntergerechnet, um mit "älteren" Programmen kompatibel zu sein. Mit PDTA_Remap = TRUE wird das Bild in das Pixelformat und die Farbtiefe des Bildschirms umgerechnet, aber natürlich nur, wenn ein Bildschirm mit PDTA_Screen übergeben wurde. Um dein Programm als "neueres" Programm zu kennzeichnen, das auch mit Truecolor-Bitmaps umgehen kann, mußt du PDTA_DestMode = PMODE_V43 setzen, sonst bekommst du immer planare Bitmaps mit max. 256 Farben. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
29.07.2009, 17:22 Uhr AGSzabo Posts: 1663 Nutzer |
@thomas: >PDTA_DestMode = PMODE_V43 danke, jetzt gehts. schade dass du das nicht in deinem source erwähnt hast... -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 11:10 Uhr AGSzabo Posts: 1663 Nutzer |
BLIT TILES ROUTINE hi, diese monster-routine soll rechteckige bereiche mit einem bild füllen, so dass verschiedene rechtecke trotzdem vom muster her nahtlos aneinander passen. das bedeutet zB dass am linken oberen rand mit offests gearbeitet wird. leider füllt sich in manchen fällen der bereich nicht ganz, siehe bild: http://otaku.onlinehome.de/xuierror.jpg wer kann mir einen tip geben? diese anfrage ist natürlich vollkommen auf freiwilliger basis! wer will der schaut sich das an, wer nicht will lässt es bleiben. wer den fehler findet wird im readme genannt, genau wie bei der value-to-dez routine und der listsort-routine! mfg, Andreas code:_xuiImageFill ; d0-d3 left, top, right, bottom ; a0 bitmap ; a1 rastport > must all be valid, no testing ; a2 bitmapheader / movem.w d0-d7,-(a7) pushm a0/a1 move.l gfxbase(pc),a6 STRUCTURE ImageFillHelp,0 UWORD ifh_width UWORD ifh_height UWORD ifh_1stxoffset UWORD ifh_1styoffset UWORD ifh_restx UWORD ifh_resty UWORD ifh_xrepeats UWORD ifh_yrepeats UWORD ifh_currentx UWORD ifh_currenty LABEL ifh_SIZEOF APTR ifh_bitmap APTR ifh_rastport UWORD ifh_left UWORD ifh_top UWORD ifh_right UWORD ifh_bottom lea -ifh_SIZEOF(a7),a7 ; startpunkt festlegen move.w d0,ifh_currentx(a7) move.w d1,ifh_currenty(a7) ; left und top offset berechnen, damit ; mehrere gefüllte flächen nahtlos zusammen passen moveq #0,d4 move.w d0,d4 divu.w bmh_Width(a2),d4 swap d4 move.w d4,ifh_1stxoffset(a7) moveq #0,d5 move.w d1,d5 divu.w bmh_Height(a2),d5 swap d5 move.w d5,ifh_1styoffset(a7) ; höhe und breite, zahl der widerholungen und restgröße berechnen sub.w d0,d2 addq.w #1,d2 move.w d2,ifh_width(a7) moveq #0,d6 move.w d2,d6 move.w bmh_Width(a2),d2 clr.w ifh_xrepeats(a7) sub.w d2,d6 blt.b .set_rx add.w ifh_1stxoffset(a7),d6 divu.w d2,d6 move.w d6,ifh_xrepeats(a7) swap d6 .set_rx move.w d6,ifh_restx(a7) sub.w d1,d3 addq.w #1,d3 move.w d3,ifh_height(a7) moveq #0,d7 move.w d3,d7 move.w bmh_Height(a2),d3 clr.w ifh_yrepeats(a7) sub.w d3,d7 blt.b .set_ry add.w ifh_1styoffset(a7),d7 divu.w d3,d7 move.w d7,ifh_yrepeats(a7) swap d7 .set_ry move.w d7,ifh_resty(a7) ; init x- and yrepcount moveq #0,d6 moveq #0,d7 .loop move.w bmh_Width(a2),d4 move.w bmh_Height(a2),d5 move.w ifh_1stxoffset(a7),d0 move.w ifh_1styoffset(a7),d1 tst.w d6 bne.b .no_xoffset sub.w d0,d4 bra.b .if_yoffset .no_xoffset moveq #0,d0 .if_yoffset tst.w d7 bne.b .no_yoffset sub.w d1,d5 bra.b .offsets_ok .no_yoffset moveq #0,d1 .offsets_ok ; nur noch ein rest übrig? cmp.w ifh_xrepeats(a7),d6 ble.b .not_restx move.w ifh_restx(a7),d4 .not_restx cmp.w ifh_yrepeats(a7),d7 ble.b .not_resty move.w ifh_resty(a7),d5 .not_resty ; test fit cmp.w ifh_width(a7),d4 ble.b .if_higher move.w ifh_width(a7),d4 .if_higher cmp.w ifh_height(a7),d5 ble.b .size_ok move.w ifh_height(a7),d5 .size_ok ; left top im dest-rastport move.w ifh_currentx(a7),d2 move.w ifh_currenty(a7),d3 movem.l ifh_SIZEOF(a7),a0/a1 push d6 move.b #$C0,d6 jsr _LVOBltBitMapRastPort(a6) pop d6 ; advance x add.w d4,ifh_currentx(a7) addq.w #1,d6 move.w ifh_xrepeats(a7),d2 addq.w #1,d2 cmp.w d2,d6 ble.b .loop ; reset xpos to left move.w ifh_left(a7),ifh_currentx(a7) moveq #0,d6 ; advance y add.w d5,ifh_currenty(a7) addq.w #1,d7 move.w ifh_yrepeats(a7),d3 addq.w #1,d3 cmp.w d3,d7 ble.b .loop lea ifh_SIZEOF(a7),a7 popm a0/a1 movem.w (a7)+,d0-d7 rts -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 12:15 Uhr Mad_Dog Posts: 1944 Nutzer |
Zitat: Wozu diese Offsets? Wenn Du rechteckige Kacheln hast, kannst Du diese doch ohne Tricks nahtlos aneinanderfügen. Für den Fall, daß ein zu blittendes Bitmap an einem Rand abgeschnitten werden soll, gibts die Funktion ClipBlit: http://w3.norman-interactive.com/C-Kurs_8_9.html -- http://www.norman-interactive.com [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 12:40 Uhr AGSzabo Posts: 1663 Nutzer |
@Mad_Dog: eh, tolle homepage, wirklich, aber ich fürchte mein anliegen ist nicht richtig rübergekommen. ich weis aber auch nicht wie ich es jetzt beschreiben soll. aber vielleich verstet es ja noch jemand. ich überlege derweil ... -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 13:20 Uhr thomas Posts: 7718 Nutzer |
@Mad_Dog:Zitat: Stell dir vor, du möchtest die Flächen von (0,0)-(99,99) und von (100,50)-(199,149) mit dem gleichen Muster füllen, das Muster ist sagen wir mal 45 Pixel breit und an der Nahtstelle, also von (100,50) bis (100,99) sollen die Muster aneinander passen. Dann mußt du mit Offsets arbeiten. @AGSzabo: Ich weiß nicht, ob es dir hilft, aber hier ist eine funktionierende Backfill-Funktion: code:void backfill_funct (struct Hook *hook,struct RastPort *rp,struct BackfillMsg *msg) { struct BitMap *srcbm = ((struct bminfo *)hook->h_Data)->bm; long srcw = ((struct bminfo *)hook->h_Data)->w; long srch = ((struct bminfo *)hook->h_Data)->h; long srcx0 = msg->offsetx % srcw; long srcy0 = msg->offsety % srch; struct BitMap *destbm = rp->BitMap; long destx0 = msg->bounds.MinX; long desty0 = msg->bounds.MinY; long destx1 = msg->bounds.MaxX + 1; long desty1 = msg->bounds.MaxY + 1; long srcx,srcy; long destx,desty; long blitw,blith; desty = desty0; srcy = srcy0; while (desty < desty1) { blith = min(desty1 - desty,srch - srcy); destx = destx0; srcx = srcx0; while (destx < destx1) { blitw = min(destx1 - destx,srcw - srcx); BltBitMap(srcbm,srcx,srcy,destbm,destx,desty,blitw,blith,0xc0,0xff,NULL); destx += blitw; srcx = (srcx + blitw) % srcw; } desty += blith; srcy = (srcy + blith) % srch; } } Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 13:46 Uhr AGSzabo Posts: 1663 Nutzer |
@thomas: >Stell dir vor, du möchtest die Flächen von (0,0)-(99,99) und von (100,50)-(199,149) mit dem gleichen Muster füllen, das Muster ist sagen wir mal 45 Pixel breit und an der Nahtstelle, also von (100,50) bis (100,99) sollen die Muster aneinander passen. Dann mußt du mit Offsets arbeiten. genau meine rede.:-) >Ich weiß nicht, ob es dir hilft, aber hier ist eine funktionierende Backfill-Funktion: ich hoffe die hast du jetzt nicht extra für mich geschrieben weil ich sie nämlich kaum verstehe (mein problem mit c). aber ich versuche es mal. ein hinweis was an meiner routine falsch ist würde mir besser helfen. ich brauche auch dieses backfill-hook dingens nicht. mir ist auch nicht klar warum dein code BlitBitmap statt meinem BltBitmapRastport benutzt... also wie gesagt, ich versuche es zu verstehen bis vielleicht eine direkte antwort kommt. -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 13:48 Uhr Thore Posts: 2266 Nutzer |
@AGSzabo: Dein Code: moveq #0,d4 move.w d0,d4 divu.w bmh_Width(a2),d4 swap d4 move.w d4,ifh_1stxoffset(a7) Kleine Anmerkungen: moveq schreibt meines Wissens nur 8 Bit, die restlichen 24 Bit bleiben unberührt. move.w d0,d4 schreibt 16 Bit, die vorderen 16 bit bleiben unberührt d4 sollte daher besser mit clr.l d4 oder move.l #0,d4 geleert werden. Dein Register-Retten geht hier auch nur auf Word, am besten machst Du hier longword, da Du z.B. swap verwendest, was 2 Words eines Registers tauscht. Nur so als kleine Hinweise. Möglicherweise behebt das dein Problem nicht, könnte aber andere Fehlerquellen ausschließen. [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 14:23 Uhr AGSzabo Posts: 1663 Nutzer |
@Thore: moveq macht langwort sagt mein 68k referenzbuch. das weis ich schon lang. die register hab ich jetzt mal besser gerettet. danke! ps: umgebungsbedignt um den aufruf der routine herum waren die datenregister nur bis bit 16 verwendet... -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 31.07.2009 um 14:25 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 16:19 Uhr Thore Posts: 2266 Nutzer |
Ups ja moveq kopiert zwar nur ein Byte, aber leert die übrigen Bits. Sorry mein Fehler. Aber das swap tauscht die ersten 16 Bit mit den anderen 16 Bit, da wird also das komplette Register verwendet. [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 17:29 Uhr AGSzabo Posts: 1663 Nutzer |
es passt etwas in diesen thread: wenn ich unter os4 mein window resize (68k emuliertes prog) staut sich eine menge von IDCMP_NEWISZE messages auf und das fenster ist beim loslassen des mausbuttons noch eine weile mit den aufgestauten messages beschäftigt. wie kann ich das vom programm aus abwehren ohne es systemweit abzuschalten? wie macht man das normalerweise? -- e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 31.07.2009 um 17:30 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 20:47 Uhr thomas Posts: 7718 Nutzer |
Üblicherweise hat man im Hauptprogramm zwei geschachtelte Schleifen, die das Fenster behandeln. Die äußere Schleife hat als Bedingung einen Schalter, der besagt, ob das Programm weiterlaufen soll oder nicht. Sie enthält das Warten auf den Message-Port und die innere Schleife. Die innere Schleife holt alle Messages ab und behandelt sie, bis keine mehr da sind. Dabei können Sachen, die schnell gehen, sofort behandelt werden und für Sachen, die länger dauern oder endgültig sind, merkt man sich die relevanten Angaben und macht es dann später außerhalb der Schleife. Bei NewSize heißt das, du setzt einfach einen Schalter, daß sich die Fenstergröße geändert hat und nach der inneren Schleife, wenn alle Messages bearbeitet wurden, prüfst du den Schalter und zeichnest den Fensterinhalt neu. Einmal, nicht tausendmal. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
31.07.2009, 20:57 Uhr AGSzabo Posts: 1663 Nutzer |
@thomas: > die zwei schleifen ...genauso mache ich das. nur warte ich am selben port für viele fenster...und weis noch nicht wie ich das machen werde dass der schalter nur für ein fenster gillt, bzw dass ich weis für welches oder welche, falls (unwahrscheinlich) NEWISZEs von verschiedenen fenstern gleichzeitig kommen... ich hatte gehofft dass es vielleicht ein flag oder eine funktion gibt um den ansturm zu beschränken... ps, btw, so smooth wie os4.1 seine nativen fenster beim größeziehen on the fly refresht wird es ein 68k app niemals schaffen, oder? pps: ich hab jezt einen refresh-schalter beim größeändern eingebaut. jetzt hängt der beim zeichnen nicht mehr soooo viek hinterher aber immerhin noch etwas... brauche noch einen anderen trick oder kniff -- Sam os4.1, e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 31.07.2009 um 22:01 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
02.08.2009, 15:36 Uhr AGSzabo Posts: 1663 Nutzer |
hi, ich hab hier nochmal eine verbesserte version der bildausgabe meiner nahtlos-füll-funktion gemacht. vielleicht fällt jetzt jemandem das problem / die lösung auf. http://otaku.onlinehome.de/xuierror.gif und hier die bisherige routine: http://www.amiga-news.de/forum/thread.php?id=31614&BoardID=7#322854 EDIT Jawoll, ich habe das problem in meinem code behoben und den fehler gefunden! grs, Andreas -- Sam os4.1, e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 02.08.2009 um 22:09 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
03.08.2009, 19:28 Uhr AGSzabo Posts: 1663 Nutzer |
hi, noch eine frage zum background. meine tabs-griffleiste merkt sich den hintergund um sich auf einem muster refreshen zu können dass von einem übergeordneten objekt betrieben wird. es weiss also nicht was dahinter ist sondern macht damit get bzw put bevor sich die tabsleiste zeichnet. zum aufnehmen bzw setzen benutzte ich eine bitmap mit einer bittiefe von 8. das scheint aber nicht für jedem fall zu reichen, mehr geht aber anscheinend nicht. was nun? es soll doch ein hintergund in truecolor gemerkt werden. ps: zum transfer der bitmap-inhalte benutze ich ClipBlit(). mgf Andreas -- Sam os4.1, e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110 [ Dieser Beitrag wurde von AGSzabo am 03.08.2009 um 19:42 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
03.08.2009, 20:20 Uhr thomas Posts: 7718 Nutzer |
Am Anfang der Cybergraphics-Autodocs ist eine Abhandlung über Bitmaps. Da findest du die Informationen, die du brauchst. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Antworten - Zitieren - Direktlink - ] |
-1- 2 | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > GA_BackFill | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |