unsafe int PresentHook(IntPtr devicePtr, SharpDX.Rectangle *pSourceRect, SharpDX.Rectangle *pDestRect, IntPtr hDestWindowOverride, IntPtr pDirtyRegion) { // Example of using delegate to original function pointer to call original method //var original = (Direct3D9Device_PresentDelegate)(Object)Marshal.GetDelegateForFunctionPointer(id3dDeviceFunctionAddresses[(int)Direct3DDevice9FunctionOrdinals.Present], typeof(Direct3D9Device_PresentDelegate)); //try //{ // unsafe // { // return original(devicePtr, ref pSourceRect, ref pDestRect, hDestWindowOverride, pDirtyRegion); // } //} //catch { } _isUsingPresent = true; Device device = (Device)devicePtr; DoCaptureRenderTarget(device, "PresentHook"); if (pSourceRect == null || *pSourceRect == SharpDX.Rectangle.Empty) { device.Present(); } else { if (hDestWindowOverride != IntPtr.Zero) { device.Present(*pSourceRect, *pDestRect, hDestWindowOverride); } else { device.Present(*pSourceRect, *pDestRect); } } return(SharpDX.Result.Ok.Code); }
// Used in the overlay unsafe int PresentExHook(IntPtr devicePtr, SharpDX.Rectangle *pSourceRect, SharpDX.Rectangle *pDestRect, IntPtr hDestWindowOverride, IntPtr pDirtyRegion, Present dwFlags) { _isUsingPresent = true; DeviceEx device = (DeviceEx)devicePtr; DoCaptureRenderTarget(device, "PresentEx"); // Region region = new Region(pDirtyRegion); if (pSourceRect == null || *pSourceRect == SharpDX.Rectangle.Empty) { device.PresentEx(dwFlags); } else { if (hDestWindowOverride != IntPtr.Zero) { device.PresentEx(dwFlags, *pSourceRect, *pDestRect, hDestWindowOverride); } else { device.PresentEx(dwFlags, *pSourceRect, *pDestRect); } } return(SharpDX.Result.Ok.Code); }
// Used in the overlay unsafe int PresentExHook(IntPtr devicePtr, SharpDX.Rectangle *pSourceRect, SharpDX.Rectangle *pDestRect, IntPtr hDestWindowOverride, IntPtr pDirtyRegion, Present dwFlags) { _isUsingPresent = true; DeviceEx device = (DeviceEx)devicePtr; DoCaptureRenderTarget(device, "PresentEx"); return(Direct3DDeviceEx_PresentExHook.Original(devicePtr, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion, dwFlags)); }