WineやWindows 2000でカスタムメイド3D2の一部機能が動作しない件の補足情報

    public static byte[] GetPixelArrayNativeFromRGBA8(Texture2D tex)
    {
        unsafe
        {
            byte* numPointer;
            Cm3D2Dll cm3D2Dll = DLLManager.cm3d2dll;
            if (cm3D2Dll == null || tex == null)
            {
                throw new ArgumentNullException();
            }
            int num = tex.width * tex.height * 4;
            IntPtr intPtr = Cm3D2Dll.CreateDeviceData();
            byte[] numArray = new byte[num];
            if (numArray == null || (int)numArray.Length == 0)
            {
                numPointer = null;
            }
            else
            {
                numPointer = &numArray[0];
            }
            fixed (byte* numPointer1 = numPointer)
            {
                cm3D2Dll.call.color_palette.CreateByteDataFromTexture(intPtr, tex.GetNativeTexturePtr(), (IntPtr)numPointer1);
            }
            Cm3D2Dll.DeleteDeviceData(intPtr);
            cm3D2Dll = null;
            return numArray;
        }
    }

赤字で書いた箇所で渡される intPtr の 構造体がCm3D2Dll.CreateDeviceData()で 返ってこないのが原因らしい

device_hook.dll のCreateDeviceData がコールされるのだけど、直接 DirectX11の関数が呼ばれてるわけではないので、よく分からない・ω・

 DLL_Color_CreateByteDataFromTexture:
          push    ebp
          mov    ebp,esp
          mov    ecx,[ebp+08h]
          test    ecx,ecx
          jz     L10004773
          mov    edx,[ebp+0Ch]
          test    edx,edx
          jz     L10004773
          mov    eax,[ebp+10h]
          test    eax,eax
          jz     L10004773
          push    eax
          call    SUB_L100096CF
          add    esp,00000004h
          pop    ebp
          retn

呼び出し先はここ。

WineやWindows 2000でカスタムメイド3D2の一部機能が動作しない原因が判明

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です