Esempio n. 1
0
        public static void Initialize()
        {
            var window = new Form();
            IntPtr direct3D = Direct3DAPI.Direct3DCreate9(Direct3DAPI.SDKVersion);
            if (direct3D == IntPtr.Zero)
                throw new Exception("Direct3DCreate9 failed (SDK Version: " + Direct3DAPI.SDKVersion + ")");
            var pp = new Direct3DAPI.PresentParameters { Windowed = true, SwapEffect = 1, BackBufferFormat = 0 };
            var createDevice = Helper.Magic.RegisterDelegate<Direct3DAPI.Direct3D9CreateDevice>(Helper.Magic.GetObjectVtableFunction(direct3D, 16));
            IntPtr device;
            if (createDevice(direct3D, 0, 1, window.Handle, 0x20, ref pp, out device) < 0)
                throw new Exception("Failed to create device");

            EndScenePointer = Helper.Magic.GetObjectVtableFunction(device, Direct3DAPI.EndSceneOffset);
            ResetPointer = Helper.Magic.GetObjectVtableFunction(device, Direct3DAPI.ResetOffset);
            ResetExPointer = Helper.Magic.GetObjectVtableFunction(device, Direct3DAPI.ResetExOffset);

            var deviceRelease = Helper.Magic.RegisterDelegate<Direct3DAPI.D3DRelease>(Helper.Magic.GetObjectVtableFunction(device, 2));
            var release = Helper.Magic.RegisterDelegate<Direct3DAPI.D3DRelease>(Helper.Magic.GetObjectVtableFunction(direct3D, 2));

            deviceRelease(device);
            release(direct3D);
            window.Dispose();

            // TODO: replace this with a VTable hook
            _endSceneDelegate = Helper.Magic.RegisterDelegate<Direct3DAPI.Direct3D9EndScene>(EndScenePointer);
            _endSceneHook = Helper.Magic.Detours.CreateAndApply(_endSceneDelegate,
                                                                new Direct3DAPI.Direct3D9EndScene(EndSceneHook),
                                                                "EndScene");
        }
Esempio n. 2
0
        public static void Initialize()
        {
            var    window   = new Form();
            IntPtr direct3D = Direct3DAPI.Direct3DCreate9(Direct3DAPI.SDKVersion);

            if (direct3D == IntPtr.Zero)
            {
                throw new Exception("Direct3DCreate9 failed (SDK Version: " + Direct3DAPI.SDKVersion + ")");
            }
            var pp = new Direct3DAPI.PresentParameters {
                Windowed = true, SwapEffect = 1, BackBufferFormat = 0
            };
            var    createDevice = Helper.Magic.RegisterDelegate <Direct3DAPI.Direct3D9CreateDevice>(Helper.Magic.GetObjectVtableFunction(direct3D, 16));
            IntPtr device;

            if (createDevice(direct3D, 0, 1, window.Handle, 0x20, ref pp, out device) < 0)
            {
                throw new Exception("Failed to create device");
            }

            EndScenePointer = Helper.Magic.GetObjectVtableFunction(device, Direct3DAPI.EndSceneOffset);
            ResetPointer    = Helper.Magic.GetObjectVtableFunction(device, Direct3DAPI.ResetOffset);
            ResetExPointer  = Helper.Magic.GetObjectVtableFunction(device, Direct3DAPI.ResetExOffset);

            var deviceRelease = Helper.Magic.RegisterDelegate <Direct3DAPI.D3DRelease>(Helper.Magic.GetObjectVtableFunction(device, 2));
            var release       = Helper.Magic.RegisterDelegate <Direct3DAPI.D3DRelease>(Helper.Magic.GetObjectVtableFunction(direct3D, 2));

            deviceRelease(device);
            release(direct3D);
            window.Dispose();

            _endSceneDelegate = Helper.Magic.RegisterDelegate <Direct3DAPI.Direct3D9EndScene>(EndScenePointer);
            _endSceneHook     = Helper.Magic.Detours.CreateAndApply(_endSceneDelegate,
                                                                    new Direct3DAPI.Direct3D9EndScene(EndSceneHook),
                                                                    "EndScene");
            _resetDelegate = Helper.Magic.RegisterDelegate <Direct3DAPI.Direct3D9Reset>(ResetPointer);
            _resetHook     = Helper.Magic.Detours.CreateAndApply(_resetDelegate,
                                                                 new Direct3DAPI.Direct3D9Reset(ResetHook),
                                                                 "Reset");
        }
Esempio n. 3
0
 private static int ResetHook(IntPtr device, Direct3DAPI.PresentParameters pp)
 {
     return((int)_resetHook.CallOriginal(device, pp));
 }