Tinkerer's Auxiliary
Worklogs

Um kurz den neuesten Stand zu verkünden: Ich bin in letzter Zeit wegen meines Studiums kaum zum Programmieren gekommen, außerdem bin ich in den Semesterferien auf BMax umgestiegen. Ich will dieses Projekt auf jeden Fall weiterführen, allerdings kann das noch ein bisschen dauern...
Du könntest auch ein Bild Laden (von wegen auswählbarer Oberfläche-Stile) und über das ganze Bild zeichnen; DrawBlock wäre ideal für das, was du machen willst:
Code: [AUSKLAPPEN]
Local gfx_w=GraphicsWidth()
Local gfx_h=GraphicsHeight()
Local col=255 Shl 16+255 Shl 8+255, start
Local Gitterimg = CreateImage(16,16)
start=MilliSecs()
SetBuffer(ImageBuffer(Gitterimg))
ClsColor(0,128,128)
Cls
Color(0,0,255)
Line(15,0,15,15)
Line(0,15,15,15)
SetBuffer BackBuffer()
DebugLog MilliSecs()-start
Local image=CreateImage(gfx_w,gfx_h)
start=MilliSecs()
SetBuffer ImageBuffer(image)
TileBlock(Gitterimg,0,0)
SetBuffer BackBuffer()
DebugLog MilliSecs()-start
DrawImage image,0,0
Flip 0
WaitKey()
End
4-5 Millisekunden und damit noch schneller als Eingeproggts Variante.
Genau die Variante hab ich als Verbesserung im Kopf gehabt
Äh, hast Du die 1434ms bei meiner Ausgangsmethode gemessen? Oder bei meiner optimierten?
Ich hätte die Optimierung deiner Pixel-großen-Rects so gemacht:
Code: [AUSKLAPPEN]
Local gfx_w=GraphicsWidth()
Local gfx_h=GraphicsHeight()
Local col=255 Shl 16+255 Shl 8+255
Local image=CreateImage(gfx_w,gfx_h)
Local start=MilliSecs()
SetBuffer ImageBuffer(image)
LockBuffer
For x=1 To gfx_w Step 2
For y=1 To gfx_h Step 2
WritePixelFast x,y,col
;Rect x,y,1,1
Next
Next
UnlockBuffer
SetBuffer BackBuffer()
DebugLog MilliSecs()-start
DrawImage image,0,0
Flip 0
WaitKey()
Dein Code brauchte in diesem Test-Code (800x600 Graphics) auf meinem PC 1434ms, meine Variante schaffts in 10ms. Ist doch n brauchbarer Gewinn

mfG, Christoph.
@Jo0oker: Das stimmt, allerdings kann ich so zum Einen viel dazulernen, zum Andern hat meine GUI auch nur exakt das, was ich brauche. Außerdem kenne ich sie in- und auswendig und kann GUI-interne Veränderungen viel leichter vornehmen, als wenn ich mich erst in eine fremde einarbeiten müsste.
@Xeres: Ich verstehe ehrlich gesagt nicht so ganz, was Du mir sagen willst
@ToeB: Ich speicher jedes Fenster in einem Type. U.a. gibt es dort ein Feld "image", dies enthält das Pixelgitter und den grundlegenden Aufbau des Fensters (Rahmen, Hintergrund, etc.). Wird ein Fenster gezeichnet, so wird erst dieses Bild fenster\image an die Position 0,0 gezeichnet, da es den ganzen Bildschirm ausfüllt. Darauf werden dann die einzelnen GUI-Elemente gezeichnet.
Allerdings hast Du Recht, noch einfacher wäre es, das Bild einmal zu erstellen, in einer globalen Variablen zu speichern und dann bei jeder Fenstererstellung nur noch die Variable zu kopieren
Auch noch ein Tipp von mir : Erstelle das "Punkt" bild am anfang ! Dann nur noch zeichnen wenn ein Neues fenster erstellt wird
mfg ToeB
Das mit der Grafik erstellen kannst du auch einfacher (vll auch. schneller) haben.
Wenn du den Imagebuffer auswählst, kannst du alle Zeichenbefehle auf ihn anwenden - so wie auf den Bildschirm.
Mit CLS die größte Fläche einfärben und Linien darauf zeichnen (Okay - Rect ist schneller als genau Vertikale/Horizontale Linien).
Wieso, es gibt genügend GUIs die über die WinAPI gehen...
lg Jo0oker
Wieso denkst Du das?
OK, hätte ich BlitzPlus, dann hätte ich es damit umgesetzt, aber so muss ich mir die GUI eben selber schreiben.
ich denke auf DX oder OGL ebene wirst du mit deinem Projekt
im elektrikerforum nicht viel erreichen.
solch ein projekt hat vermutlich mehr chancen, wenn du es
gleich mit der richtigen OS GUI umsetzt