Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Bildschirm intelligent klonen (Fehler)
#1
Hallo, habe schon wieder eine Frage. Betrifft evtl. auch AB, falls u.g. nicht funktioniert.

Ich möchte einen Bildschirm öffnen, der den Modus der Workbench und/oder die Farben und Pens der Workbench übernimmt.
Das klappt aber nicht, manchmal friert WinUAE ein, ohne Debugger klappt es schon, aber die Pens von Gadtools stimmen nicht: alle Borders sind schwarz, auch auf 8bit Screens.
Die Farben werden aber korrekt gesetzt! :?
[ab3].openscreen:
;obsolete constants, use #SA_... instead!
#Width=$80000023
#Height=$80000024
#Dpth=$80000025
#Typ=$8000002D
#DisplayID=$80000032
#Overscan=$80000034
#AutoScroll=$80000039
#LikeWorkbench=$80000047
.o__o

;ColorSpec.newtype is index.w/r.w/g/b

Dim myscol.ColorSpec(10) ;255


myscol(0)\ColorIndex= 0,7,7,8 ;grey

myscol(1)\ColorIndex= 1,1,1,1 ;black
myscol(2)\ColorIndex= 2,14,14,14 ;white
myscol(3)\ColorIndex= 3,13,8,0 ;dark orange

myscol(4)\ColorIndex= 5,15,14,2 ;yellow
myscol(5)\ColorIndex= 6,2,10,2 ;green
myscol(6)\ColorIndex= 7,12,2,0 ;red RGB 0,7,7,8 ;grey
myscol(7)\ColorIndex= -1,-1,-1,-1 ;endof array



scrtags\a=#BIDTAG_DesiredWidth,640,#BIDTAG_DesiredHeight,256,#BIDTAG_Depth,3,0,0
; scrtags\a=#BIDTAG_NominalWidth,640,#BIDTAG_NominalHeight,256,#BIDTAG_Depth,3,0,0

res.l=BestModeIDA_(scrtags)
If res=0

ScreenTags1,scrtitle$,#LikeWorkbench,-1,#SA_Colors,&myscol(0),#Width,640,#Height,256,#Dpth,3,0,0

Else

ScreenTags1,scrtitle$,#SA_DisplayID,res,#SA_Colors,&myscol(0),#SA_DetailPen,2,#SA_BlockPen,1,#Width,640,#Height,256,#Dpth,3,0,0

EndIf[/ab3]

Was stimmt hier nicht?
Amiga. Just to let ya know....
Zitieren
#2
P.S.: Euer Web-Parser arbeitet genau so seltsam, wie der vom AmiBlitz:


[ab3]For a=1to10
nop
next a[/ab3]

Code:
For a=1 to 10
  nop
next a

Code:
Screentags1
Code:
Screentags 1

sind jeweils nicht dasselbe....
Amiga. Just to let ya know....
Zitieren
#3
Bei mir funktioniert das mit und ohne Debugger. Auch die Farben sind nicht schwarz, sondern so wie sie sein sollten.

Aus deinem Code ist aber nicht ersichtlich von welchem Type "srctags" ist.
Ich vermute mal deine scrntags Variable hält zu wenige Felder und daher gibt es memtrash.
Probiere das so wie ich:

