protected override void OnRenderFrame(FrameEventArgs args) { //Console.WriteLine((float)(args.Time*1000)); if (resize) { ModeChanged(); if (EditMode) { EditorManager.Resize(ClientSize); } else { RenderTexture.DefaultWidth = ClientSize.X; RenderTexture.DefaultHeight = ClientSize.Y; for (int i = 0; i < IRenderCore.CurrentRenderCore.Cameras.Count; i++) { var cam = IRenderCore.CurrentRenderCore.Cameras[i]; if (!cam.KeepAspect) { cam.Viewport = new Viewport(new Box2i(Vector2i.Zero, ClientSize)); } } } resize = false; } GLObjectCleaner.Update((float)args.Time); GameLoop.Draw((float)args.Time); EditorLoop.Draw((float)args.Time); IRenderCore.CurrentRenderCore.RenderScenes(); IRenderCore.CurrentRenderCore.ClearDrawCalls(); GameLoop.PostDraw(); var rt = ICamera.MainCamera.RenderTexture; if (DisplayRT.Width != rt.Width || DisplayRT.Height != rt.Height) { DisplayRT.Dispose(); DisplayRT.Init(rt.Width, rt.Height, 1, rt.ColorTexture.TextureFormat, rt.DepthTexture.TextureFormat); } rt.FrameBuffer.Blit(DisplayRT.FrameBuffer, new Box2i(0, 0, rt.Width, rt.Height), new Box2i(0, 0, DisplayRT.Width, DisplayRT.Height)); EditorLoop.PostDraw(); RenderTexture.BindDefault(); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit); EditorManager.cam.Enabled = EditMode; if (EditMode) { EditorManager.DrawUI(); EditorManager.Render(); } else { DisplayRT.ColorTexture.Bind(); FullscreenQuadProgram.Bind(); IRenderCore.CurrentRenderCore.FullscreenPass(); } SwapBuffers(); }