Seite 2 von 12

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 08:28
von DarkDragon
Echt cool unter PB 4.60b2 x86 :allright: ! Bei PB 4.60b2 x64 gibt es allerdings einen Assembler-Error:

Code: Alles auswählen

---------------------------
PureBasic - Assembler error
---------------------------
PureBasic.asm [3438]:

 PUSH qword 8589934591

error: value out of range.


---------------------------
OK   
---------------------------
Funktioniert das mit der neuen PB 4.60b3 x64 Version?

Ich hätte da noch einen Wunsch, den ich bei den PB Befehlen stark vermisse: ich will eine Transformation angeben können und alle Objekte, die danach gezeichnet werden, werden durch diese Transformation manipuliert.

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 08:48
von ts-soft
>> Funktioniert das mit der neuen PB 4.60b3 x64 Version?
Nein, selber Fehler!

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 09:03
von Falko
dito.
Wenn man alle Color.q durch Color.i ersetzt, werden die Grafiken zwar angezeigt, aber
der Schatten wird dann auch weiß.

[Edit]
#gNOCOLOR = $1FFFFFFF
Ein F zuviel. So läuft's bei X86 und 64-Bit-PB korrekt.
[/Edit]


Gruß Falko

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 16:58
von SoS
ts-soft hat geschrieben:>> Funktioniert das mit der neuen PB 4.60b3 x64 Version?
Nein, selber Fehler!
Hier ebenfalls.
Allerdings läuft der Code aus dem alten Thread unter PB 4.60b3 x64.

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 17:07
von Falko
SoS hat geschrieben:
ts-soft hat geschrieben:>> Funktioniert das mit der neuen PB 4.60b3 x64 Version?
Nein, selber Fehler!
Hier ebenfalls.
Allerdings läuft der Code aus dem alten Thread unter PB 4.60b3 x64.
Der Code hat ja auch kein #gNOCOLOR = $1FFFFFFFF
wo ein F zu viel ist.

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 17:35
von SoS
Falko hat geschrieben:wo ein F zu viel ist.
Stimmt,muss man erst mal finden.

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 17:47
von Falko
SoS hat geschrieben:
Falko hat geschrieben:wo ein F zu viel ist.
Stimmt,muss man erst mal finden.
Die Fehlermeldung dazu war ja folgende:
PB-IDE-64Bit hat geschrieben:---------------------------
PureBasic - Assembler error
---------------------------
PureBasic.asm [2110]:

PUSH qword 137438953471

error: value out of range.


---------------------------
OK
---------------------------
Da dort qword steht, was aussagt, das der Wert in Quad ausserhalb der Grenze liegt,
habe ich nach den Variablen mit .q gesucht. Also kam da nur color heraus. und was diesem
Color dann übergeben wurde, ist diese Konstante. Darum konnte man das finden.

Übrigens funktioniert das auch einfach mit #gNOCOLOR = 0 bei beiden Bit-Versionen von PB.
Ich konnte da keinen Unterschied sehen.

Damit die Schatten auch dem entsprechen, was die Zeichnungen anzeigen, habe ich auch das
gSetPenCaps(#LineCapRound,#LineCapArrowAnchor)
gleich hier zwischen eingesetzt. Ist nur eine kleine Schönheitskorrektur:

Code: Alles auswählen

If gInit()
    img = CreateImage(#PB_Any,850,600,24)
    If gStartDrawing( ImageOutput(img) )
        gClear( RGBA($80,$80,$80,$FF) )
        gDrawingMode(#PB_2DDrawing_Outlined)
        gSetPen(RGBA($40,$40,$40,$FF),5)
        gBox(50,50,100,100)
       
       ;.....
       gSetPenCaps(#LineCapRound,#LineCapArrowAnchor)
       ;....
Gruß Falko

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 19:15
von STARGÅTE
Meiner Meinung nach sollten das doch 8 F und n 1 sein, damit das hier:
Problem mit 32-Bit-Farbe als optionaler Parameter

Deswegen muss man hier Quads übergeben, um sicher zu sein, wann wirklich eine Farbe übergeben wurde.
Und Default ist dann etwas über $FF FF FF FF also zB $1 00 00 00 00

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 19:45
von Danilo
Hallo,

und erstmal vielen Dank für den vielen Dank und die
Motivation weiter zu machen! :)
Habe heute auch schon weitergemacht und 2 neue Befehle
eingebaut. Werde aber erst noch weiter machen und die
nächste Version dann in den nächsten 1 oder 2 Tagen
hier rein stellen.

Zu dem Fehler:
$1FFFFFFFF ist ein legaler Wert für den Variablentyp Quad.
Das muß so sein, wie STARGÅTE bereits sagte, um zwischen
"Farbe" und "keine Farbe" zu unterscheiden.
RGBA()-Farben können schließlich den kompletten Long-Raum (32bit)
einnehmen. Man kann also nicht $1FFFFFFF nehmen, da dass dann
eine legale Farbe wäre.

Festzustellen ist: PureBasic gibt keinen Syntaxfehler oder bemängelt
irgend etwas. Auf x86 läuft es wie es soll. Auf x64 gibt es einen
Assemblerfehler. Der Assembler meint $1FFFFFFFF ist kein
legales qword (Quad, 64bit), was imho nach einem Fehler im Assembler
aussieht.

Der Assemblerfehler kommt bei Default-Parameter vom Typ Quad:

Code: Alles auswählen

Procedure myBox(x.f, y.f, width.f, height.f, color.q=$1FFFFFFFF)
    If color = $1FFFFFFFF
        ProcedureReturn x+y+width+height
    EndIf
EndProcedure


myBox(1,2,3,4,$FFFFFFFFFFFFFF)  ; OK
myBox(1,2,3,4,$1FFFFFFFF)       ; OK
myBox(1,2,3,4,5)                ; OK

myBox(1,2,3,4)                  ; Assembler Error with default .q parameter
Das sollte einen Bugreport wert sein.

EDIT:
Der Unterschied im generierten Assemblercode:

Code: Alles auswählen

; myBox(1,2,3,4,$FFFFFFFFFFFFFF)  ; OK
  SUB    rsp,8
  MOV    rax,72057594037927935
  PUSH   rax
[...]
; myBox(1,2,3,4)                  ; Assembler Error with default .q parameter
  SUB    rsp,8
  PUSH   qword 8589934591
Das sieht danach aus, als wenn es nicht erlaubt ist direkt qwords
auf den Stack zu pushen. Das würde heißen, PB generiert falschen
ASM-Code.
PB müßte dann auch für Default-Parameter den Code über das Register
generieren, der korrekt geht.

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 08.07.2011 20:14
von Falko
Danilo hat geschrieben:Habe heute auch schon weitergemacht und 2 neue Befehle
eingebaut. Werde aber erst noch weiter machen und die
nächste Version dann in den nächsten 1 oder 2 Tagen
hier rein stellen.
:allright: Ich freue mich schon darauf. Prima Arbeit, die unter Windows sehr nützlich ist :allright:



Das mit dem ASM-Fehler ist sowieso komisch, da die 32-Bit-Version von PB überhaupt nicht darauf
reagiert, auch wenn ich diesen Wert um weitere $F's erhöhe.

Blödes Beispiel unter PBX86
Damit meine ich, das es max. #gNOCOLOR = $1FFFFFFFFFFFFFFF geht.
Ein weiteres F zeigt mir keinen ASM-Fehler an, sondern einen Überlauf.
X86-PB hat geschrieben:---------------------------
PureBasic
---------------------------
Zeile 108: Numerischer Überlauf: zu große Zahl.
---------------------------
OK
---------------------------
Gruß Falko