public GLControl(Context context, InputBridge inputBridge) : base() { _context = context; _inputBridge = inputBridge; _inputBridge.OnSetCursorPosition += (o, v2) => { if (!_mouseLocked) { var p = ToScreenPos(v2); NativeMethods.SetCursorPos((int)p.X, (int)p.Y); } }; _inputBridge.OnSetMouselock += (o, v) => { _mouseLocked = v; Mouse.OverrideCursor = v ? Cursors.None : null; }; Focusable = true; Loaded += (o, e) => { _context.Resolution = new((int)RenderSize.Width, (int)RenderSize.Height); _center = new((float)RenderSize.Width / 2f, (float)RenderSize.Height / 2f); }; Ready += _context.GraphicsInit; Render += (time) => { if (_context.IsFocused && !IsFocused) { inputBridge.ClearInputs(); } _context.IsFocused = IsFocused; _context.Update(time.TotalSeconds); if (_mouseLocked && IsFocused) { var p = ToScreenPos(_center); NativeMethods.SetCursorPos((int)p.X, (int)p.Y); } context.Render(); }; GLWpfControlSettings settings = new() { GraphicsContextFlags = ContextFlags.ForwardCompatible, MajorVersion = 4, MinorVersion = 6 }; Start(settings); }
protected override void OnMouseLeave(MouseEventArgs e) { base.OnMouseLeave(e); _inputBridge.ClearInputs(); }