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

  • OpenCL meets OpenGL in AutoIt

    • Andy
    • 28. April 2013 um 11:22

    okay, davon gehe ich aus^^

    Bitte nochmal folgendes Script testen und die Consolenausgabe posten, dort werden eure OpenGL-Versionen ermittelt und die für GL erforderlichen Extensions abgefragt.

    Spoiler anzeigen
    [autoit]

    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_usex64=n
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include "..\Includes\opengl.au3"
    #include <opencl_easy.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    ;#include <GDIConstants.au3>
    #include <Misc.au3>
    ;#include <CLGL_easy.au3>
    #include<array.au3>

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

    global $DIB_RGB_COLORS = 0
    Global $glew_hDLL = DllOpen("glew32.dll")

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

    Global Const $GL_ARRAY_BUFFER = 0x8892 ;gehört in include
    Global Const $GL_DYNAMIC_DRAW = 0x88E8 ;gehört in include
    Global Const $GL_BGRA = 0x80E1
    ;INFOS!!!
    ;erst textur in openGL erstellen und binden, dann erst CL-context erstellen

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

    ;programmspezifisch...
    $CL_DEBUGFLAG = 1 ;1 debug aus
    Global $width = 256 * 3 ;breite und höhe des Fensters
    Global $height = 256 * 3

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

    Global $bufferdatasize=$width*$height*4

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

    Global $textur_width = $width, $textur_height = $height ;texturmaße = Fenstermaße
    Global $Textur1

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

    ;GL_VENDOR, GL_RENDERER, GL_VERSION, or GL_SHADING_LANGUAGE_VERSION.

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

    ;OpenGL und extensions initialisieren
    glInit()
    ;gluInit()
    glfwInit()

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

    $a=glewinit()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    ;Fenster einrichten
    glfwOpenWindowHint($GLFW_WINDOW_NO_RESIZE, 1) ; Resize nicht möglich
    glfwOpenWindow($width, $height, 8, 8, 8, 0, 8, 0, $GLFW_WINDOW) ; Fenster öffnen
    glfwSetWindowTitle("tunnelflug ") ; Titel setzen

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

    glMatrixMode($GL_PROJECTION) ; Projektionseinstellungen
    ;gluPerspective(14, $width / $height, 5, 40) ; Perspektive
    glOrtho(0, $width, 0, $height, 0, 128)
    glViewport(0, 0, $width, $height) ; Viewport
    glMatrixMode($GL_MODELVIEW) ; Betrachtungsmodus

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

    ;GL-context holen
    $gl_context = wglGetCurrentContext()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $gl_context = ' & $gl_context & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    ;GL-DC vom Fenster holen
    $gl_hdc = wglGetCurrentDC()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $gl_hdc = ' & $gl_hdc & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    ;jetzt erst glew initialisieren!
    $init = glewinit()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $init = ' & $init & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & glewGetErrorString($init) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    ;Context an aktuellen DC binden
    $err = wglMakeCurrent($gl_hdc, $gl_context)
    If $err = 0 Then
    MsgBox(0, " wglMakeCurrent", "Error!")
    Exit
    EndIf

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

    ;GLCL context erstellen und an hdc (window) binden
    ;setGLCLcontext() ;aktuellen gl-context an dc (window) binden

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

    GLOBAL $GL_SHADING_LANGUAGE_VERSION=0x8B8C

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

    $vendor=glGetString($GL_VENDOR)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $vendor = ' & $vendor & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    $renderer=glGetString($GL_RENDERER)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $renderer = ' & $renderer & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $version=glGetString($GL_VERSION)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $version = ' & $version & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    $version=glGetString($GL_SHADING_LANGUAGE_VERSION)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $version = ' & $version & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    $extensions=glGetString($GL_EXTENSIONS)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $extensions = ' & $extensions & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    $a=glewinit()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    ;GL-Version überprüfen
    $erg = _glewIsSupported("GL_VERSION_2_0")
    $erg1 = _glewIsSupported("GL_ARB_pixel_buffer_object")
    If $erg = False Or $erg1 = False Then
    MsgBox(0, "GLEW", "GL_VERSION_2_0 or GL_ARB_pixel_buffer_object is not supported!")
    Exit
    EndIf

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

    ;Buffer erstellen....
    $textur_obj_struct = _DllStructCreate16("int[100]")
    $textur_obj_ptr = DllStructGetPtr($textur_obj_struct)

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

    ;bufferhandle holen
    $genbuff = glewGenBuffers(1, $textur_obj_ptr) ;
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $genbuff = ' & $genbuff & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $textur_Obj = DllStructGetData($textur_obj_struct, 1, 1)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $textur_Obj = ' & $textur_Obj & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    $bind = glBindBuffer($GL_ARRAY_BUFFER, 0) ;
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $bind = ' & $bind & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    ;.....und an den arraybuffer binden
    $bind = glBindBuffer($GL_ARRAY_BUFFER, $textur_Obj) ;
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $bind = ' & $bind & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    ;Buffergrösse und pointer festlegen und an arraybuffer binden
    $struct = _dllstructcreate16("float[" & $bufferdatasize & "]") ;width * height * 4
    $textur_ptrbuffer = DllStructGetPtr($struct)

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

    $a = glewBufferData($GL_ARRAY_BUFFER, $bufferdatasize, 0, $GL_DYNAMIC_DRAW);
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : glewbufferdata = ' & glewGetErrorString($a) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    $a = glewBufferData($GL_ARRAY_BUFFER, $bufferdatasize, $textur_ptrbuffer, $GL_DYNAMIC_DRAW);
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : glewbufferdata = ' & glewGetErrorString($a) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    global const $GL_STATIC_DRAW = 0x88E4

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

    $a = glewBufferData($GL_ARRAY_BUFFER, $bufferdatasize, 0, $GL_STATIC_DRAW);
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : glewbufferdata = ' & glewGetErrorString($a) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    $a = glewBufferData($GL_ARRAY_BUFFER, $bufferdatasize, $textur_ptrbuffer, $GL_STATIC_DRAW);
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : glewbufferdata = ' & glewGetErrorString($a) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    Func glewGetErrorString($nr)
    $aCall = DllCall($glew_hDLL, "str", "_glewGetErrorString@4", 'int', $nr)
    Return $aCall[0]
    EndFunc ;==>glewGetErrorString

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

    Func glewGenBuffers($nr, $ptr) ; by [email='Andy@autoit.de'][/email]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : get_glew_address("__glewGenBuffers") = ' & get_glew_address("__glewGenBuffers") & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aCall = DllCallAddress("int", get_glew_address("__glewGenBuffers"), "int", 1, "uint", $ptr)
    Return $aCall[0]
    EndFunc ;==>glewGenBuffers

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

    Func glBindBuffer($target, $buffer) ; by [email='Andy@autoit.de'][/email]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : get_glew_address("__glewBindBuffer") = ' & get_glew_address("__glewBindBuffer") & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aCall = DllCallAddress("int", get_glew_address("__glewBindBuffer"), "int", $target, "uint", $buffer)
    Return $aCall[0]
    EndFunc ;==>glBindBuffer

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

    Func glewBufferData($target, $size, $data, $usage) ; by [email='Andy@autoit.de'][/email]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : get_glew_address("__glewBufferData") = ' & get_glew_address("__glewBufferData") & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    $aCall = DllCallAddress("int", get_glew_address("__glewBufferData"), "uint", $target, "uint", $size, "ptr", $data, "uint", $usage)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aCall = ' & $aCall & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Return $aCall[0]
    EndFunc ;==>glewBufferData

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

    Func glewInit()

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

    Local $ret = DllCall($glew_hDLL, "int", "_glewInit@0")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Return $ret[0]
    EndFunc ;==>glewInit

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

    Func _glewIsSupported($str)
    ; ---
    Local $ret = DllCall($glew_hDLL, "int", "_glewIsSupported@4", "str", $str)
    Return SetError($ret[0] = 0, 0, $ret[0] = 1)
    EndFunc ;==>_glewIsSupported

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

    Func get_glew_address($func) ; by [email='Andy@autoit.de'][/email]
    $ret = DllCall("kernel32.dll", "ptr", "GetProcAddress", "ptr", _WinAPI_GetModuleHandle("glew32.dll"), "str", $func)
    ;_arraydisplay($ret)
    $struct = DllStructCreate("dword", $ret[0]) ;einsprungadresse, hier steht der pointer zur funktion
    Return DllStructGetData($struct, 1, 1)
    EndFunc ;==>get_glew_address

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

    Func wglcreatecontext($hwnd)
    Local $ret = DllCall($__GL_hDLL, "ptr", "wglCreateContext", "hwnd", $hwnd)
    If @error Then Return SetError(@error, @extended, $ret)
    ; ---
    Return $ret[0]
    EndFunc ;==>wglcreatecontext

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

    Func wglMakeCurrent($hdc, $hrc)
    Local $ret = DllCall($__GL_hDLL, "bool", "wglMakeCurrent", "hwnd", $hdc, "ptr", $hrc)
    ;_ArrayDisplay($ret)
    If @error Then Return SetError(@error, @extended, $ret)
    ; ---
    Return $ret[0]
    EndFunc ;==>wglMakeCurrent

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

    Func wglGetCurrentDC()
    Local $ret = DllCall($__GL_hDLL, "uint", "wglGetCurrentDC")
    If @error Then Return SetError(@error, @extended, $ret)
    ; ---
    Return $ret[0]
    EndFunc ;==>wglGetCurrentDC

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

    Func wglGetCurrentContext()
    Local $ret = DllCall($__GL_hDLL, "uint", "wglGetCurrentContext")
    If @error Then Return SetError(@error, @extended, $ret)
    ; ---
    Return $ret[0]
    EndFunc ;==>wglGetCurrentContext

    [/autoit]
  • Bit-Anzeiger

    • Andy
    • 28. April 2013 um 10:51
    Zitat

    ist eine klasse Idee! Warum bin ich nicht selbst darauf gekommen? Kann sein, dass es an der Uhrzeit hing.

    Guck mal in den Spiegel :D
    Bei Typen wie uns spricht man nicht mehr von Uhrzeit, sondern von ALTER! :rofl:

  • OpenCL meets OpenGL in AutoIt

    • Andy
    • 28. April 2013 um 10:49

    Vielen Dank ihr beiden!

    UEZ,
    verstehe ich ehrlich gesagt nicht, die Adressen innerhalb der GLEW32.DLL werden erkannt und die Funktionen dort wohl auch ausgeführt (ohne Fehlermeldung) aber es wird kein Ergebnis zurückgegeben...
    Ich vermute, entweder wird dein (integrierter ? ) Grafik-chip nicht von OpenGL bzw dem Treiber unterstützt, oder es gibt Trouble mit der CPU Verbindung mit der Darstellung über OpenGL. Da werde ich mich mal drum kümmern.
    Funktionieren die Beispiele von minx´s UDF?

    Es hört sich vielleicht etwas komisch an, den CL-Part auf einer CPU rechnen zu lassen, aber gerade bei Systemen mit in der CPU integriertem Grafikchip macht das Sinn, denn es entfällt komplett der (zeitaufwendige) Transport der Daten zum Grafik-RAM, denn die integrierten Grafikchips benutzen ja einen Teil des RAM, indem wiederum per OpenCL (auf der CPU) gerendert wird!
    Genauso sieht es aus, wenn ich auf meinem Laptop mit AMD-Fusion-Prozessor(integriertem Grafikchip) und zusätzlicher externer Grafik rechne. Beide sind, bei Kombination CL/GL gleich schnell, obwohl der externe Grafikchip doppelt so leistungsfähig ist!
    Erkennbar und erklärbar, wenn man sich die Ergebnisse von Devices64 anschaut, dort sieht man, dass die MEMtime, also die Zeit des Datentransports zum und vom Grafikspeicher beim integriertem Grafikchip NULL beträgt! Logisch, und clever von AMD gemacht, denn es muss kein Speicher verschoben werden, der Grafikchip nutzt ja das RAM der CPU (samt integriertem Grafikchip)!

    @Name 22,
    funktionieren bei dir die Beispiele in minx´s UDF?

  • OpenCL meets OpenGL in AutoIt

    • Andy
    • 27. April 2013 um 22:27

    Danke für die Hinweise!
    Was mich wundert ist die Fehlerausgabe bei euch:

    Code
    @@ Debug(76) : glewbufferdata = Unknown error

    da wird nichts weiter gemacht, als einen Buffer zu erstellen.
    Noch seltsamer ist, dass die DLL ja beigelegt ist und somit Systemunabhängig bei gleichen Eingabeparametern auch ein gleiches Ergebnis ausgeben müsste?!

    Bitte mal folgendes kurzes Script testen und Consolenoutput posten:

    Spoiler anzeigen
    [autoit]

    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_usex64=n
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include "..\Includes\opengl.au3"
    #include <opencl_easy.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    ;#include <GDIConstants.au3>
    #include <Misc.au3>
    ;#include <CLGL_easy.au3>

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

    global $DIB_RGB_COLORS = 0
    Global $glew_hDLL = DllOpen("glew32.dll")

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

    Global Const $GL_ARRAY_BUFFER = 0x8892 ;gehört in include
    Global Const $GL_DYNAMIC_DRAW = 0x88E8 ;gehört in include
    Global Const $GL_BGRA = 0x80E1
    ;INFOS!!!
    ;erst textur in openGL erstellen und binden, dann erst CL-context erstellen

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

    ;programmspezifisch...
    $CL_DEBUGFLAG = 1 ;1 debug aus
    Global $width = 256 * 3 ;breite und höhe des Fensters
    Global $height = 256 * 3

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

    Global $bufferdatasize=$width*$height*4

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

    Global $textur_width = $width, $textur_height = $height ;texturmaße = Fenstermaße
    Global $Textur1

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

    ;OpenGL und extensions initialisieren
    glInit()
    ;gluInit()
    glfwInit()

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

    $a=glewinit()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    ;Fenster einrichten
    glfwOpenWindowHint($GLFW_WINDOW_NO_RESIZE, 1) ; Resize nicht möglich
    glfwOpenWindow($width, $height, 8, 8, 8, 0, 8, 0, $GLFW_WINDOW) ; Fenster öffnen
    glfwSetWindowTitle("tunnelflug ") ; Titel setzen

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

    glMatrixMode($GL_PROJECTION) ; Projektionseinstellungen
    ;gluPerspective(14, $width / $height, 5, 40) ; Perspektive
    glOrtho(0, $width, 0, $height, 0, 128)
    glViewport(0, 0, $width, $height) ; Viewport
    glMatrixMode($GL_MODELVIEW) ; Betrachtungsmodus

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

    ;GLCL context erstellen und an hdc (window) binden
    ;setGLCLcontext() ;aktuellen gl-context an dc (window) binden

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

    $a=glewinit()
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    ;GL-Version überprüfen
    $erg = _glewIsSupported("GL_VERSION_2_0")
    $erg1 = _glewIsSupported("GL_ARB_pixel_buffer_object")
    If $erg = False Or $erg1 = False Then
    MsgBox(0, "GLEW", "GL_VERSION_2_0 or GL_ARB_pixel_buffer_object is not supported!")
    Exit
    EndIf

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

    ;Buffer erstellen....
    $textur_obj_struct = _DllStructCreate16("int[100]")
    $textur_obj_ptr = DllStructGetPtr($textur_obj_struct)

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

    ;bufferhandle holen
    $genbuff = glewGenBuffers(1, $textur_obj_ptr) ;
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $genbuff = ' & $genbuff & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    $textur_Obj = DllStructGetData($textur_obj_struct, 1, 1)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $textur_Obj = ' & $textur_Obj & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    ;.....und an den arraybuffer binden
    $bind = glBindBuffer($GL_ARRAY_BUFFER, $textur_Obj) ;
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $bind = ' & $bind & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    ;Buffergrösse und pointer festlegen und an arraybuffer binden
    $struct = _dllstructcreate16("float[" & $bufferdatasize & "]") ;width * height * 4
    $textur_ptrbuffer = DllStructGetPtr($struct)

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

    $a = glewBufferData($GL_ARRAY_BUFFER, $bufferdatasize, 0, $GL_DYNAMIC_DRAW);
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : glewbufferdata = ' & glewGetErrorString($a) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    $a = glewBufferData($GL_ARRAY_BUFFER, $bufferdatasize, $textur_ptrbuffer, $GL_DYNAMIC_DRAW);
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : glewbufferdata = ' & glewGetErrorString($a) & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    Func glewGetErrorString($nr)
    $aCall = DllCall($glew_hDLL, "str", "_glewGetErrorString@4", 'int', $nr)
    Return $aCall[0]
    EndFunc ;==>glewGetErrorString

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

    Func glewGenBuffers($nr, $ptr) ; by [email='Andy@autoit.de'][/email]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : get_glew_address("__glewGenBuffers") = ' & get_glew_address("__glewGenBuffers") & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aCall = DllCallAddress("int", get_glew_address("__glewGenBuffers"), "int", 1, "uint", $ptr)
    Return $aCall[0]
    EndFunc ;==>glewGenBuffers

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

    Func glBindBuffer($target, $buffer) ; by [email='Andy@autoit.de'][/email]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : get_glew_address("__glewBindBuffer") = ' & get_glew_address("__glewBindBuffer") & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aCall = DllCallAddress("int", get_glew_address("__glewBindBuffer"), "int", $target, "uint", $buffer)
    Return $aCall[0]
    EndFunc ;==>glBindBuffer

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

    Func glewBufferData($target, $size, $data, $usage) ; by [email='Andy@autoit.de'][/email]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : get_glew_address("__glewBufferData") = ' & get_glew_address("__glewBufferData") & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    $aCall = DllCallAddress("int", get_glew_address("__glewBufferData"), "uint", $target, "uint", $size, "ptr", $data, "uint", $usage)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $aCall = ' & $aCall & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Return $aCall[0]
    EndFunc ;==>glewBufferData

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

    Func glewInit()

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

    Local $ret = DllCall($glew_hDLL, "int", "_glewInit@0")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Return $ret[0]
    EndFunc ;==>glewInit

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

    Func _glewIsSupported($str)
    ; ---
    Local $ret = DllCall($glew_hDLL, "int", "_glewIsSupported@4", "str", $str)
    Return SetError($ret[0] = 0, 0, $ret[0] = 1)
    EndFunc ;==>_glewIsSupported

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

    Func get_glew_address($func) ; by [email='Andy@autoit.de'][/email]
    $ret = DllCall("kernel32.dll", "ptr", "GetProcAddress", "ptr", _WinAPI_GetModuleHandle("glew32.dll"), "str", $func)
    ;_arraydisplay($ret)
    $struct = DllStructCreate("dword", $ret[0]) ;einsprungadresse, hier steht der pointer zur funktion
    Return DllStructGetData($struct, 1, 1)
    EndFunc ;==>get_glew_address

    [/autoit]
  • OpenCL meets OpenGL in AutoIt

    • Andy
    • 27. April 2013 um 20:42

    Danke, genau wie ich es gedacht hatte....
    Es funktioniert alles bis zur Device-ID.
    Der Versuch aus Post 5 funktioniert bei dir nicht?

    Komisch, wenn Devices64.au3 bei dir fehlerfrei läuft, könntest du die Console daraus mal posten?

    ah noch etwas ist bei euch beiden anders als bei mir!

    Code
    @@ Debug(76) : glewbufferdata = Unknown error

    da sollte kein Fehler kommen! Ich häng mich mal dran

  • Bit-Anzeiger

    • Andy
    • 27. April 2013 um 20:21

    pff, kürzer :D

    [autoit]

    $aButtons[$i] = GUICtrlCreateButton("0", $iX+(($i>3)*10) + $i * 24, 16, 19, 25, $WS_GROUP)
    ;If $i = 3 Then $iX += 10

    [/autoit]

    so macht man das :D
    und in der Case kann man auch noch drei Zeilen rausschinden, aber ansonsten :thumbup:

    und btw.:

    [autoit]

    ;~ If GUICtrlRead(@GUI_CtrlId) = "0" Then
    GUICtrlSetData(@GUI_CtrlId, 1*(not(number(GUICtrlRead(@GUI_CtrlId)))))
    ;~ Else
    ;~ GUICtrlSetData(@GUI_CtrlId, "0")
    ;~ EndIf

    [/autoit]
  • OpenCL meets OpenGL in AutoIt

    • Andy
    • 27. April 2013 um 20:00

    name22
    du machst bestimmt nichts falsch^^, ich verwende einen AMD-Prozessor und eine AMD Graka sowohl am PC als auch im Laptop...daher geht der Kelch mit Nvidia/Intel komplett an mir vorbei, so dass ich für diese Fälle auch keine Workarounds im Script implementieren kann :huh:
    Ich kämpfe mich mal durch die Logs, vielen Dank dafür!

    //EDIT//
    name22, starte mal pls das GLCL_Tunnelflug.au3 und poste die Consolenausgabe

    minx, die beiden bekommen keinen Rendercontext, wohl deswegen, weil die Intel-CPU als erste Platform vom Treiber geladen wird....ich muss das im Script irgendwie so hinbekommen, dass sämtliche Devices auf allen verfügbaren Platformen so lange durchprobiert werden, bis eins gefunden wird, das funktioniert.

  • OpenCL meets OpenGL in AutoIt

    • Andy
    • 27. April 2013 um 19:20

    @TheShadowAE
    versuche mal, in der CLGL_easy.au3 in Zeile 107

    [autoit]

    $num_platform = 2

    [/autoit]


    könnte sein, dass bei dir die erste Platform die CPU und die zweite die GPU ist...

  • OpenCL meets OpenGL in AutoIt

    • Andy
    • 27. April 2013 um 19:07

    Hi,
    name22
    Sorry, alte Angewohnheiten...
    ersetze einfach

    [autoit]

    #include <GDIConstants.au3>

    [/autoit]

    durch

    [autoit]

    global $DIB_RGB_COLORS = 0

    [/autoit]

    , dann sollte es passen....

    @TheShadowAE
    deine GPU wird ja laut Devices64 unterstützt, aber die Fehlermeldung kommt wohl daher, dass deine CPU als OpenCL-Device ausgesucht wird, ich versuche das mal abzufangen!

  • OpenCL meets OpenGL in AutoIt

    • Andy
    • 27. April 2013 um 10:25

    Hi zusammen,

    vor gut einem Jahr habe ich OpenCL mit OpenGL kombiniert.
    Mit OpenCL werden gut parallelisierbare Berechnungen auf der Grafikkarte oder einem Grafikprozessor oder einer CPU ausgeführt. Diese Berechnungen erfolgen aufgrund der Leistungsfähigkeit der modernen Grafik-Prozessoren wesentlich schneller als auf einer Hightech-CPU. Der "Flaschenhals" ist idR. der Transport der Daten aus dem RAM in den Speicher der Grafikkarte und wieder zurück ins RAM.
    Bei grafischen Berechnungen bietet es sich also an, die Daten, die ja schon fertig berechnet im Speicher der Grafikkarte stehen, von dort direkt anzuzeigen. Und hier kommt OpenGL ins Spiel!

    Ich verwende die mit OpenCL berechneten "Bilder" einfach als OpenGL-Textur, und lasse diese dann im OpenGL-Kontext darstellen. Die berechneten Daten verbleiben also im Speicher der Grafikkarte!
    Das beschleunigt die Darstellung gegenüber dem Verfahren "per GDI blitten" (also Daten aus der Graka in den RAM schreiben und das dann wieder per GDI auf die Graka blitten) um den Faktor 3-5!
    Um das Ganze auch handlebar zu machen, habe ich versucht, die Funktionen so weit wie möglich zu wrappern, damit sich der Anwender nicht mit den OpenCL- und GL-Interna auseinandersetzen muss. Die entsprechenden (meist C++) Beispiele in den OpenCL/GL-SDK´s sind (jedenfalls für mich) extrem unübersichtlich, weiß der Teufel, wieso da keiner auf die Idee kommt, hunderte ewig gleich ablaufende Funktionsschritte in eine Handvoll gewrapperte Funktionen zu schreiben....

    Bei den Beispielen weden die aus den ASM- und OpenCL-Threads bekannten Scriptbeispiele Tunnelflug und Flug durch die Mandelbrotmenge einmal im Fenster komplett und dann als Projektion auf die Oberflächen von mehreren drehenden Würfeln verwendet. Selbst auf meinem Billigrechner mit Low-Lvl-GPU läuft der Tunnelflug in einem 768x768 Fenster mit sehr knapp unter 1000FPS 8o , die Projektion des Fluges durch die Mandelbrotmenge auf den Oberflächen der rotierenden Würfel mit ca. 120FPS.

    Fürs OpenGL habe ich die Funktionen von minx´ens UDF verwendet und ggf. angepasst.
    Die OpenCL-Funktionen kennt der eine oder andere vielleicht schon aus den entsprechenden Threads.
    Verfahrensweg ist folgender:
    - OpenGL-Fenster und -Textur erstellen
    - Mit OpenCL die Textur mit Bilddaten (Pixeln) füllen
    - Textur im OpenGL-Fenster darstellen.

    Spoiler anzeigen
    [autoit]

    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_usex64=n
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include "..\Includes\opengl.au3"
    #include <opencl_easy.au3>
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <GDIConstants.au3>
    #include <Misc.au3>
    #include <CLGL_easy.au3>

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

    ;INFOS!!!
    ;erst textur in openGL erstellen und binden, dann erst CL-context erstellen

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

    ;programmspezifisch...
    $CL_DEBUGFLAG = 1 ;1 debug aus
    Global $width = 256 * 3 ;breite und höhe des Fensters
    Global $height = 256 * 3
    Local $iAlpha = 0.00 ; Rotationswinkel um den Würfel zu drehen.

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

    Global $textur_width = $width, $textur_height = $height ;texturmaße = Fenstermaße

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

    Local $step = 1.02 ;das ist die Schrittweite, um die der Tunnelflug ein Frame weiter gezeichnet wird
    Local $steps = 0 ;Beginn des Fluges...

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

    $KernelSource = FileRead("Tunnelflug.cl") ;kernelsource aus datei laden
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $KernelSource = ' & $KernelSource & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

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

    ;OpenGL und extensions initialisieren
    glInit()
    ;gluInit()
    glfwInit()

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

    ;Fenster einrichten
    glfwOpenWindowHint($GLFW_WINDOW_NO_RESIZE, 1) ; Resize nicht möglich
    glfwOpenWindow($width, $height, 8, 8, 8, 0, 8, 0, $GLFW_WINDOW) ; Fenster öffnen
    glfwSetWindowTitle("tunnelflug ") ; Titel setzen

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

    glMatrixMode($GL_PROJECTION) ; Projektionseinstellungen
    ;gluPerspective(14, $width / $height, 5, 40) ; Perspektive
    glOrtho(0, $width, 0, $height, 0, 128)
    glViewport(0, 0, $width, $height) ; Viewport
    glMatrixMode($GL_MODELVIEW) ; Betrachtungsmodus

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

    ;GLCL context erstellen und an hdc (window) binden
    setGLCLcontext() ;aktuellen gl-context an dc (window) binden

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

    ;leere textur erstellen mit höhe und breite
    Local $textur1 = createGLCLtexturebuffer($textur_width, $textur_height)

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

    ;textur bereitstellen
    glEnable($GL_TEXTURE_2D) ; aktuelle Textur einschalten
    ;glEnable($GL_DEPTH_TEST) ;tiefentest bei 3d, unbedingt beim drehenden würfel mal auskommentieren^^

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

    setGLCLautokernel() ;CL-equipment initialisieren, kernel kompilieren usw

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

    ;bevor GL auf die Buffer zugreift, MUSS CL der Zugriff entzogen werden!!!
    clFinish($command_queue)

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

    ;debugflag ausschalten 1=einschalten ;erzeugt debugausgabe in der console
    $CL_DEBUGFLAG = 0 ;Debug-Ausgabe ausschalten, um Geschwindigkeit zu erhöhen

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

    glClear($GL_COLOR_BUFFER_BIT + $GL_DEPTH_BUFFER_BIT) ;Fenster clear
    glLoadIdentity() ;Ersetzt die aktuelle Matrix durch die Einheitsmatrix
    ;gldisable($GL_CULL_FACE)
    ;
    glTranslatef($width / 2, $height / 2, 0)

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

    AdlibRegister("fps", 1000) ;1x pro sekunde die FPS darstellen
    _CL_SetArg(0, "ptr*", $writetoimage) ;erstes argument für den kernel ist das IMG
    ;hauptschleife
    While glfwGetWindowParam($GLFW_OPENED) And Not glfwGetKey($GLFW_KEY_ESC);
    ; Sleep(10)
    glFlush() ;GL erlaubt CL den Zugriff auf die Buffer

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

    ;Kernel Parameter
    $steps += $step

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

    _CL_SetArg(1, "float*", $steps) ;...und an kernel übergeben

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

    ;ACHTUNG, da SIMD-kernel, nur 1/4 der daten benötigt!!! s. $globalDS !!!!
    executeCLkernel() ;Opencl-kernel ausführen, berechnet die Textur"pixel"

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

    ;glClear($GL_COLOR_BUFFER_BIT + $GL_DEPTH_BUFFER_BIT) ;
    glBindTexture($GL_TEXTURE_2D, $textur1) ;

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

    glBegin($GL_QUADS) ;
    glTexCoord2f(0, 1) ;
    glVertex2f(-$width / 2, -$height / 2) ;
    glTexCoord2f(1, 1) ;
    glVertex2f(+$width / 2, -$height / 2) ;
    glTexCoord2f(1, 0) ;
    glVertex2f(+$width / 2, +$height / 2) ;
    glTexCoord2f(0, 0) ;
    glVertex2f(-$width / 2, +$height / 2) ;
    glEnd() ;
    glFlush()

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

    glfwSwapBuffers() ; Buffer tauschen.
    $fps += 1 ;FPS FTW :o)

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

    WEnd

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

    ; Aufräumen:
    glDeleteTextures(1, $textur1)
    glfwTerminate()
    glTerminate()

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

    ;**********************Ende*********************

    [/autoit]

    Ich habe die von mir verwendeten OpenGL-DLL´s und deren Erweiterungen mitgegeben, wahrscheinlich kann man auf diese verzichten, wenn OpenGL und CL auf dem Rechner installiert sind.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. bspw. in den Ordner Examples aus minx´s OpenGL UDF kopieren

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
    Wer Lust hat, kann ja 2 Texturen erstellen, schön wäre der durch den Tunnel fliegende mit der Mandelbrot-Oberfläche rotierende Würfel....ob das was für die nächste Revision in 1K wäre^^

    Dateien

    Examples.zip 650,39 kB – 342 Downloads CLGL Mandelbrot W 60,74 kB – 0 Downloads CLGL Tunnelflug W 94,83 kB – 0 Downloads CLGL Tunnelflug.jpg 107,3 kB – 0 Downloads
  • Kann Fenester nicht auswählen bzw. schließen

    • Andy
    • 20. April 2013 um 10:11
    Zitat

    Solche simplen Fragen kannst du dir übrigens selbst beantworten, indem du den Hilfeartikel zu der jeweiligen Funktion liest:

    ...oder hier im Forumstext auf die Funktion klickst, oder in Scite auf die Funktion klickst und F1 drückst, oder oder oder....die deutsche Hilfe runterladen setze ich einfach mal voraus, die gibts hier im Forum links bei den Downloads.

    Zitat

    ie Position von Controls wird in Pixeln angegeben, aber nicht in Anteilen der Auflösung. Pixel sind Pixel, egal bei welcher Auflösung, Monitorgröße etc..

    die Klickposition ist die Position des Klicks innerhalb des Controls. D.h. solange sich die Größe des Controls nicht gravierend ändert, sollte da nichts schiefgehen, auch bei einer veränderten Bildschirmauflösung.
    Wichtig bzw nützlich sind diese Koordinaten ja nur bei Controls, die bspw. mehrere Icons enthalten. Wenn das Control nur aus "einem Stück" besteht (nicht wie bspw eine Dropdownliste), kann man die Koordinaten weglassen.

  • Kann Fenester nicht auswählen bzw. schließen

    • Andy
    • 19. April 2013 um 18:23

    Hi,
    ich verwende bei AutoIt Window Info grundsätzlich den Reiter "Summary" um daraus die Parameter für bspw. den ControlSend()-Befehl herauszukopieren.
    Bsp:

    Spoiler anzeigen
    Code
    >>>> Window <<<<
    Title:	Expicula - [AutoIt3 :: Lokaler Datenträger (C:)]
    Class:	Afx:400000:8:10011:0:5307dd
    Position:	330, 177
    Size:	1090, 873
    Style:	0x14CF8000
    ExStyle:	0x00000100
    Handle:	0x0015057C
    
    
    >>>> Control <<<<
    Class:	ToolbarWindow32
    Instance:	11
    ClassnameNN:	ToolbarWindow3211
    Name:	
    Advanced (Class):	[CLASS:ToolbarWindow32; INSTANCE:11]
    ID:	302
    Text:	Laufwerke
    Position:	-2, 24
    Size:	239, 26
    ControlClick Coords:	60, 12
    Style:	0x5400984E
    ExStyle:	0x00000000
    Handle:	0x00230600
    
    
    >>>> Mouse <<<<
    Position:	392, 263
    Cursor ID:	0
    Color:	0xACACAC
    Alles anzeigen
    [autoit]


    opt ("WinTitleMatchMode",2) ;erkennt Teile des Titels
    opt ("MouseCoordMode",2) ;relative Koordinaten zum aktiven Fenster
    WinActivate("Expicula -") ;Fenster aktivieren

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

    ControlClick("Expicula -","","[CLASS:ToolbarWindow32; INSTANCE:11]","left",1,60,12)

    [/autoit]
  • Herzlichen Glückwunsch i2c und yxyx (nachträglich auch Blowcake)

    • Andy
    • 18. April 2013 um 21:19

    Glücklichen Herzwunsch und alles Gute!

  • Bild mit 256 Farben erstellen

    • Andy
    • 14. April 2013 um 10:28

    Hi,
    Make-Grafik hat Recht!
    Am einfachsten ist wieder mal das "Oldschool"-Bitmap-Format BMP, da wird einfach hinter den Header die Farbtabelle gehängt. Diese kann man einfach beschreiben und so seine "eigenen" Farben verwenden bzw. konvertieren.
    Irgendwo hier im Forum müssten einige Scripte von mir rumschwirren, die sowohl den Aufbau des Headers als auch die Farbtabelle beinhalten. Wenn ich das richtig in Erinnerung habe, wurden die "Bilder" damit ohne Umweg über eine "Zeichnung" bzw. GUI direkt in die Datei geschrieben....
    Da das Dateiformat so einfach ist, könnte man eine "leere" BMP-Datei mit den Parametern des Bildes erstellen und die Farben direkt in die Farbtabelle eintragen.
    Dann müssen nur noch die "Pixel" ausgefüllt werden und alles ist paletti.

  • Heuristik auslesen und Vergleichen.

    • Andy
    • 13. April 2013 um 17:10

    Hi,

    Zitat

    Außerdem bezweifle ich, dass stringinstr mit Binärdaten funktioniert

    ich bezweifle das nicht^^, denn es funktioniert ausgezeichnet! Nicht nur mit "Binärdaten" sondern (anders als einige Stringfunktionen wie z.B. RegEX) mit allen Ascii-Zeichen von 0 bis 255.

    Mit dem Rest deines Posts gehe ich konform, denn was ein Variablenname mit einem Begriff aus der Analytik gemein hat, erkennt wohl nur jemand mit "begrenztem Wissen"! ...ööhm ich korrigiere, SEHR begrenztem Wissen! ;)

  • Bild mit 256 Farben erstellen

    • Andy
    • 13. April 2013 um 17:00

    Hi,

    Zitat

    wird ein Bild das man in einer GUI malt immer mit 16.7 Millionen Farben erstellt?


    Das Bild das DU in DEINE Gui malst, wird grundsätzlich in so vielen Farben gemalt wie DU das vorgibst!
    Will sagen, wer hindert dich daran, 2,3,17 oder 957 Farben vorzugeben?!

    Zitat

    Ist es nicht möglich ein Bild direkt mit 256 Farben zu zeichnen? Muss ich wirklich den Umweg über Clone machen?

    s.o. natürlich musst du den Weg über Clone nicht gehen, das ist "ein" möglicher Weg der Problemlösung.
    Zeige doch erstmal dein Script.

    Zitat

    Mein "Clone" hat letztendlich andere Farben als das von mir angefertigte Originalbild. Ich hätte das gerne vermieden...

    Das hat mit den Farbtabellen zu tun, zeig einfach mal dein Script^^

  • AutoIt-only 3D Engine. Mit Farb-Shading, Models aus Dateien, Rotation, Zoom, uvm.

    • Andy
    • 13. April 2013 um 16:48

    Hi!
    Sehr einfach, sehr schön!
    GENAU SO (einfach) muss das sein^^

  • Koordinatensystem - Brauche Hilfe

    • Andy
    • 11. April 2013 um 20:37

    Hi,
    den Vektor zu zeichnen ist sehr einfach :D
    Gehen wir mal davon aus die x-Achse geht nach rechts,die y-Achse nach oben, und die z-Achse 45° nach "hinten" (Richtung oben rechts, mit irgendeinem Winkel, ist völlig schnurz)

    Jede der "Achsen" hat eine Länge von 1 und spannt somit einen Raum auf. Den "Würfel" kannst du zeichnen? Dann ist der Rest nicht schwer!
    Willst du jetzt bspw. den Punkt x=0.3, y=0.5 und z=0.8 einzeichnen machst du das folgendermassen:
    -Gehe von 0.0.0 auf der x-Achse 0.3 Einheiten nach rechts.
    -Gehe parallel zur y-Achse 0.5 Einheiten nach oben
    -Gehe parallel zur z-Achse 0.8 Einheiten nach "hinten" (rechts oben)
    Die Reihenfolge, auf welcher Achse du startest, ist völlig egal. Du kannst auch erst nach y, dann nach z und dann nach x laufen, du kommst immer an einem Punkt "im Raum" an.

  • Die Sache mit dem Alphakanal

    • Andy
    • 8. April 2013 um 20:45

    Bevor du jetzt an den Orginaldateien rumexperimentierst, mach erstmal Sicherungskopien.
    Ich vermute, beim Schreiben/Speichern ist etwas durcheinandergekommen.
    Solange du nicht versucht hast, an den schon verpfuschten Dateien weiter rumzuexperimentieren, ist ggf. noch etwas zu retten....

  • String packen ohne auf Festplatte auszulagern ?

    • Andy
    • 8. April 2013 um 20:38

    such mal mnach _LZNTCOMPRESS() und _LZNTDecompress()
    damit komprimierst du im Speicher, je nach Komprimierungsgrad dauert das aber auch mal 1-2 Sekunden

    http://www.autoitscript.com/forum/topic/87…on/#entry627588

    *Arm aus der Sonne leg*^^

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™