예제 #1
0
        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);
        }
예제 #2
0
        // 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);
        }
예제 #3
0
        // 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));
        }