Beispiel #1
0
        internal static void RenderChild(int childID)
        {
            State.CurrentContextID = childID;
            RenderFrame?.Invoke(null, State);

            TextureManager.CheckForPurge();
        }
        //public override void Refresh()
        //{
        //	this.Context.MakeCurrent();
        //	OnDrawFrame();
        //}

        protected virtual void OnDrawFrame()
        {
            GL.glClearColor(0, 0, 0, 1);
            GL.glClear(GL.GL_COLOR_BUFFER_BIT);
            RenderFrame?.Invoke();
            Context.SwapBuffers();
        }
        protected override void OnOpenGlRender(GlInterface gl, int fb)
        {
            var elapsed = _stopwatch.ElapsedMilliseconds / 1000.0;

            if (elapsed <= 0)
            {
                if (!_stopwatch.IsRunning)
                {
                    _stopwatch.Start();
                    Dispatcher.UIThread.Post(InvalidateVisual, DispatcherPriority.Background);
                }
                return;
            }
            _stopwatch.Restart();
            try
            {
                UpdateFrame?.Invoke(new FrameEventArgs(elapsed));
                RenderFrame?.Invoke(new FrameEventArgs(elapsed));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }


            Dispatcher.UIThread.Post(InvalidateVisual, DispatcherPriority.Background);
        }
Beispiel #4
0
        protected void OnRenderFrame(out double duration, out bool shouldStop)
        {
            RenderFrameEventArgs ea = new RenderFrameEventArgs();

            RenderFrame?.Invoke(this, ea);
            duration   = ea.Duration;
            shouldStop = ea.ShouldStop;
        }
Beispiel #5
0
        /// <summary>Raises the System.Windows.Forms.Control.Paint event.</summary>
        /// <param name="e">A System.Windows.Forms.PaintEventArgs that contains the event data.</param>
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            if (!DesignMode && IsHandleCreated)
            {
                RenderFrame?.Invoke(this, new FrameEventArgs());
            }
        }
Beispiel #6
0
 public void Invoke(string EventName, Game CurrentGame, EventArguments Args)
 {
     if (EventName == "Closing")
     {
         Closing.Invoke(CurrentGame, Args);
     }
     if (EventName == "KeyDown")
     {
         KeyDown.Invoke(CurrentGame, Args);
     }
     if (EventName == "KeyUp")
     {
         KeyUp.Invoke(CurrentGame, Args);
     }
     if (EventName == "KeyPress")
     {
         KeyPress.Invoke(CurrentGame, Args);
     }
     if (EventName == "Load")
     {
         Load.Invoke(CurrentGame, Args);
     }
     if (EventName == "MouseDown")
     {
         MouseDown.Invoke(CurrentGame, Args);
     }
     if (EventName == "MouseUp")
     {
         MouseUp.Invoke(CurrentGame, Args);
     }
     if (EventName == "MouseClick")
     {
         MouseClick.Invoke(CurrentGame, Args);
     }
     if (EventName == "MouseMove")
     {
         MouseMove.Invoke(CurrentGame, Args);
     }
     if (EventName == "MouseWheel")
     {
         MouseWheel.Invoke(CurrentGame, Args);
     }
     if (EventName == "RenderFrame")
     {
         RenderFrame.Invoke(CurrentGame, Args);
     }
     if (EventName == "Resize")
     {
         Resize.Invoke(CurrentGame, Args);
     }
     if (EventName == "TimerTick")
     {
         TimerTick.Invoke(CurrentGame, Args);
     }
 }
Beispiel #7
0
        /// <summary>
        /// Runs the game loop, until the window receives a quit event or GameLoop.Quit() is called.
        /// </summary>
        /// <param name="window">The window for which to run the game loop.</param>
        public void Run(GameWindow window)
        {
            lock (_mutex)
            {
                if (_isRunning)
                {
                    throw new InvalidOperationException();
                }

                _isRunning  = true;
                _shouldQuit = false;
                _loopThread = Thread.CurrentThread;
            }

            var oldSynchronizationContext = SynchronizationContext.Current;

            SynchronizationContext.SetSynchronizationContext(new GameSynchronizationContext(this));
            try
            {
                while (true)
                {
                    ProcessWindowEvents(window);
                    RenderFrame?.Invoke(new RenderInfo {
                        Width = window.Width, Height = window.Height
                    });
                    ProcessWindowEvents(window);
                    window.SwapBuffers();
                }
            }
            catch (GameLoopExitException)
            {
            }
            finally
            {
                SynchronizationContext.SetSynchronizationContext(oldSynchronizationContext);

                List <QueuedAction> actionsToAbort;
                lock (_mutex)
                {
                    _loopThread    = null;
                    _shouldQuit    = true;
                    _isRunning     = false;
                    actionsToAbort = new List <QueuedAction>(_queuedActions);
                    _queuedActions.Clear();
                }

                foreach (var queuedAction in actionsToAbort)
                {
                    queuedAction.Abort();
                }
            }
        }
