Пример #1
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
 public static int Reset(IntPtr ptr, PresentParameters *presentParams)
 {
     return(Interop.Calli(ptr, (IntPtr)presentParams, (*(IntPtr **)ptr)[16]));
 }
Пример #5
0
        /// <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);
        }
Пример #6
0
 private static IntPtr ResetImplStatic(IntPtr device, PresentParameters *presentParameters) => Instance.ResetImpl(device, presentParameters);