1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Andy

Beiträge von Andy

  • [OpenGl] (Etwas langsames) Mandelbrot

    • Andy
    • 10. Dezember 2012 um 20:16

    Hi,

    Zitat

    Gibts das auch in Fullscreen?

    Ja, als 16 Byte große, ausführbare *.COM Datei. Entweder auf XP direkt starten oder ab Win7 in einer DOS-Box.
    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Dateien

    bmp.zip 783 Byte – 288 Downloads
  • OpenCl goes AutoIt Update 31.Dezember 2016

    • Andy
    • 9. Dezember 2012 um 14:36

    Neue Version im Startpost.

    Bug gefixt!
    Bei Verwendung von

    [autoit]

    _CL_GetDevice()

    [/autoit]

    werden nun die richtigen Geräte verwendet, wenn man "CPU" bzw. "GPU" als Parameter verwendet.
    "ALL" verwendet das nächste erreichbare Device (CPU oder GPU)

  • [OpenGl] (Etwas langsames) Mandelbrot

    • Andy
    • 9. Dezember 2012 um 13:05

    Hi,

    Zitat

    Nimm doch gleich GLSL. Das ist die Shadersprache von OpenGL.

    Wenn man auschliesslich (3D)Grafiken (be)rechnet, ist das sicherlich die einfachste Variante.
    Wenn es aber, wie z.B. bei Winzip, darauf ankommt "Nicht-Grafik"-Programme mittels GPU zu beschleunigen, dann ist OpenCl die universalere Methode.

    Ich vermute, in den nächsten 2-3 Entwicklungsstufen Software werden die Konzepte sowieso zusammenwachsen, und es wird eine (einfache) universelle Sprache geben, die vorhandene Hardwarekapazitäten optimal ausnutzt.

  • [OpenGl] (Etwas langsames) Mandelbrot

    • Andy
    • 9. Dezember 2012 um 09:32

    :thumbup:

    Jetzt komm endlich in die Puschen und mach den klitzekleinen Schritt, OpenGl und OpenCl zusammenzubringen. 8o
    Deine UDF steht ja, OpenCl zu 95% auch, beides zusammen wäre dann jedenfalls für Grafiken das Optimum!

    Allein mit der Berechnung der einzelnen Pixel komme ich mit OpenCl auf sehr hohe Frameraten, wenn dann noch die im Verhältnis zur Berechnung sehr langsamen Speichertransferraten vom Grafikkartenram in den Hauptspeicher wegfallen, sollte der "Flug" durch die Mandelbrotmenge mit irren Frameraten funktionieren.

    Dann ist der "AutoIt"- Mandelbulb in 3D nicht mehr weit....

  • Alles gute Sprenger!

    • Andy
    • 9. Dezember 2012 um 09:05

    Glücklichen Herzwunsch und alles Gute!

    Hau rein und lass es richtig krachen!

  • Weihnachtsscripting-Challenge

    • Andy
    • 8. Dezember 2012 um 09:09

    Hi zusammen....

    Wenn ich das hier so lese, muss ich den Kopf schütteln ;(
    Leute, es geht um Weihnachten!

    Das ZIEL ist, per AutoIt ein Script zu erstellen, dass mit Weihnachten zu tun hat!

    Zitat

    Das Thema des Wettbewerbs lautet (wie auch sonst) WEIHNACHTEN. Erlaubt sind also jegliche Art von Programmen, die zum Beispiel bestimmte Abläufe zur Weihnachtsvorbereitung erleichtern sollen, oder einfach Feststimmung aufkommen lassen.

    Also setzt nen Glühwein an, holt den übriggebliebenen Spekulatius vom letzten Jahr aus dem Küchenschrank, setzt euch vor die Tastatur und lasst eurer Phantasie freien Lauf.
    Und ich hoffe, die gute und lustige (!) Idee gewinnt, und nicht das technisch perfekte und durchgestylte Script mit 12000 Zeilen Code und 34 eingebundenen Dll´s!

    Und wer wirklich meint, hier nur mitmachen zu müssen, um einen der tollen (?!) Preise (ich persönlich könnte damit nichts anfangen :rofl: ) abzuräumen, der hat imho den Sinn hinter der ganzen Aktion nicht verstanden....

    Ich wünsche jedenfalls allen Teilnehmern viel Spass und eine scriptige Weihnachtszeit 8o:thumbup:

  • GDI+ Schneegestöber

    • Andy
    • 8. Dezember 2012 um 08:27

    da fällt mir doch sofort das hier ein^^

  • Happy Birthday… Forum

    • Andy
    • 8. Dezember 2012 um 08:12

    Siebter Geburtstag?!
    Na, dann muss auch ich dir glücklich herzwünschen!

    Als erste Anlaufstelle für AutoIt (imho nicht nur in Deutschland! ) und durch deine nette, herzhafte und nicht zuletzt freundliche und offene Community steht deine URL bestimmt an erster Stelle der am häufigsten von mir angesurften Websites im Netz. :thumbup:

    An dieser Stelle auch vielen Dank an die unermüdlichen "unsichtbaren" Helferlein im Hintergrund, die täglich dafür sorgen, dass man viel Spass mit dir hat :thumbup:

  • Pee wird 24 und Funkey 32

    • Andy
    • 4. Dezember 2012 um 18:34

    Glücklichen Herzwunsch und alles Gute!
    Auf dass ihr uns noch lange hier im Forum erhalten bleibt!

  • Teil des Fensternamen vergleichen

    • Andy
    • 1. Dezember 2012 um 12:11

    Hi,
    Aus der Hilfe zu den erweiterten Fenstertiteln/Beschreibungen

    Zitat

    REGEXPTITLE - Fenstertitel, der eine regular expression benutzt (ist der reguläre Ausdruck falsch, wird @error auf 2 gesetzt)
    REGEXPCLASS - Fenster Klassenname verwendet einen regular expression benutzt (ist der reguläre Ausdruck falsch, wird @error auf 2 gesetzt)

    [autoit]

    #include <array.au3>
    $a=WinList("[REGEXPTITLE:\d]") ;listet nur fenster auf mit einer Ziffer im Titel
    _arraydisplay($a)

    [/autoit]
  • GDI+ Spielerei - Feuerwerk

    • Andy
    • 1. Dezember 2012 um 11:50
    Zitat

    Eigentlich würde mich eine ASM-Umsetzung in Realtime reizen,

    Wäre die eine Variante, die andere wäre OpenCl.
    Den Code 1:1 in C zu übernehmen ist sicherlich einfacher als ASM. Wobei für EINZELNE Feuerwerke der ASM-Code meiner Erfahrung nach schneller ist.
    Aber wer will schon ein einzelnes Feuerwerk sehen, 20-30 Raketen gleichzeitig sollten es schon sein!
    Und dafür wäre OpenCl prädestiniert...

  • GDI+ Spielerei - Feuerwerk

    • Andy
    • 30. November 2012 um 20:01

    Wieder mal ein "echter" Eukalyptus! :thumbup:

    Zitat

    Die letzten Monate hatte ich kaum Zeit für das Forum.

    Da frag ich mich was du raushaust, wenn du mal richtig Zeit hast?! 8o

  • Brownian Tree

    • Andy
    • 28. November 2012 um 21:49

    das hier bringt nochmal zusätzlich speed

    Spoiler anzeigen
    [autoit]

    $z=$isize/2 ;mittelpunkt

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

    For $i = 1 To $iCount
    $p=$z-2-(sqrt($i))
    $q=$z+2+(sqrt($i))
    Do
    $iX_Pos = Random($p,$q,1)
    $iY_Pos = Random($p,$q,1)

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

    Until dllstructgetdata($struct,1,$ix_pos+$iy_pos*$isize)=$iColorBGR_Not;_GetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos) = $iColorBGR_Not
    _SetPixel($hDC_Window, $p,$q, $iColorBGR_Mov)
    While True
    ;_SetPixel($hDC_Window, $iX_Pos, $iY_Pos, $iColorBGR_Mov)

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

    $iX_Dir = Random(-1, 1, 1)
    $iY_Dir = Random(-1, 1, 1)
    If $iX_Dir = 0 And $iY_Dir = 0 Then ContinueLoop

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

    If $iX_Pos + $iX_Dir < $p Or $iX_Pos + $iX_Dir >= $q Or $iY_Pos + $iY_Dir < $p Or $iY_Pos + $iY_Dir >= $q Then
    _DrawBuffer()
    $i -= 1
    ExitLoop

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

    Else
    If DllStructGetData($struct, 1, ($iX_Pos + $iX_Dir) + ($iY_Pos + $iY_Dir) * $iSize) <> $iColorBGR_Not Then;_GetPixel($hDC_Bitmap, $iX_Pos + $iX_Dir, $iY_Pos + $iY_Dir) <> $iColorBGR_Not Then
    DllStructSetData($struct, 1, $iColorBGR_Set, $iX_Pos + $iY_Pos * $iSize)
    ;_SetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos, $iColorBGR_Set)
    _DrawBuffer()
    ExitLoop
    Else
    $iX_Pos += $iX_Dir
    $iY_Pos += $iY_Dir
    EndIf

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

    EndIf
    WEnd
    Next

    [/autoit]

    aus dem Bauch raus würde ich zum optimieren eher auf eine logaritmische Funktion statt der quadratischen gehen...also e-Funktion statt Wurzel....ob das aber was bringt^^

  • Brownian Tree

    • Andy
    • 28. November 2012 um 20:13

    Teamwork rulez!

    [autoit]

    $z=$isize/2 ;mittelpunkt

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

    For $i = 1 To $iCount
    Do
    $iX_Pos = Random($z-2-(sqrt($i)), $z+2+(sqrt($i)), 1)
    $iY_Pos = Random($z-2-(sqrt($i)), $z+2+(sqrt($i)), 1)
    Until dllstructgetdata($struct,1,$ix_pos+$iy_pos*$isize)=$iColorBGR_Not;_GetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos) = $iColorBGR_Not

    [/autoit]

    :rock:

  • BugFix hat Geburtstag.

    • Andy
    • 28. November 2012 um 19:37

    Alles Gute und meine glücklichsten Herzwünsche zum Geburtstag!
    Auf dass du weiterhin erfolgreich Bugfix´t und den jungen Hüpfern hier zeigst wo der Hammer hängt! :thumbup:

  • Der_Doc hat Geburtstag.

    • Andy
    • 28. November 2012 um 19:34

    Glücklichen Herzwunsch und alles Gute zum Geburtstag! :thumbup:

  • Brownian Tree

    • Andy
    • 27. November 2012 um 23:58

    Hi,

    Zitat von name22

    Viel schneller lässt sich dieser Algorithmus mit AutoIt nicht umsetzen

    Na, da steig ich doch in den Ring! 8o

    Bitmaps(und somit Pixel) kann man auch mittels einer Struct beschreiben/lesen.
    Da dllstructsetdata() / dllstructgetdata() über den dicken Daumen ca.10x schneller ist als Setpixel()/Getpixel() holt man so schon ca. Faktor 3 in der Gesamtgeschwindigkeit heraus.

    Btw. eine sehr feine Idee von dir, den "temporären" Weg direkt in den Fenster_DC zu SetPixel()n, und dann diesen DC dann wieder mit dem Ergebnisbild zu überschreiben :thumbup:

    Zitat

    Aber am Algorithmus den ich verwende lässt sich sicherlich noch feilen

    Bei der Umsetzung in eine Compilersprache wäre beim Algorithmus noch einiges rauszuholen.
    z.B. könnte man die "Suchschleife"

    [autoit]

    Do
    $iX_Pos = Random(0, $iSize - 1, 1)
    $iY_Pos = Random(0, $iSize - 1, 1)
    Until dllstructgetdata($struct,1,$ix_pos+$iy_pos*$isize)=$iColorBGR_Not

    [/autoit]

    ersetzen durch

    [autoit]

    $z=$iSize*$iSize-1 ;noch vor die For/to-Schleife
    Do
    $xy_Pos = Random(0, $z, 1)
    Until DllStructGetData($struct, 1, $xy_pos) = $iColorBGR_Not
    $iY_pos=int($xy_pos/$isize)
    $iX_pos=$xy_Pos-$iy_pos*$isize

    [/autoit]

    Ein Random() ist Laufzeittechnisch SEHR teuer, das würde bei einer Compilersprache also sehr viel bringen! Aber bei AutoIt frisst der Interpreter durch die zusätzliche Zeile Code den Vorteil fast vollkommen wieder auf....

    Aber ich denke auch, so langsam ist das Ende der Fahnenstange erreicht :rolleyes:
    Sehr viel schneller wirds mit AutoIt wohl nicht mehr werden.....

    Mein Umbau deines Codes:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>

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

    ; -Author: name22 (http://www.autoit.de)

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

    Global $hDll_GDI32 = DllOpen("gdi32.dll")
    Global $iX_Pos, $iY_Pos, $iX_Dir, $iY_Dir

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

    Global $sFile = FileSaveDialog("Save Picture", "", "Bitmap (*.bmp)")
    If @error Then Exit

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

    Global $iCount = 10000
    Global $iSize = 200

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

    Global $iColorBGR_Seed = 0x000000FF
    Global $iColorBGR_Not = 0x00000000
    Global $iColorBGR_Set = 0x00FF0000
    Global $iColorBGR_Mov = 0x00f0f0f0

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

    Opt("GUIOnEventMode", 1)

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

    $hWnd = GUICreate("Brownian Tree", $iSize, $iSize)
    GUISetState()

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

    $hDC_Window = _WinAPI_GetDC($hWnd)
    ;~ $hDC_Bitmap = _WinAPI_CreateCompatibleDC($hDC_Window)
    ;~ $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC_Window, $iSize, $iSize)
    ;~ $hObj_Old = _WinAPI_SelectObject($hDC_Bitmap, $hBitmap)

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

    OnAutoItExitRegister("_Shutdown")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
    GUISetOnEvent($GUI_EVENT_RESTORE, "_DrawBuffer")
    GUIRegisterMsg($WM_PAINT, "_DrawBuffer")

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

    ;buffer erstellen
    Global $ptr, $hbitmap
    $hdc_bitmap = _CreateNewBmp32($iSize, $iSize, $ptr, $hbitmap)

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

    $struct = DllStructCreate("dword [" & $iSize * $iSize & "]", $ptr) ;per struct daten in bitmap schreiben

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

    _WinAPI_SetBkColor($hdc_bitmap, $iColorBGR_Not)
    _SetPixel($hdc_bitmap, $iSize / 2, $iSize / 2, $iColorBGR_Seed)
    _DrawBuffer()

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

    For $i = 1 To $iCount
    Do
    $iX_Pos = Random(0, $iSize - 1, 1)
    $iY_Pos = Random(0, $iSize - 1, 1)
    Until dllstructgetdata($struct,1,$ix_pos+$iy_pos*$isize)=$iColorBGR_Not;_GetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos) = $iColorBGR_Not

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

    While True
    ;_SetPixel($hDC_Window, $iX_Pos, $iY_Pos, $iColorBGR_Mov)

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

    $iX_Dir = Random(-1, 1, 1)
    $iY_Dir = Random(-1, 1, 1)
    If $iX_Dir = 0 And $iY_Dir = 0 Then ContinueLoop

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

    If $iX_Pos + $iX_Dir < 0 Or $iX_Pos + $iX_Dir >= $iSize Or $iY_Pos + $iY_Dir < 0 Or $iY_Pos + $iY_Dir >= $iSize Then
    _DrawBuffer()
    $i -= 1
    ExitLoop

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

    Else
    If DllStructGetData($struct, 1, ($iX_Pos + $iX_Dir) + ($iY_Pos + $iY_Dir) * $iSize) <> $iColorBGR_Not Then;_GetPixel($hDC_Bitmap, $iX_Pos + $iX_Dir, $iY_Pos + $iY_Dir) <> $iColorBGR_Not Then
    DllStructSetData($struct, 1, $iColorBGR_Set, $iX_Pos + $iY_Pos * $iSize)
    ;_SetPixel($hDC_Bitmap, $iX_Pos, $iY_Pos, $iColorBGR_Set)
    _DrawBuffer()
    ExitLoop
    Else
    $iX_Pos += $iX_Dir
    $iY_Pos += $iY_Dir
    EndIf

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

    EndIf
    WEnd
    Next

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

    _GDIPlus_Startup()
    $hBitmapTmp = _GDIPlus_BitmapCreateFromHBITMAP($hbitmap)
    If Not StringRegExp($sFile, "\.bmp\z") Then $sFile &= ".bmp"
    _GDIPlus_ImageSaveToFile($hBitmapTmp, $sFile)
    _GDIPlus_ImageDispose($hBitmapTmp)
    _GDIPlus_Shutdown()

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

    ShellExecute($sFile)

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

    While Sleep(1000)
    WEnd

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

    Func _SetPixel($hDC, $iX, $iY, $iColor)
    DllCall($hDll_GDI32, 'INT', 'SetPixelV', 'HWND', $hDC, 'INT', $iX, 'INT', $iY, 'DWORD', $iColor)
    EndFunc ;==>_SetPixel

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

    Func _GetPixel($hDC, $iX, $iY)
    $aRet = DllCall($hDll_GDI32, 'DWORD', 'GetPixel', 'HWND', $hDC, 'INT', $iX, 'INT', $iY)
    Return $aRet[0]
    EndFunc ;==>_GetPixel

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

    Func _DrawBuffer()
    DllCall($hDll_GDI32, "BOOL", "BitBlt", "HANDLE", $hDC_Window, "INT", 0, "INT", 0, "INT", $iSize, "INT", $iSize, "HANDLE", $hdc_bitmap, "INT", 0, "INT", 0, "DWORD", $SRCCOPY)
    EndFunc ;==>_DrawBuffer

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

    Func _Shutdown()
    ; _WinAPI_SelectObject($hDC_Bitmap, $hObj_Old)
    _WinAPI_ReleaseDC($hWnd, $hDC_Window)
    _WinAPI_DeleteDC($hdc_bitmap)
    _WinAPI_DeleteObject($hbitmap)

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

    DllClose($hDll_GDI32)
    EndFunc ;==>_Shutdown

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

    Func _Close()
    Exit
    EndFunc ;==>_Close

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

    Func _CreateNewBmp32($iwidth, $iheight, ByRef $ptr, ByRef $hbmp) ;erstellt leere 32-bit-Bitmap; Rückgabe $HDC und $ptr und handle auf die Bitmapdaten
    $hcdc = _WinAPI_CreateCompatibleDC(0) ;Desktop-Kompatiblen DeviceContext erstellen lassen
    $tBMI = DllStructCreate($tagBITMAPINFO) ;Struktur der Bitmapinfo erstellen und Daten eintragen
    DllStructSetData($tBMI, "Size", DllStructGetSize($tBMI) - 4);Structgröße abzüglich der Daten für die Palette
    DllStructSetData($tBMI, "Width", $iwidth)
    DllStructSetData($tBMI, "Height", -$iheight) ;minus =standard = bottomup
    DllStructSetData($tBMI, "Planes", 1)
    DllStructSetData($tBMI, "BitCount", 32) ;32 Bit = 4 Bytes => AABBGGRR
    $adib = DllCall('gdi32.dll', 'ptr', 'CreateDIBSection', 'hwnd', 0, 'ptr', DllStructGetPtr($tBMI), 'uint', 0, 'ptr*', 0, 'ptr', 0, 'uint', 0)
    $hbmp = $adib[0] ;hbitmap handle auf die Bitmap, auch per GDI+ zu verwenden
    $ptr = $adib[4] ;pointer auf den Anfang der Bitmapdaten, vom Assembler verwendet
    _WinAPI_SelectObject($hcdc, $hbmp) ;objekt hbitmap in DC
    Return $hcdc ;DC der Bitmap zurückgeben
    EndFunc ;==>_CreateNewBmp32

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Alles gute Raupi

    • Andy
    • 26. November 2012 um 02:09

    Glücklichen Herzwunsch und Alles Gute, du alter Sack! :thumbup:

    Hau rein und lass es richtig krachen!

  • C#-DLL in AutoIt einbinden

    • Andy
    • 25. November 2012 um 09:20

    Hi,
    nach ein bischen googeln ist herausgekommen, dass es wohl egal ist, ob die dotnet-Dll mit einem 32- oder 64Bitsystem erstellt wurde, es wird lediglich ein Flag im Header gesetzt.
    Erst das Runtimesysten (der Compiler) erstellt dann die entsprechende Version.
    Wenn du also den Compiler anweist, eine 32-Bit-DLL zu erstellen, könnte das helfen.

    Wenn der 64-Bit-Modus aus programmtechnischen Erfordernissen nicht explizit nötig ist, sollte man aus abwärtskompatiblen Gründen 32-Bit-Programme bzw. dll´s erstellen.

  • C#-DLL in AutoIt einbinden

    • Andy
    • 24. November 2012 um 15:42

    Doch, die Express-Versionen reichen aus.
    Könnte es sein, dass du ein 64 Bit-System verwendest?
    Bei meinem XP32 funktioniert alles einwandfrei, auf dem Win7-64 habe ich das Studio nicht installiert.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™