Beispiel #8
0
        public AndroidPlatformGameWindow(AndroidPlatformGameView gameView)
        {
            this.gameView = gameView;

            gameView.Load               += (o, e) => Load?.Invoke(o, e);
            gameView.Unload             += (o, e) => Unload?.Invoke(o, e);
            gameView.UpdateFrame        += (o, e) => UpdateFrame?.Invoke(o, e);
            gameView.RenderFrame        += (o, e) => RenderFrame?.Invoke(o, e);
            gameView.Resize             += (o, e) => Resize?.Invoke(o, e);
            gameView.Closed             += (o, e) => Closed?.Invoke(o, e);
            gameView.Disposed           += (o, e) => Disposed?.Invoke(o, e);
            gameView.TitleChanged       += (o, e) => TitleChanged?.Invoke(o, e);
            gameView.VisibleChanged     += (o, e) => VisibleChanged?.Invoke(o, e);
            gameView.WindowStateChanged += (o, e) => WindowStateChanged?.Invoke(o, e);
        }
        /// <summary>
        /// コンストラクタ。
        /// </summary>
        public CanvasContext(TextEditorControl control)
        {
            _control = control;
            _control.HandleCreated += (_, __) =>
            {
                _control.Resize     += (s, e) => Resize?.Invoke(new Size2D(_control.ClientSize.Width, _control.ClientSize.Height));
                _control.GotFocus   += (s, e) => GotFocus?.Invoke();
                _control.LostFocus  += (s, e) => LostFocus?.Invoke();
                _control.Paint      += (s, e) => RenderFrame?.Invoke(new RenderingContext(e.Graphics));
                _control.MouseDown  += (s, e) => MouseDown?.Invoke(ToMouseEventInfo(e));
                _control.MouseUp    += (s, e) => MouseUp?.Invoke(ToMouseEventInfo(e));
                _control.MouseMove  += (s, e) => MouseMove?.Invoke(ToMouseEventInfo(e));
                _control.MouseWheel += (s, e) => MouseWheel?.Invoke(ToMouseEventInfo(e));

                Created?.Invoke(new Size2D(_control.ClientSize.Width, _control.ClientSize.Height));
            };
        }
Beispiel #10
0
        private void RunIteration(NSTimer timer)
        {
            var curUpdateTime = stopwatch.Elapsed;

            if (prevUpdateTime == TimeSpan.Zero)
            {
                prevUpdateTime = curUpdateTime;
            }
            var delta = (float)(curUpdateTime - prevUpdateTime).TotalSeconds;

            UpdateFrame?.Invoke(delta);
            prevUpdateTime = curUpdateTime;
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, framebuffer);
            renderContext.Begin(framebuffer);
            RenderFrame?.Invoke();
            renderContext.End();
        }
Beispiel #11
0
        private void OnInternalRender(object sender, OpenTK.FrameEventArgs e)
        {
            if (!_fpsTimer.IsRunning)
            {
                _fpsTimer.Start();
            }

            RenderFrameEventArgs args = new RenderFrameEventArgs(e.Time * 1000D);

            OnRenderFrame(this, args);
            RenderFrame?.Invoke(this, args);

            if (!_isEventPolled && _isStarted)
            {
                _fps++;
                CheckWindowFPS();
            }
        }
        /// <summary>
        /// コンストラクタ。
        /// </summary>
        public CanvasContext(TextEditorComponent textEditorComponent, IJSInProcessRuntime jsRuntime, JSEvent jsEvent)
        {
            _textEditorComponent = textEditorComponent;
            _jsRuntime           = jsRuntime;

            _textEditorComponent.Created += size =>
            {
                jsEvent.RegisterActionListener("TextEditorComponent.resize", args => Resize?.Invoke(ToSize(args)));
                jsEvent.RegisterActionListener("TextEditorComponent.mousedown", args => MouseDown?.Invoke(ToMouseState(args)));
                jsEvent.RegisterActionListener("TextEditorComponent.mouseup", args => MouseUp?.Invoke(ToMouseState(args)));
                jsEvent.RegisterActionListener("TextEditorComponent.mousemove", args => MouseMove?.Invoke(ToMouseState(args)));
                jsEvent.RegisterActionListener("TextEditorComponent.mousewheel", args => MouseWheel?.Invoke(ToMouseState(args)));
                jsEvent.RegisterActionListener("TextEditorComponent.render", _ => RenderFrame?.Invoke(new RenderingContext(_textEditorComponent)));
                jsEvent.RegisterActionListener("InputMethod.focusin", args => GotFocus?.Invoke());
                jsEvent.RegisterActionListener("InputMethod.focusout", args => LostFocus?.Invoke());

                Created?.Invoke(size);
            };
        }
