ein 3-eck im canvas-fenster veschieben.
ein 3-eck im canvas-fenster veschieben.
Hallo, guten Tag.
Ich möchte bitte im Canvasfenster eine Grafik verschieben von links nach rechts.
Es soll flimmerfrei sein. Da muss man ja wohl irgendwie im Hintergrund zeichnen und dann in den Vordergrund bringen.
Wie funktioniert das mit einem Canvasfensfer
Danke.
Gruss
Ich möchte bitte im Canvasfenster eine Grafik verschieben von links nach rechts.
Es soll flimmerfrei sein. Da muss man ja wohl irgendwie im Hintergrund zeichnen und dann in den Vordergrund bringen.
Wie funktioniert das mit einem Canvasfensfer
Danke.
Gruss
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: ein 3-eck im canvas-fenster veschieben.
Alles, was zwischen StartDrawing() und StopDrawing() steht, wird auf einmal gezeichnet. Wenn es also flimmefrei sein soll, darfst du pro Schleifendurchlauf nur einmal StartDrawing und einmal StopDrawing aufrufen. Dann ist es schon automatisch flimmerfrei.
Re: ein 3-eck im canvas-fenster veschieben.
Ja danke.
Das ist ja dann mit dem Canvasfenster einfach geregelt.
Wie kann man das Canvasfenster am schnellsten löschen, ohne eine ganze weiße Box zu zeichnen , wenn es gelöscht werden soll?
Danke.
GRuss
Das ist ja dann mit dem Canvasfenster einfach geregelt.
Wie kann man das Canvasfenster am schnellsten löschen, ohne eine ganze weiße Box zu zeichnen , wenn es gelöscht werden soll?
Danke.
GRuss
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: ein 3-eck im canvas-fenster veschieben.
Ich wüsste nichts was schneller ist als die weiße Box.
Re: ein 3-eck im canvas-fenster veschieben.
Gar nicht.funkheld hat geschrieben:... ohne eine ganze weiße Box zu zeichnen , wenn es gelöscht werden soll?
Die einzigen Möglichkeiten sind entweder nur den Bereich löschen, in dem man neu zeichnen möchte (per Box,Circle oder ähnliches) oder eine andere Farbe als Weiss nehmen.
Wenn z.B. dein Fensterhintergrund schwarz ist, und man das Canvas sowieso schwarz einfärben möchte.... ist Weiss eine schlechte Wahl
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: ein 3-eck im canvas-fenster veschieben.
Ja danke.
Ich habe jetzt einen buffer gefunden für das Canvas:
Global buffer.l,pitch.l,PixelFormat.l,zaehler.l
........
StartDrawing(CanvasOutput(#canv))
Buffer = DrawingBuffer()
Pitch = DrawingBufferPitch()
PixelFormat = DrawingBufferPixelFormat()
For zaehler=0 To 480000 Step 3
PokeL(buffer+zaehler,$ffff00)
Next
Stopdrawing()
.........
-----------------------------------------------------
Wer kann mir bitte einmal die Forschleife in den Purebasic-ASM-Code umsetzen?
Sie ist mit Pokel schon schnell mit den löschen des Canvas. Vielleicht geht es mit Asm noch etwas schneller.
Danke.
GRuss
Ich habe jetzt einen buffer gefunden für das Canvas:
Global buffer.l,pitch.l,PixelFormat.l,zaehler.l
........
StartDrawing(CanvasOutput(#canv))
Buffer = DrawingBuffer()
Pitch = DrawingBufferPitch()
PixelFormat = DrawingBufferPixelFormat()
For zaehler=0 To 480000 Step 3
PokeL(buffer+zaehler,$ffff00)
Next
Stopdrawing()
.........
-----------------------------------------------------
Wer kann mir bitte einmal die Forschleife in den Purebasic-ASM-Code umsetzen?
Sie ist mit Pokel schon schnell mit den löschen des Canvas. Vielleicht geht es mit Asm noch etwas schneller.
Danke.
GRuss
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: ein 3-eck im canvas-fenster veschieben.
Ich nehme stark an, dass es mit 'Box()' wesentlich schneller geht. Wieso also so kompliziert? ASM ist hier wahrlich überrissen.
Und nutze in Zukunft bitte die Code-Tags.
Und nutze in Zukunft bitte die Code-Tags.
Re: ein 3-eck im canvas-fenster veschieben.
Mit Pokel geht es schon schneller wie mit Box.
Bei Box tritt ab und zu eine Verzögerung ein, als wenn etwas kurzfristig ausbremst.
Darum möchte ich es mit ASM auch mal testen ?
Gruss
Bei Box tritt ab und zu eine Verzögerung ein, als wenn etwas kurzfristig ausbremst.
Darum möchte ich es mit ASM auch mal testen ?
Gruss
Re: ein 3-eck im canvas-fenster veschieben.
Nun ja, wenn du alles nur erdenkliche bei "deinem For-Schleifen-Versuch" Ignorierst, wie den Pitch und dass du immer ein Byte zu viel schreibst, dann kann er durchaus schneller und falscher werden.
Ach und bitte gewöhne dir an, immer Integers zu nutzen, keine Longs.
Ich nutze auch ein eines Box() und habe damit keine Probleme ("Verzögerung oder Flackern").
Wenn man allerdings flüssige Bewegnugen darstellen möchte, sollte man doch lieber zum Screen wechseln.
Ach und bitte gewöhne dir an, immer Integers zu nutzen, keine Longs.
Ich nutze auch ein eines Box() und habe damit keine Probleme ("Verzögerung oder Flackern").
Wenn man allerdings flüssige Bewegnugen darstellen möchte, sollte man doch lieber zum Screen wechseln.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: ein 3-eck im canvas-fenster veschieben.
Ja das war es.
Hatte einen Tipp bekommen von dem FASM.
Dieses ist 2x schneller wie der Boxbefehl um ein Canvas auszufüllen :
oder auch dieses:
Gruss
Hatte einen Tipp bekommen von dem FASM.
Dieses ist 2x schneller wie der Boxbefehl um ein Canvas auszufüllen :
Code: Alles auswählen
StartDrawing(CanvasOutput(#canv))
buffer = DrawingBuffer()
!MOV ebx,dword [v_buffer]
!Repeat 160000
!MOV dword [ebx],$ff0000
!add ebx,3
!End Repeat
StopDrawing()
Code: Alles auswählen
!MOV ebx,dword [v_buffer]
!MOV ecx,160000
!nextbyte:
!MOV dword [ebx],$00ff00
!add ebx,3
!dec ecx
!TEST ecx, ecx
!JNZ nextbyte