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 |
呼び出し先はここ。
Comments