Beispiel #13
0
        public void Draw(MTKView view)
        {
            if (vkContext == null)
            {
                vkContext = new Graphics.Platform.Vulkan.PlatformRenderContext();
                PlatformRenderer.Initialize(vkContext);
            }
            if (vkSwapChain == null)
            {
                shouldUpdateMetalLayerSize = true;
            }
            if (shouldUpdateMetalLayerSize)
            {
                var screen       = Window?.Screen ?? UIScreen.MainScreen;
                var drawableSize = Bounds.Size;
                drawableSize.Width     *= screen.NativeScale;
                drawableSize.Height    *= screen.NativeScale;
                metalLayer.DrawableSize = drawableSize;
                if (vkSwapChain == null)
                {
                    vkSwapChain = new Graphics.Platform.Vulkan.Swapchain(vkContext, this.Handle, (int)metalLayer.DrawableSize.Width, (int)metalLayer.DrawableSize.Height);
                }
                else
                {
                    vkSwapChain.Resize((int)metalLayer.DrawableSize.Width, (int)metalLayer.DrawableSize.Height);
                }
                shouldUpdateMetalLayerSize = false;
            }
            shouldUpdateMetalLayerSize = false;
            var curUpdateTime = stopwatch.Elapsed;

            if (prevUpdateTime == TimeSpan.Zero)
            {
                prevUpdateTime = curUpdateTime;
            }
            var delta = (float)(curUpdateTime - prevUpdateTime).TotalSeconds;

            UpdateFrame?.Invoke(delta);
            prevUpdateTime = curUpdateTime;
            RenderFrame?.Invoke();
        }
Beispiel #14
0
        protected override void OnRenderFrame()
        {
            // create the contexts if not done already
            if (grContext == null)
            {
                var glInterface = GRGlInterface.Create();
                grContext = GRContext.CreateGl(glInterface);
            }
            // manage the drawing surface
            var alloc = Allocation;
            var res   = (int)Math.Max(1.0, Gdk.Screen.Default.Resolution / 96.0);
            var w     = Math.Max(0, alloc.Width * res);
            var h     = Math.Max(0, alloc.Height * res);

            if (renderTarget == null || surface == null || renderTarget.Width != w || renderTarget.Height != h)
            {
                // create or update the dimensions
                renderTarget?.Dispose();
                GL.GetInteger(GetPName.FramebufferBinding, out var framebuffer);
                GL.GetInteger(GetPName.StencilBits, out var stencil);
                GL.GetInteger(GetPName.Samples, out var samples);
                var maxSamples = grContext.GetMaxSurfaceSampleCount(COLOR_TYPE);
                if (samples > maxSamples)
                {
                    samples = maxSamples;
                }
                var glInfo = new GRGlFramebufferInfo((uint)framebuffer, COLOR_TYPE.ToGlSizedFormat());
                renderTarget = new GRBackendRenderTarget(w, h, samples, stencil, glInfo);
                // create the surface
                surface?.Dispose();
                surface = SKSurface.Create(grContext, renderTarget, SURFACE_ORIGIN, COLOR_TYPE);
            }
            using (new SKAutoCanvasRestore(surface.Canvas, true))
            {
                RenderFrame?.Invoke(this, surface);
            }
            // update the control
            surface.Canvas.Flush();
            grContext.Flush();
        }
Beispiel #15
0
        private void OnRenderFrameInternal(FrameEventArgs e)
        {
            if (!RenderInitialized)
            {
                Log.Verbose("Init OpenGL Bindings");
                Log.Verbose("Grab Context");
                Window.MakeCurrent();

                Log.Verbose("Load OpenGL Bindings");
                GL.LoadBindings(new GLFWBindingsContext());
                var vendor  = GL.GetString(StringName.Vendor);
                var version = GL.GetString(StringName.Version);
                var shadingLanguageVersion = GL.GetString(StringName.ShadingLanguageVersion);
                var renderer = GL.GetString(StringName.Renderer);

                Log.Info($"Vendor: {vendor}, version: {version}, shadinglangVersion: {shadingLanguageVersion}, renderer: {renderer}");

                EnableDebugCallback();

                RenderInitialized = true;
            }

            if (!RenderThreadHasContext)
            {
                Window.MakeCurrent();
                RenderThreadHasContext = true;
            }

            SetRenderThread();
            RenderReady = true;

            if (Enabled)
            {
                RenderFrame?.Invoke(e);
            }
        }
Beispiel #16
0
 public void ProcessEvents()
 {
     RenderFrame?.Invoke(30f);
     PrivateWindow.ProcessEvents();
 }
Beispiel #17
0
 /// <summary>
 /// Invokes the <see cref="RenderFrame"/> event.
 /// </summary>
 protected virtual void OnRenderFrame()
 {
     RenderFrame?.Invoke(this, EventArgs.Empty);
 }