private IntPtr ResetImpl(IntPtr device, PresentParameters *presentParameters) { // With multi-viewports, ImGui might call EndScene again; so we need to prevent stack overflow here. if (_resetRecursionLock) { Debug.WriteLine($"[DX9 Reset] Discarding via Recursion Lock"); return(_endSceneHook.OriginalFunction.Value.Invoke(device)); } _resetRecursionLock = true; try { // Ignore windows which don't belong to us. if (!ImguiHook.CheckWindowHandle(presentParameters->DeviceWindowHandle)) { Debug.WriteLine($"[DX9 Reset] Discarding Window Handle {(long)presentParameters->DeviceWindowHandle:X}"); return(_resetHook.OriginalFunction.Value.Invoke(device, presentParameters)); } Debug.WriteLine($"[DX9 Reset] Reset with Handle {(long)presentParameters->DeviceWindowHandle:X}"); ImGui.ImGuiImplDX9InvalidateDeviceObjects(); var result = _resetHook.OriginalFunction.Value.Invoke(device, presentParameters); ImGui.ImGuiImplDX9CreateDeviceObjects(); return(result); } finally { _resetRecursionLock = false; } }
/// <summary>To be documented.</summary> public readonly unsafe int GetPresentParameters(PresentParameters *pPresentationParameters) { var @this = (IDirect3DSwapChain9 *)Unsafe.AsPointer(ref Unsafe.AsRef(in this)); int ret = default; ret = ((delegate * unmanaged[Cdecl] < IDirect3DSwapChain9 *, PresentParameters *, int >)LpVtbl[9])(@this, pPresentationParameters); return(ret); }
public static IntPtr CreateDevice(IntPtr ptr, int adapter, DeviceType deviceType, IntPtr hFocusWindow, CreateFlags behaviorFlags, PresentParameters *presentParams) { IntPtr devicePtr = IntPtr.Zero; int res = Interop.Calli(ptr, adapter, (int)deviceType, hFocusWindow, (int)behaviorFlags, (IntPtr)presentParams, (IntPtr)(void *)&devicePtr, (*(IntPtr **)ptr)[16]); if (res < 0) { throw new SharpDXException(res); } return(devicePtr); }
public static int Reset(IntPtr ptr, PresentParameters *presentParams) { return(Interop.Calli(ptr, (IntPtr)presentParams, (*(IntPtr **)ptr)[16])); }
/// <summary>To be documented.</summary> public readonly unsafe int CreateDevice(uint Adapter, Devtype DeviceType, nint hFocusWindow, uint BehaviorFlags, PresentParameters *pPresentationParameters, ref IDirect3DDevice9 *ppReturnedDeviceInterface) { var @this = (IDirect3D9 *)Unsafe.AsPointer(ref Unsafe.AsRef(in this)); int ret = default; fixed(IDirect3DDevice9 **ppReturnedDeviceInterfacePtr = &ppReturnedDeviceInterface) { ret = ((delegate * unmanaged[Cdecl] < IDirect3D9 *, uint, Devtype, nint, uint, PresentParameters *, IDirect3DDevice9 **, int >)LpVtbl[16])(@this, Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, ppReturnedDeviceInterfacePtr); } return(ret); }
private static IntPtr ResetImplStatic(IntPtr device, PresentParameters *presentParameters) => Instance.ResetImpl(device, presentParameters);