Visualisierungen - Was ist die schnellste?

  • Was ist am schnellsten? 10

    1. Direct X (6) 60%
    2. OpenGL (3) 30%
    3. GDI+ (1) 10%
    4. GDI32 (0) 0%
    5. Prospeed (0) 0%
    6. Irrlicht (0) 0%

    Es gibt ja mehrere Arten von Visualisierungen bei AutoIt.
    Ich würde nun gerne wissen was die schnellste ist...

    Einmal editiert, zuletzt von JuraX (26. Juli 2010 um 14:35)

  • Du hast Prospeed, Irrlicht und GDI32 vergessen ^^ Es kommt immer darauf an, was du im Endeffekt erreichen willst. DirectX wird wohl nicht das schnellste sein, da dafür die AutoItObject-UDf benötigt wird und diese eben etwas Leistung frisst.

  • Ich will wissen ob meine gdi+ lösung die optimale ist.
    Ich hab immoment diesen ansatz:

    Spoiler anzeigen
    [autoit]

    Func Display_Vis($eq = 1)
    _GDIPlus_GraphicsClear($visBuffer, 0x77FFFFFF)
    If $eq > 0 Then
    $levels = _BASS_ChannelGetLevel($hMusic)
    $LeftChannel = Round((_LoWord($levels) / 32768) * 80, 0)
    $RightChannel = Round((_HiWord($levels) / 32768) * 80, 0)

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

    _GDIPlus_BrushSetSolidColor($hBrush, _CalcColor($LeftChannel))
    _GDIPlus_GraphicsFillRect($visBuffer, 0, 80 - $LeftChannel, 20, $LeftChannel, $hBrush)

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

    _GDIPlus_BrushSetSolidColor($hBrush, _CalcColor($RightChannel))
    _GDIPlus_GraphicsFillRect($visBuffer, 25, 80 - $RightChannel, 20, $RightChannel, $hBrush)

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

    _BASS_CHANNELGETDATA($hMusic, DllStructGetPtr($fftstruct), $BASS_DATA_FFT256)
    For $i = 1 To 127 Step 1
    $FFT = Round(DllStructGetData($fftstruct, 1, $i + 1) * 700)
    _GDIPlus_PenSetColor($pen, _CalcColor($FFT))
    _GDIPlus_GraphicsDrawLine($visBuffer, 50 + $i * $pen_size, 80, 50 + $i * $pen_size, 80 - $FFT, $pen)
    Next
    EndIf
    _GDIPlus_GraphicsDrawImageRect($visGraphics, $visBitmap, 0, 0, 320, 80)
    EndFunc ;==>Display_Vis

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

    Func _CalcColor($iPercent)
    $R = $iPercent * 3.5
    $G = 171
    $B = 255
    Return "0x77" & Hex($R, 2) & Hex($G, 2) & Hex($B, 2)
    EndFunc ;==>_CalcColor

    [/autoit]
  • Die Frage ist nicht "was ist am schnellsten", denn das ist bei den o.g. Interfaces abhängig von Hardware und Treiber, sondern "für welche Anwendung ist die Schnittstelle die geeignete".
    GDI+ führt sämtliche Operationen auf dem Prozessor und im lokalen RAM aus und benutzt die Grafikkarte nur noch zur Darstellung des fertigen Bildes. Eine Hochleistungsgrafikkarte würde daher GDI+-Grafiken nicht schneller darstellen als eine Chipsatzgrafik.

    OpenGL und DirectX sind wiederum Abhängig von Hardware und Treiber. Der Programmierer muss sich idR keine Gedanken über Speicher und Parallelität der Verarbeitung machen, das übernimmt alles die Grafikkarte. Hier gilt, "viel hilft viel", je mehr (Shader und Takt), desto schneller^^
    Das ganze funktioniert ähnlich wie HTML, man beschreibt, was man machen möchte, und füttert den Grafikkartentreiber mit diesen Daten. Der Treiber setzt diese Anweisungen (Kernel) dann für die GPU um, und diese arbeitet den Kernel dann parallelisiert so lange ab, bis das Ergebnis feststeht. Grafiken können somit direkt "in" der Grafikkarte berechnet und am Bildschirm angezeigt werden, ohne daß das übrige System (Prozessor+RAM) davon etwas mitbekommen.
    Daher funktioniert bei den meisten "hardcore" auf Geschwindigkeit programmierten Spielen auch kein Screenshot, für Windows ist das Fenster ohne Inhalt, d.h. "schwarz".

    Die Berechnungen in der Graka müssen nicht unbedingt etwas mit Pixeln direkt zu tun haben, man kann heutzutage arithmetische, trigonometrische und viele weitere Funktionen von der Graka berechnen lassen und gibt ein berechnetes "gefiltertes Ergebnis" (s filter und Shader) auf die Festplatte aus.
    Wer sich für die Benutzung der Grafikkartenpower ausserhalb von "Pixeln" und CS interessiert, dem dei CUDA und/oder OpenCl ans Herz gelegt, wobei OpenCl den großen Vorteil hat, Hardware(Nvidea)unabhängig zu sein und sich für nahezu beliebige Berechnungen eignet, die es dynamisch auf mehrere Grafikkartenprozessoren und CPU´s verteilen kann

  • Zitat

    Aber meinst su statt Nivdea nicht Nvidia

    abber sischääärr^^

  • bei deinem ansatz musst du nur aufpassen das es bei _GDIPlus_GraphicsFillRect nicht zu fehlern kommt (Oscar hatte mal nen thread dazu das es bei ihm nicht ganz funzte)
    also jetzt in der weise das manche ecken fehlten...

  • Hey.

    Das erste versteh ich ich nicht ganz. Ich hab da nur ne schwarze gui mit ne besonderen mauscourser und unten ist noch ein flyout mehr kann ich da nicht erkennen ?!?

    Lichtquelle kann ich bei dem bsp keine erkennnen :(

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.

  • Dein System?
    Auf XP-32 und Win7-32 läuft das einwandfrei.

  • Compile mal in 32 Bit, ggf die Pfade zu den dll´s anpassen.

  • Jop lag wohl daran. Echt schöne Sache :)

    Das finden von Rechtschreibfehlern muss sofort und unverzüglich dem Autor gemeldet werden. Das eigennützige Verwenden dieser Rechtschreibfehler ist strengstens untersagt und kann mit Freiheitsenzug bestraft werden.