예제 #1
0
        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);
        }
예제 #2
0
 protected override void OnMouseLeave(MouseEventArgs e)
 {
     base.OnMouseLeave(e);
     _inputBridge.ClearInputs();
 }