D3D9 Udf

  • Hallo Autoit Community!
    Ich habe vor einiger Zeit mal für ein Spiel angefangen eine Direct3D9 UDF zu erstellen. Mitlerweile liegt das Projekt leider brach, aber vielleicht hat ja einer von euch Interresse weiter zu arbeiten, oder das bereits fertiggestellte zu verwenden.
    Die UDF benutzt die AutoitObject.au3, welche beigelegt ist. Mein Dank geht übrigens an Prog@ndy, der mir durch die entwicklung dieser und einiger zusätzlicher Informationen einiges an Zeit ersparte.

    Hier ein PreView der 3 beigelegten Beispiele.
    [Blockierte Grafik: http://img3.imagebanana.com/img/ozt8jzuz/PreView.PNG]

    Erfolgreich getestet Wurde die UDF auf WinXP 32Bit und Win7 64Bit.

    Außerdem hatte ich noch an einer XACT (3D SoundEngine) gearbeitet, mit der sich auch bereits Sounds abspielen lassen. Es wird aber Vorwissen über XACT benötigt um mit diesen Funktionen etwas anfangen zu können.

    Spoiler anzeigen
    [autoit]

    #include-once
    #include "AutoitObject.au3"
    #include "WinApi.au3"
    #include "D3D9 Constants.au3"

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

    Func _XACT3Create(ByRef $oXACT3Engine, $tEngineParameters = 0)
    Local $CLSID_XACTEngine = _AutoItObject_CLSIDFromString("{94c1affa-66e7-4961-9521-cfdef3128d4f}")
    Local $IID_IXACT3Engine = _AutoItObject_CLSIDFromString("{e72c1b9a-d717-41c0-81a6-50eb56e80649}")
    If Not $CLSID_XACTEngine Or Not $IID_IXACT3Engine Then SetError(1, 0, 0)
    Local $pXACT3Engine, $iErr

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

    If Not $tEngineParameters Then $tEngineParameters = DllStructCreate($tagXACT_RUNTIME_PARAMETERS)

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

    If Not _AutoItObject_CoCreateInstance(DllStructGetPtr($CLSID_XACTEngine), 0, 1, DllStructGetPtr($IID_IXACT3Engine), $pXACT3Engine) Then SetError(2, 0, 0)
    $oXACT3Engine = _AutoItObject_WrapperCreate($pXACT3Engine, $tagIXACT3EngineInterface)
    $iErr = $oXACT3Engine.Initialize("long", "ptr", Number(DllStructGetPtr($tEngineParameters)))
    If $iErr[0] Then SetError(3, 0, $pXACT3Engine)

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

    Return $pXACT3Engine
    EndFunc ;==>_XACT3Create

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

    Func _XACT3LoadXWB(ByRef $oXACT3Engine, ByRef $oWaveBank, $sFileXWB)
    Local $hWaveFile, $hMapFile, $pWaveBankMapping, $pWaveBank, $iFileSizeXWB

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

    $hWaveFile = _WinAPI_CreateFile($sFileXWB, 2, 2, 2)
    If Not $hWaveFile Then SetError(1, 0, 0)
    $iFileSizeXWB = FileGetSize($sFileXWB)
    $hMapFile = _CreateFileMapping($hWaveFile, 0, 2, 0, $iFileSizeXWB, 0)
    If Not $hMapFile Then SetError(2, 0, 0)
    $pWaveBankMapping = _MapViewOfFile($hMapFile, 4, 0, 0, 0)
    If Not $pWaveBankMapping Then SetError(3, 0, 0)

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

    $pWaveBank = $oXACT3Engine.CreateInMemoryWaveBank("long", "ptr", Number($pWaveBankMapping), "dword", $iFileSizeXWB, "dword", 0, "dword", 0, "ptr*", 0)
    $pWaveBank = $pWaveBank[6]
    If Not $pWaveBank Then SetError(4, 0, 0)

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

    $oWaveBank = _AutoItObject_WrapperCreate($pWaveBank, $tagIXACT3WaveBank)

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

    Return $pWaveBank
    EndFunc ;==>_XACT3LoadXWB

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

    Func _XACT3LoadXSB(ByRef $oXACT3Engine, ByRef $oSoundBank, $sFileXSB)
    Local $hSoundBankFile, $iBytesRead, $iFileSizeXSB, $pSoundBank
    Static $tXSBBuffer

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

    $hSoundBankFile = _WinAPI_CreateFile($sFileXSB, 2, 2, 2)
    If Not $hSoundBankFile Then SetError(1, 0, 0)
    $iFileSizeXSB = FileGetSize($sFileXSB)
    $tXSBBuffer = DllStructCreate(StringFormat("byte[%i]", $iFileSizeXSB))
    _WinAPI_ReadFile($hSoundBankFile, DllStructGetPtr($tXSBBuffer, 1), $iFileSizeXSB, $iBytesRead)
    If Not $iBytesRead Then SetError(2, 0, 0)

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

    $pSoundBank = $oXACT3Engine.CreateSoundBank("long", "ptr", Number(DllStructGetPtr($tXSBBuffer, 1)), "dword", $iFileSizeXSB, "dword", 0, "dword", 0, "ptr*", 0)
    $pSoundBank = $pSoundBank[6]

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

    $oSoundBank = _AutoItObject_WrapperCreate($pSoundBank, $tagIXACT3SoundBank)

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

    Return $pSoundBank
    EndFunc ;==>_XACT3LoadXSB

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

    Func _XACT3GetCueIndex(ByRef $oSoundBank, $sName)
    Local $iCueIndex
    $iCueIndex = $oSoundBank.GetCueIndex("USHORT", "str", $sName)

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

    Return $iCueIndex[0]
    EndFunc ;==>_XACT3GetCueIndex

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

    Func _CreateFileMapping($hFile, $lpAttributes, $flProtect, $dwMaximumSizeHigh, $dwMaximumSizeLow, $lpName)
    Local $iErr, $hOpen
    $hOpen = DllCall("Kernel32.dll", "HANDLE", "CreateFileMapping", "HANDLE", $hFile, "ptr", $lpAttributes, "dword", $flProtect, "dword", $dwMaximumSizeHigh, "dword", $dwMaximumSizeLow, "str", $lpName)
    $iErr = @error
    If $iErr Then SetError($iErr, 0, $hOpen)
    Return $hOpen[0]
    EndFunc ;==>_CreateFileMapping

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

    Func _MapViewOfFile($hFileMappingObject, $dwDesiredAccess, $dwFileOffsetHigh, $dwFileOffsetLow, $dwNumberOfBytesToMap)
    Local $iErr, $hOpen, $SIZE_T = "UINT"
    If @AutoItX64 Then $SIZE_T = "UINT64"
    $hOpen = DllCall("Kernel32.dll", "ptr", "MapViewOfFile", "HANDLE", $hFileMappingObject, "dword", $dwDesiredAccess, "dword", $dwFileOffsetHigh, "dword", $dwFileOffsetLow, $SIZE_T, $dwNumberOfBytesToMap)
    $iErr = @error
    If $iErr Then SetError($iErr, 0, $hOpen)
    Return $hOpen[0]
    EndFunc ;==>_MapViewOfFile

    [/autoit]

    Ich entschuldige mich hiermit nochmal, das ganze Projekt aus Zeit und Motivationsgründen nicht so vorstellen zu können wie es die Arbeit verdienen würde.
    Freue mich dennoch über Rückmeldungen,
    Deathly Assassin!

  • Tschuldigung für die späte Antwort aber ich habe mich heute mal an deine UDF gewagt.Jetzt wollte ich auch einmal eigene Meshs erstellen.Jetzt frage ich mich,wie mit welchem Programm hast du deine Meshs erstellt oder bearbeitet?