Exemple #1
0
        private void RenderIdBegin()
        {
            foreach (var group in idGroupsRendered)
            {
                group.IdList.Clear();
            }
            idGroupsRendered.Clear();
            renderer.ApplyViewport();
            uint idClear = 0xfffffeffu;

            if (RenderStack.Graphics.Configuration.useIntegerPolygonIDs)
            {
                GL.Clear(ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit);
                GL.ClearBuffer(ClearBuffer.Color, 0, ref idClear);
            }
            else
            {
                Vector3 clearColor = Vector3.Vector3FromUint(idClear);
                GL.ClearColor(clearColor.X, clearColor.Y, clearColor.Z, 0.0f);
                //GL.ClearDepth(1.0);
                GL.Clear(
                    0
                    | ClearBufferMask.ColorBufferBit
                    | ClearBufferMask.DepthBufferBit
                    | ClearBufferMask.StencilBufferBit
                    );
            }

            sceneManager.Camera.Frame.UpdateHierarchical(sceneManager.UpdateSerial);
            sceneManager.Camera.UpdateFrame();
            sceneManager.Camera.UpdateViewport(renderer.Requested.Viewport);
            renderer.Requested.Camera = sceneManager.Camera;

            if (RenderStack.Graphics.Configuration.useGl1)
            {
            }

            idOffset = 0;
        }
        public void Render(int viewIndex)
        {
            renderer.RenderCurrentClear();
            renderer.ApplyViewport();

            if (RuntimeConfiguration.doubleSided)
            {
                FaceCullState.Disabled.Execute();
                Material.LockFaceCullState = true;
            }

            Group hoverGroup       = (selectionManager != null) ? selectionManager.HoverGroup : null;
            Group manipulatorGroup = (manipulatorManager != null) ? manipulatorManager.ManipulatorGroup : null;
            var   selectedModels   = (selectionManager != null) ? selectionManager.Models : null;

            renderer.Requested.MeshMode = MeshMode.PolygonFill;
            foreach (var group in sceneManager.RenderGroups)
            {
                if (group.Visible == false)
                {
                    continue;
                }
                renderer.CurrentGroup = group;
                renderer.RenderGroup();
            }

            GL.Disable(EnableCap.PolygonOffsetFill);
            renderer.PartialGLStateResetToDefaults();

            if (selectionManager != null)
            {
                selectionManager.Render();
            }

            if (manipulatorManager != null)
            {
                manipulatorManager.Render();
            }

            if (RuntimeConfiguration.debugInfo && (selectionManager != null))
            {
                var physicsDrag = Services.Get <PhysicsDrag>();
                renderer.PartialGLStateResetToDefaults();
                if (
                    (selectionManager.HoverModel != null) ||
                    (selectedModels.Count > 0) ||
                    (
                        (physicsDrag != null) &&
                        (physicsDrag.Model != null)
                    )
                    )
                {
                    lineRenderer.Render(renderer.DefaultFrame);
                }
            }

            if (RuntimeConfiguration.doubleSided)
            {
                Material.LockFaceCullState = false;
            }

            // \todo fixme renderer.RenderLineRenderer(sceneManager.DebugLineRenderer, sceneManager.DebugFrame);
        }
Exemple #3
0
        public void Render()
        {
            int px, py;

            MouseInScreen(out px, out py);

            Debug.WriteLine("=== Render");

            HandleResize();

            renderer.Global.Floats("add_color").Set(0.0f, 0.0f, 0.0f);
            renderer.Global.Floats("alpha").Set(1.0f);
            renderer.Global.Sync();

            // \todo LineRenderer should have Clear()
            if (lineRenderer != null)
            {
                lineRenderer.Begin();
                lineRenderer.End();
            }

            if (true)
            {
                #region Id
                if (
                    (selectionManager != null) &&
                    (RuntimeConfiguration.disableReadPixels == false)
                    )
                {
                    if (Configuration.idBuffer && (idRenderer != null))
                    {
                        using (var t = new TimerScope(timers.ID))
                        {
                            idRenderer.Render(px, py);
                            selectionManager.ProcessIdBuffer(idRenderer.Hover, px, py);
                        }
                    }

                    selectionManager.Update(px, py);
                }
                #endregion
                #region Shadowmaps
                if (sceneManager.UpdateShadowMap && (RenderStack.Graphics.Configuration.useGl1 == false))
                {
                    using (var t = new TimerScope(timers.Shadow))
                    {
                        shadowRenderer.UpdateShadowMaps();
                    }
                }
                #endregion
                #region CurveTool RenderT
                if ((curveTool != null) && curveTool.Enabled)
                {
                    if (RenderStack.Graphics.Configuration.useGl1 == false)
                    {
                        curveTool.RenderT(px, py, sceneManager.Camera);
                    }
                    curveTool.CheckForUpdates();
                }
                #endregion
                #region Main scene mono/stereo
                using (var t = new TimerScope(timers.Render3D))
                {
                    renderer.PartialGLStateResetToDefaults();
                    if (RenderStack.Graphics.Configuration.useGl1 == false)
                    {
                        renderer.SetTexture("t_shadowmap", shadowRenderer.ShadowMap);
                    }

                    StereoMode mode = (userInterfaceManager != null) ? userInterfaceManager.CurrentStereoMode : null;
                    if ((mode != null) && (mode.Program != null) && (mode.Program.Valid == true))
                    {
                        stereoscopicRenderer.Render(mode);
                    }
                    else
                    {
                        renderer.Requested.Viewport = windowViewport;
                        renderer.Requested.Camera   = sceneManager.Camera;
                        renderer.Requested.Viewport = windowViewport;
                        if (RenderStack.Graphics.Configuration.canUseFramebufferObject)
                        {
                            GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
                        }
                        mainSceneRenderer.Render(0);
                    }
                }
                #endregion
                #region voxelTest
                if (Configuration.voxelTest)
                {
                    voxelEditor.RenderCubes(px, py, sceneManager.Camera);
                }
                #endregion
            }
            else
            {
                #region Alternative path without normal 3d scene
                // path without normal 3d scene
                renderer.Requested.Viewport = windowViewport;
                renderer.Requested.Camera   = sceneManager.Camera;
                renderer.Requested.Viewport = windowViewport;
                if (RenderStack.Graphics.Configuration.canUseFramebufferObject)
                {
                    GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
                }
                renderer.RenderCurrentClear();
                renderer.ApplyViewport();
                #endregion
            }

            renderer.Requested.Viewport = windowViewport;
            renderer.Requested.Camera   = sceneManager.Camera;
            renderer.Requested.Viewport = windowViewport;
            renderer.ApplyViewport();

            if (RuntimeConfiguration.debugInfo && Configuration.graphicalUserInterface)
            {
                using (var t = new TimerScope(timers.GUI))
                {
                    userInterfaceManager.Render();
                }
            }

            window.SwapBuffers();
        }