*scrtags.TagItem = Tags(#BIDTAG_DesiredWidth,640,#BIDTAG_DesiredHeight,256,#BIDTAG_Depth,3)

Was mir noch aufgefallen ist:
1. Du solltest keine System Constanten selbst definieren. Binde in den Compiler settings "all.res" ein und nutze diese.

2. BestModeIDA() funktioniert nicht mit RTG. Du bekommst daher nur ChipSetScreens.
Für RTG würdest du
modeid.l= BestCModeIDTagList_ (Tags(#CYBRBIDTG_NominalWidth,width.l,#CYBRBIDTG_NominalHeight,height.l,#CYBRBIDTG_Depth,dpth.l))
benötgen.

3. Wenn du den Workbench Screen clonen möchtest, solltest du die anderen Attribute wie Tiefe etc. weglassen.

Darf ich fragen, warum du BestModeID() benutzt, wenn du sowieso den WB Screen clonen willst? Dein Code clont den WB Screen eigentlich nie, weil BestModeID() bei deinen Specs immer irgendwas zurückliefert, allerdings im Allgemeinen nicht den WB Mode, sondern einen PAL Screen mit 8 Farben, was für jemanden der eine RTG Workbench z.B. mit AfA Skins installiert hat recht öde aussieht.

Guter Stil wäre es, den WB Screen ohne weitere Angaben zu clonen, also auch ohne eigene Farben. Wenn du Farben in deiner App brauchst, dann hole sie lieber später mit ObtainBestPen(). Dann funktioniert deine App auf jedem CustomScreen, PublicScreen, Workbench Clone oder direkt auf der Workbench. Ist dann völlig egal. Auch die Farbtiefe muss dann nicht mehr 3 oder größer sein.
Zitieren
#4
WB clonen geht fehlerfrei, das geht mit dem üblichen ScreenTags-Befehl.
Ich will eigentlich nicht den WB-Screen clonen, sondern einen eigenen erstellen, der sich nur den ModeID und die Pens von der WB holt.
Ich braucha aber ein Minimummaß, mit dem ich rechnen kann. Wenn ich direkt 640x512 abfrage, dann bekomme ich keine RTG-Screens, weil dieses Maß ungewöhnlich ist. Also sollte dann 640x480 RTG, z.B. 8 Bit rurückgegeben werden durch BestModeID, oder?
Die Tags, die du in 2. nimmst, sind die nur Cybergfx oder auch für Picasso96? Auch schreibst du #NominalWidth, das hat mich im NDK schon verwirrt; eigentlich muß ich doch #DesiredWith nutzen, weil es das ist, das ich will und nicht das, was es gibt?
Und: ist der von dir beschriebene BestCModeIDTagList_ dann wieder nur exklusiv für RTG? Dann stehe ich völlig im Regen; ich will ja nicht selbst entscheiden, welcher Bildschirm zu nehmen ist, ich will einfach den nächstbesten/nächstgrößeren.
Amiga. Just to let ya know....
Zitieren
#5
Picasso ist Cybergfx kompatibel. BestModeID gibt dir keine RTG screens. Die CGX Variante gibt dir alle Scresns, z.B. ein AGA Screen ist ja auch ein CGX Screen, wenn CGX installiert ist.
Es hängt haöt davon ab was dein Zielsystem ist. Ich würde an deiner Stelle nicht mit BesTModeID herumwerkeln, sondern den WB Screen clonen und das Program so machen dass es damit klar kommt. Das wäre die richtige Vorgehensweise.
Wenn jemand seine WB unterhalb deiner Specs laufen lässt, hat er vermutlich eh einen Rechner der deine App nicht wirklich nutzen kann.
Die Größe (und Farbtiefe) des Screens vorzuschreiben halte ich, ausser aus Performance-Gründen bei einem Spiel, für keine gute Idee. Am besten sogar du nutzt direkt die Workbench, dafür ist sie ja da.
Z.b. MUI Apps lassen dich als Programmierer den Screen gar nicht wählen.
Zitieren
#6
Wenn nur darum geht den Screen in seiner Größe einzuschränken, kannst du auch einen Hook schreiben der die Auswahl im Requester
von vornherein beschränkt...
Zitieren
#7
Kannst du nicht einfach den WB Screen clonen und deine App so amchen, dass sie damit zurecht kommt? Seit es Monitore mit festen Auflösungen gibt, gibt es nichts nervigeres als wenn sich die Screenauflösung ändert. Das ist heutzutage nicht der richtige Weg. Wenn die Schrift zu klein ist nimmer man lieber eine größere Schriftart, als den Screenauflösung runterzuregeln.
Zitieren
#8
Nein, das wäre nict so einfach. Es ist ein Copper-Editor. Den pflege ich schon eeewig, aber der basiert halt auf Amiga-Screens. ich kann ihn schon (mit ASLScreenreq) nutzen, aber es wäre schöner automatisch.

*Edit:Typo.
Amiga. Just to let ya know....
Zitieren
#9
Oh, dann willst du eigenlich gar nichts mit P96 und RTG zu tun haben, oder? Wenn es ein Chipset Screen sein muss, dann nutze tatsächlich besser BestModeID.

Bei mir geht der Code ohne Probleme. Geht der bei dir jetzt auch? Ich denke das scrtags war das Problem.
Zitieren
#10
Der Wanderer schrieb:Oh, dann willst du eigenlich gar nichts mit P96 und RTG zu tun haben, oder? Wenn es ein Chipset Screen sein muss, dann nutze tatsächlich besser BestModeID.
Bei mir geht der Code ohne Probleme. Geht der bei dir jetzt auch? Ich denke das scrtags war das Problem.

Jein. :roll: Es ist ja ein Copper-List-Editor, aber er läuft systemfreundlich. D.h. ich kann ihn auch auf RTG benutzen, muß aber die Schirmmodi abfragen beim Programmstart. Da kann man sehr viel verhauen. Darum wäre ein guter Automatismus besser.

http://aminet.net/package/dev/misc/CopperED

Mein scrtags Newtype hat 48 Einträge, also 24 Tags. Das sollte reichen. Wink
Amiga. Just to let ya know....
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste