DrawImage in der MaxGui sehr langsam?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

Donut

Betreff: DrawImage in der MaxGui sehr langsam?

BeitragMi, Sep 07, 2011 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe fest gestellt, dass die DrawImage Funktion in einem Canvas der MaxGui bei mehreren Bildern bei so langsam ist, dass mein Programm quasie unbrauchbar wird. Was mache ich da falsch? Hier mal ein Beispiel:
Code: [AUSKLAPPEN]
Import MaxGUI.Drivers
SuperStrict

Local  testwindow:TGadget=CreateWindow("Testwindow", 200,200,600,600)


Local Auswahlfeld:TGadget=CreatePanel(0,30,200,GadgetHeight(testwindow),testwindow,PANEL_BORDER)
SetPanelColor Auswahlfeld, 255,101,140
SetGadgetLayout Auswahlfeld,EDGE_ALIGNED,EDGE_CENTERED,EDGE_ALIGNED,EDGE_RELATIVE;

Global i:Int = 0
Global j:Int = 0


Global Canvas:TGadget[3,3]
For j = 0 Until 2
   For i = 0 Until 2
      Canvas[ i , j ] = CreateCanvas(i*32,j*32,32,32,Auswahlfeld)
   SetGadgetLayout Canvas[ i , j ] ,EDGE_RELATIVE,EDGE_CENTERED,EDGE_RELATIVE,EDGE_CENTERED;

   SetPanelColor Canvas[i,j], 0,0,0
   Next
Next


Local  Auswahlfeld_Slider:TGadget=CreateSlider(192,0,20,GadgetHeight(Auswahlfeld)-4,Auswahlfeld)
SetGadgetLayout Auswahlfeld_Slider,EDGE_RELATIVE,EDGE_CENTERED,EDGE_RELATIVE,EDGE_RELATIVE;



Local Sprites:TImage = LoadAnimImage("RTP\ChipSet\Basis.png" , 16, 16, 0 , 420,0);

Repeat
  WaitEvent()
  Select EventID()

Case EVENT_GADGETPAINT
For j = 0 Until 2
   For i = 0 Until 2
       SetGraphics CanvasGraphics (Canvas[ i , j ])
       Cls
       DrawImage(Sprites,0,0,1)
       Flip
   Next
Next
   End Select
Forever

Midimaster

BeitragMi, Sep 07, 2011 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Da sind gleich zwei Fehler drin.

Zum einen solltest Du abfragen, welches Gadget wirklich gezeichnet werden muss. Und dann nur diese Canvas erneuern.
BlitzMax: [AUSKLAPPEN]

Case EVENT_GADGETPAINT
For j = 0 Until 2
For i = 0 Until 2
If TGadget(EventSource())= Canvas[ i , j ]
SetGraphics CanvasGraphics (Canvas[ i , j ])
.....
EndIf
Next
Next
....


und dann verwende auf jeden Fall
BlitzMax: [AUSKLAPPEN]
 Flip 0



so wie du das machst wird z.b. folgendes passieren, wenn das gesamte Fenster mal durch eine anderes überdeckt war:

1. Alle 4 Canvas waren überdeckt

2. daher erhalten alle 4 nacheinander die Nachricht EVENT_GADGETPAINT

3. bei jeder dieser Nachrichten zeichnest du alle 4 Canvas. Also 16x

4. und du wartes 16x auf den VSync: 16 x 16msec= 256 msec

*** EDIT ***

...und gleich nochwas:

Warum und woher kommen denn überhaupt so viele EVENT_GADGETPAINT, dass davon gleich die Performance einbricht? Normalerweise sollte sowas nur alle Herrgottstage auftreten.
 

Donut

BeitragDo, Sep 08, 2011 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine Hilfe, performance einbrüche gibts jetzt natürlich nicht mehr.... Wink

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group