public void ResetEditingViewports(IRenderGuiControl renderControl, IFocusNodeComponent aMainFocusNode)
        {
            var editingView = AmFactory.Create <EditingView>();

            editingView.FocusOn(aMainFocusNode);

            var editViewport = AmFactory.Create <Viewport>();

            editViewport.View = editingView;

            renderControl.SetViewports(
                new[] { editViewport },
                new ViewportsLayout
            {
                RowHeights = new[]
                {
                    new ViewportLength(100, ViewportLengthUnit.Percent),
                },
                ColumnWidths = new[]
                {
                    new ViewportLength(100, ViewportLengthUnit.Percent)
                },
                ViewportIndices = new[, ] {
                    { 0 }
                }
            });

            viewService.ChangeRenderingArea(renderControl, editingView);
        }
예제 #2
0
 public void ChangeRenderingArea(IRenderGuiControl newRenderControl, IFocusableView mainView)
 {
     model.RenderControl = newRenderControl;
     MainView            = mainView;
     // todo: move somewhere or remove
     Update?.Invoke(this, new ViewEventArgs(ViewEventType.ViewportChanged));
 }
예제 #3
0
        public void RenderToContext(IRenderGuiControl renderControl, float timestamp)
        {
            foreach (var viewport in renderControl.Viewports)
            {
                var offScreen = offScreenContainer.Get(this, viewport, viewport.Width, viewport.Height, MsaaCount, OffscreenTtl);
                for (var i = 0; i < viewport.View.Layers.Count; i++)
                {
                    var layer                 = viewport.View.Layers[i];
                    var isFirstLayer          = i == 0;
                    var isLastLayer           = i == viewport.View.Layers.Count - 1;
                    var sceneRendererSettings = GetSceneRendererSettings(isFirstLayer, true, isLastLayer);
                    var sceneRenderer         = sceneRendererPool.Allocate(sceneRendererSettings);
                    sceneRenderer.Execute(layer.VisibleScene, layer.Camera, offScreen, timestamp, sceneRendererSettings);
                    sceneRendererPool.Return(sceneRenderer);
                }
                glContext.Actions.BlitFramebuffer(offScreen.Framebuffer, null,
                                                  0, 0,
                                                  viewport.Width, viewport.Height,
                                                  viewport.Left, renderControl.Height - viewport.Top,
                                                  viewport.Left + viewport.Width, renderControl.Height - (viewport.Top + viewport.Height),
                                                  ClearBufferMask.ColorBufferBit, BlitFramebufferFilter.Nearest);
            }

            glContext.Infra.SwapBuffers();

            // todo: to Update
            offScreenCacheDeathNote.Clear();

            infra.MainThreadDisposer.DisposeOfAll();
        }
예제 #4
0
        public void Render(IRenderGuiControl target, float timestamp)
        {
            if (!(target is UcRenderGuiControl))
            {
                throw new NotImplementedException();
            }

            // todo: support more than one viewport
            var viewport = target.Viewports.First();

            Render(viewport, globalObjectService.MainCamera, 0, timestamp);
        }