Hi,
ZitatGibts 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.
Hi,
ZitatGibts 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.
Neue Version im Startpost.
Bug gefixt!
Bei Verwendung von
_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)
Hi,
ZitatNimm 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.
![]()
Jetzt komm endlich in die Puschen und mach den klitzekleinen Schritt, OpenGl und OpenCl zusammenzubringen.
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....
Glücklichen Herzwunsch und alles Gute!
Hau rein und lass es richtig krachen!
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!
ZitatDas 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
) 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 ![]()
![]()
da fällt mir doch sofort das hier ein^^
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. ![]()
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 ![]()
Glücklichen Herzwunsch und alles Gute!
Auf dass ihr uns noch lange hier im Forum erhalten bleibt!
Hi,
Aus der Hilfe zu den erweiterten Fenstertiteln/Beschreibungen
[autoit] ZitatREGEXPTITLE - 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)
#include <array.au3>
$a=WinList("[REGEXPTITLE:\d]") ;listet nur fenster auf mit einer Ziffer im Titel
_arraydisplay($a)
ZitatEigentlich 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...
Wieder mal ein "echter" Eukalyptus!
ZitatDie letzten Monate hatte ich kaum Zeit für das Forum.
Da frag ich mich was du raushaust, wenn du mal richtig Zeit hast?! ![]()
das hier bringt nochmal zusätzlich speed
$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)
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)
$iX_Dir = Random(-1, 1, 1)
$iY_Dir = Random(-1, 1, 1)
If $iX_Dir = 0 And $iY_Dir = 0 Then ContinueLoop
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
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
EndIf
WEnd
Next
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^^
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
![]()
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! ![]()
Glücklichen Herzwunsch und alles Gute zum Geburtstag! ![]()
Hi,
Zitat von name22Viel schneller lässt sich dieser Algorithmus mit AutoIt nicht umsetzen
Na, da steig ich doch in den Ring! ![]()
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 ![]()
ZitatAber 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"
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
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
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
Sehr viel schneller wirds mit AutoIt wohl nicht mehr werden.....
Mein Umbau deines Codes:
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
; -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
Global $sFile = FileSaveDialog("Save Picture", "", "Bitmap (*.bmp)")
If @error Then Exit
Global $iCount = 10000
Global $iSize = 200
Global $iColorBGR_Seed = 0x000000FF
Global $iColorBGR_Not = 0x00000000
Global $iColorBGR_Set = 0x00FF0000
Global $iColorBGR_Mov = 0x00f0f0f0
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]$hWnd = GUICreate("Brownian Tree", $iSize, $iSize)
GUISetState()
$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)
OnAutoItExitRegister("_Shutdown")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
GUISetOnEvent($GUI_EVENT_RESTORE, "_DrawBuffer")
GUIRegisterMsg($WM_PAINT, "_DrawBuffer")
;buffer erstellen
Global $ptr, $hbitmap
$hdc_bitmap = _CreateNewBmp32($iSize, $iSize, $ptr, $hbitmap)
$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()
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
While True
;_SetPixel($hDC_Window, $iX_Pos, $iY_Pos, $iColorBGR_Mov)
$iX_Dir = Random(-1, 1, 1)
$iY_Dir = Random(-1, 1, 1)
If $iX_Dir = 0 And $iY_Dir = 0 Then ContinueLoop
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
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
EndIf
WEnd
Next
_GDIPlus_Startup()
$hBitmapTmp = _GDIPlus_BitmapCreateFromHBITMAP($hbitmap)
If Not StringRegExp($sFile, "\.bmp\z") Then $sFile &= ".bmp"
_GDIPlus_ImageSaveToFile($hBitmapTmp, $sFile)
_GDIPlus_ImageDispose($hBitmapTmp)
_GDIPlus_Shutdown()
ShellExecute($sFile)
[/autoit] [autoit][/autoit] [autoit]While Sleep(1000)
WEnd
Func _SetPixel($hDC, $iX, $iY, $iColor)
DllCall($hDll_GDI32, 'INT', 'SetPixelV', 'HWND', $hDC, 'INT', $iX, 'INT', $iY, 'DWORD', $iColor)
EndFunc ;==>_SetPixel
Func _GetPixel($hDC, $iX, $iY)
$aRet = DllCall($hDll_GDI32, 'DWORD', 'GetPixel', 'HWND', $hDC, 'INT', $iX, 'INT', $iY)
Return $aRet[0]
EndFunc ;==>_GetPixel
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
Func _Shutdown()
; _WinAPI_SelectObject($hDC_Bitmap, $hObj_Old)
_WinAPI_ReleaseDC($hWnd, $hDC_Window)
_WinAPI_DeleteDC($hdc_bitmap)
_WinAPI_DeleteObject($hbitmap)
DllClose($hDll_GDI32)
EndFunc ;==>_Shutdown
Func _Close()
Exit
EndFunc ;==>_Close
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
Glücklichen Herzwunsch und Alles Gute, du alter Sack! ![]()
Hau rein und lass es richtig krachen!
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.
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.