예제 #1
0
        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();
        }