QuickDraw 100mal so schnell wie GDIPlus Update10 Texture speichern / Screencap

  • Die Frage ist, ob es sich lohnt auf QD zu portieren. "Normale" Spiele mit bewegtem Hintergrund und 10-20 bewegten transparenten Sprites laufen auch mit WinAPI mit >100FPS. Also die reine Darstellung ohne Berechnung. QD löst ja das Problem der "langsamen" Rechnerei von AutoIt nicht!
    Ich habe neulich gelesen, daß auf einigen Grafikchipsätzen sämtliche 3D-Funktionen vom Prozessor emuliert werden müssen, in diesem Fall wäre QD sogar hinderlich.
    QD spielt dann seine Vorteile aus, je größer das Fenster wird. Während bei einem Bitblt dann jedes Mal der gesamte Fensterinhalt vom Hauptspeicher über den Bus in die Graka geschoben wird, erledigt OpenGl das in einem Bruchteil der Zeit.

    Mal davon abgesehen, daß es in einem Spiel völlig unüblich ist, mit den Zeichenfunktionen permanent Linien, Punkte, Kreise und Rechtecke usw. auf den Bildschirm zu "malen". Das Bewegen von Sprites ist in jedem Falle schneller, egal welches System man anwendet.

  • Andy du hast völlig recht ich werde in der nächsten version, sprites einfügen bzw alle Zeichenofunktionen als objekte machen, sodass man zb eine linien erstellen kann die dann jedes mal gezeichnet wird, das sollte das problem mit der geschwindigkeit von autoit lösen.

  • Zitat

    das sollte das problem mit der geschwindigkeit von autoit lösen.

    Naja, wie bei den von UEZ geposteten Beispielen wie z.B. Twister wird man nicht viel machen können. Generell ist es mit AutoIt schwer, Geschwindigkeit herauszuholen, da allein die Berechnungen nicht oder nur sehr schwer zu optimieren sind. Beim Primzahlen-µ-It gab es das schöne Statement "Ich weiss nicht, wie ihr auf 3,9 Sekunden kommt, bei mir dauert alleine die For/To-Schleife bis 100000 schon 3 Sekunden..." :D
    "Schnelle" Algorithmen sind nicht automatisch in AutoIt schnell. Wenn mehr Code anfällt, dann wird es eher langsamer....

    Wo OpenGl natürlich irre viel bringt, ist bei den GDI+"Spezialfunktionen", Drehen, Rotieren, Spiegeln usw...
    Auch bei der Darstellung von Diagrammen, Liniengrafiken usw. wird einiges beschleunigt werden, aber das sind dann eher Anwendungen, wo es nicht auf die letzte Millisekunde ankommt.

  • War mein Fehler, sollte Faktor 10 höher sein, und war mit Füllen eines Arrays, aber die Richtung wo ich hinwollte sollte rausgekommen sein^^
    Für mehrere ineinandergeschachtelte Schleifen mit Berechnungen im "inner Loop", will sagen "Numbercrunching", ist AutoIt einfach nicht gemacht. Dafür gibts ja die exzellente Anbindung mit Objekten, Dll´s und wers wirklich hardcoremässig braucht, einem embedded Assembler^^

  • Ich habe mal versucht so Fullscreen zu erzwingen geht auch soweit nur der Render Context ist dann nicht mehr benutzbar

    [autoit]

    _QuickDraw_Enable("AudioSlide " & $sVersion, @DesktopWidth, @DesktopHeight, 0, 0, True)
    $hGui = WinGetHandle("AudioSlide " & $sVersion)
    WinSetState($hGui,"",@SW_MAXIMIZE)

    [/autoit]
  • Hey, hatte die Idee, mal zu testen, wie schnell ein Pixel-/ImageSearch damit wäre :p... Und wollte ein bisschen rum spielen.

    Allerdings klappt mein Testcode, mit dem ich erstmal anfangen wollte, unerklärlicher Weise nicht. Muss wohl was missverstanden haben.
    Gibt immer 0 aus...

    Warum^^?

    [autoit]

    #include <QuickDraw.au3>

    [/autoit][autoit][/autoit][autoit]

    _QuickDraw_Enable("QuickDraw", 200, 100, 20, 60, False) ; Muss ich überhaupt n Device öffnen, wenn ich nen Screenshot in den Buffer haben will + Pixel scannen?

    [/autoit][autoit][/autoit][autoit]

    Local $Texture = _QuickDraw_LoadTexture(@ScriptDir & "BLACK.bmp") ; Bild laden, bei mir ne selbst erstellte Bitmap mit 100x100 Pixeln

    [/autoit][autoit][/autoit][autoit]

    $test = _QuickDraw_GetPixelColor(5,5) ; Pixel analysieren

    [/autoit][autoit][/autoit][autoit]

    MsgBox(64, "", $test) ; Pixel-Farbe ausgeben

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    _QuickDraw_FreeTexture($Texture) ; Bild wieder ausm Speicher hauen
    _QuickDraw_Disable() ; Device wieder schließen

    [/autoit]


    LG


    *edit* Was mich auch wundert, muss ich der Funktion zur Pixelanalyse kein Bild-Handle übergeben?


    *edit*
    Achsooooo... -> ; Remarks .......: Does not work correct yet

    Das habe ich wohl übersehen... -.- Dann brauche ich mir darum wohl erst einmal keine Gedanken machen :/ Schade...^^

  • Wo ist denn das Problem?
    Die entsprechende Funktion selbst implementieren und fertig...

  • Wenn ich volgendes mache,

    [autoit]


    $a = _QuickDraw_LoadTexture(@scriptdir & "\test.png")
    dim $b = $a
    _QuickDraw_FreeTexture($b)

    [/autoit]

    ist die erste Variable auch gelöscht ?( Wird da ein Pointer weitergegeben, und quasi der Inhalt des Pointers wird gelöscht bzw. das worauf er zeigt?? Weil ich dachte das ich so die erste Textur kopieren kann, anhand des Speicherverbrauchs siehts auch so aus. Deswegen bin ich auch etwas verwundert gewesen, hab´s ja aber noch selbst gemerkt! Ich hatte plötzlich ein riesen Speicher-Lag gehabt und die Prozzilast ging auf 99% hoch; mußte erstmal den Fehler finden...

    Grüsse!

    [Edit]
    Kommen eigentlich noch Funktionen wie '_GDIPlus_GraphicsDrawImageRectRect' oder auch für einen Kreisauschnitt??

  • Hi,

    erstmal bekommst du keinen Pointer zurück, wenn du eine Texture lädst sondern eine ID. Wenn du jetzt b =a setzt und b dann löscht, dann löscht du die Texture mit der ID a / b und a ist nicht mehr gültig. Ich könnte ja in der nächsten version mal ein funktion zu kopieren machen und eine um in Texturen zu Rendern.

  • Naja mehr oder weniger, ich muss zur zeit viel für die schule machen :( Aber wenn ich mal kurz zeit habe mache ich immmer nen bisschen weiter, ich bin jetzt fast soweit das man in texturen rendern kann :) und den bug mit dem vollbild habe ich auch beseitigt :) die nächste version kommt bald

  • **freu**
    Ich arbeite nähmlich immer noch mit deiner Engine ;) Und habe wegen der fehlenden Texturen-Render Funktion was mit GDI+Gui´s zusätzlich machen müssen ...ist übrigens ziemlich umständlich und Ressourcend-Fressend.

    Grüsse!

  • Hallo,

    machst du an der Engine noch weiter oder haste das bloß vergessen?

    Ich wollte Fragen ob man auch dünne Linien machen kann also nicht blos solche dicken.

    Ich bekomme leider immer blos dicke hin aber keine dünnen von vllt blos 2 Pixeln oder so.

    Oder gibts was bessres zur Zeit als deine Engine?

    Gruß Nitrama