示例#1
0
        public void RenderLightmaps(Camera renderCamera, DwarfTime gameTime, GraphicsDevice graphicsDevice,
            Effect effect, Matrix worldMatrix)
        {
            RasterizerState state = RasterizerState.CullNone;
            RasterizerState origState = graphicsDevice.RasterizerState;

            effect.CurrentTechnique = effect.Techniques["Lightmap"];
            effect.Parameters["xIllumination"].SetValue(ChunkData.IllumMap);
            effect.Parameters["xTexture"].SetValue(ChunkData.Tilemap);
            effect.Parameters["xSunGradient"].SetValue(ChunkData.SunMap);
            effect.Parameters["xAmbientGradient"].SetValue(ChunkData.AmbientMap);
            effect.Parameters["xTorchGradient"].SetValue(ChunkData.TorchMap);
            effect.Parameters["xTint"].SetValue(new Vector4(1.0f, 1.0f, 1.0f, 1.0f));
            effect.Parameters["SelfIllumination"].SetValue(1);
            effect.Parameters["xEnableShadows"].SetValue(GameSettings.Default.UseDynamicShadows ? 1 : 0);
            graphicsDevice.RasterizerState = state;
            Graphics.BlendState = BlendState.NonPremultiplied;
            List<VoxelChunk> renderListCopy = RenderList.ToArray().ToList();
            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                foreach (VoxelChunk chunk in renderListCopy)
                {
                    Graphics.SetRenderTarget(chunk.Primitive.Lightmap);
                    Graphics.Clear(ClearOptions.Target, Color.Black, 0.0f, 0);
                    chunk.Render(Graphics);
                }
            }
            Graphics.SetRenderTarget(null);
            effect.Parameters["SelfIllumination"].SetValue(0);
            effect.CurrentTechnique = effect.Techniques["Textured"];
            graphicsDevice.RasterizerState = origState;
        }
示例#2
0
    void OnPostRender()
    {
        if (_renderLists.Count == 0)
        {
            return;
        }

        for (int i = 0; i < _renderLists.Count; i++)
        {
            RenderList renderList = _renderLists [i];
            foreach (Rect rectangle in renderList.rectangles)
            {
                if (renderList.wireframe)
                {
                    DrawWireframe(rectangle, renderList.material);
                }
                else
                {
                    DrawUtils.DrawQuad(rectangle.center, rectangle.width, rectangle.height, new Rect(0, 0, 1, 1), renderList.material);
                    if (_outlineMaterial != null)
                    {
                        DrawWireframe(rectangle, _outlineMaterial);
                    }
                }
            }
        }
    }
示例#3
0
        internal void render(RenderList list, RenderObject obj, ref Transform parent, byte drawLayers = 255)
        {
            Transform trs = Local * parent;
            uint      pos;

            if (this.forceBillboard)
            {
                list.Camera.MakeBillboard(ref trs);
            }
            if (0 != (drawLayers & ChildrenDrawLayerMask))
            {
                GeoNode node;
                for (pos = NumImmediate, node = FirstChild; 0 != pos; node = node.Sibling, --pos)
                {
                    if (0 != (drawLayers & node.DrawLayerMask))
                    {
                        node.render(list, obj, ref trs, drawLayers);
                    }
                }
            }
            if (0 != (drawLayers & SelfDrawLayerMask))
            {
                OpenTK.Vector4 viewProj = list.Camera.ViewProj * new OpenTK.Vector4(trs.translation, 1f);
                GeoModel       model;
                for (pos = ModelCount, model = FirstModel; 0 != pos; model = model.Next, --pos)
                {
                    if (0 != (drawLayers & model.DrawLayerMask))
                    {
                        RenderLayer.Insert(list, obj, model, ref trs, ref viewProj, (byte)(drawLayers & model.DrawLayerMask));
                    }
                }
            }
        }
示例#4
0
        internal void BuildRenderList(RenderList renderList, CameraComponent camera)
        {
            if (ShowTerrain)
            {
                Terrain?.BuildRenderList(renderList);
            }

            if (ShowRoads)
            {
                foreach (var road in Roads)
                {
                    road.BuildRenderList(renderList);
                }
            }

            if (ShowObjects)
            {
                foreach (var gameObject in GameObjects.Items)
                {
                    gameObject.BuildRenderList(renderList, camera);
                }
            }

            _particleSystemManager.BuildRenderList(renderList);
        }
示例#5
0
        internal void BuildRenderList(RenderList renderList, RenderInstanceData instanceData, MeshEffect effect)
        {
            var uniquePipelineStates = MaterialPasses
                                       .SelectMany(x => x.MeshParts.Select(y => y.PipelineStateHandle))
                                       .Distinct()
                                       .ToList();

            foreach (var pipelineStateHandle in uniquePipelineStates)
            {
                var filteredMaterialPasses = MaterialPasses
                                             .Where(x => x.MeshParts.Any(y => y.PipelineStateHandle == pipelineStateHandle))
                                             .ToList();

                if (filteredMaterialPasses.Count > 0)
                {
                    renderList.AddRenderItem(new InstancedRenderItem(
                                                 instanceData,
                                                 effect,
                                                 pipelineStateHandle,
                                                 (commandEncoder, e, h, _) =>
                    {
                        Draw(
                            commandEncoder,
                            effect,
                            h,
                            filteredMaterialPasses,
                            instanceData);
                    }));
                }
            }
        }
示例#6
0
        protected virtual void RenderDiagramElementsLayer(Graphics graphics, RenderList renderlist, Layer layer)
        {
            foreach (Element element in renderlist)
            {
                if (element.Layer == layer && element.Visible)
                {
                    //Draw shapes
                    graphics.TranslateTransform(element.Rectangle.X, element.Rectangle.Y);
                    RenderElement(graphics, element);

                    //Render any elements in the container
                    if (element is IContainer)
                    {
                        IContainer container = (IContainer)element;

                        Region region  = new Region(element.GetPathInternal());
                        Region current = graphics.Clip;
                        graphics.SetClip(region, CombineMode.Intersect);

                        RenderDiagramElementsLayer(graphics, container.RenderList, layer);

                        //reset clip
                        graphics.Clip = current;
                    }

                    graphics.TranslateTransform(-element.Rectangle.X, -element.Rectangle.Y);
                }
            }
        }
示例#7
0
        public void RenderShadowmap(Shader effect,
                                    GraphicsDevice graphicsDevice,
                                    ShadowRenderer shadowRenderer,
                                    Matrix worldMatrix,
                                    Texture2D tilemap)
        {
            Vector3[] corners    = new Vector3[8];
            Camera    tempCamera = new Camera(World, camera.Target, camera.Position, camera.FOV, camera.AspectRatio, camera.NearPlane, 30);

            tempCamera.GetFrustrum().GetCorners(corners);
            BoundingBox cameraBox = MathFunctions.GetBoundingBox(corners);

            cameraBox          = cameraBox.Expand(1.0f);
            effect.World       = worldMatrix;
            effect.MainTexture = tilemap;
            shadowRenderer.SetupViewProj(cameraBox);
            shadowRenderer.PrepareEffect(effect, false);
            shadowRenderer.BindShadowmapEffect(effect);
            shadowRenderer.BindShadowmap(graphicsDevice);

            List <VoxelChunk> renderListCopy = RenderList.ToArray().ToList();

            foreach (VoxelChunk chunk in renderListCopy)
            {
                foreach (EffectPass pass in effect.CurrentTechnique.Passes)
                {
                    pass.Apply();
                    chunk.Render(Graphics);
                }
            }
            shadowRenderer.UnbindShadowmap(graphicsDevice);
            effect.CurrentTechnique        = effect.Techniques[Shader.Technique.Textured];
            effect.SelfIlluminationEnabled = false;
        }
示例#8
0
 internal override void BuildRenderList(RenderList renderList)
 {
     foreach (var renderable in _meshes)
     {
         renderable.BuildRenderList(renderList);
     }
 }
示例#9
0
        public void UpdateRenderList(Camera camera)
        {
            while (RenderList.Count > 0)
            {
                VoxelChunk result;
                if (!RenderList.TryDequeue(out result))
                {
                    break;
                }
            }


            foreach (VoxelChunk chunk in visibleSet)
            {
                BoundingBox box = chunk.GetBoundingBox();

                if ((camera.Position - (box.Min + box.Max) * 0.5f).Length() < DrawDistance)
                {
                    chunk.IsVisible = true;
                    RenderList.Enqueue(chunk);
                }
                else
                {
                    chunk.IsVisible = false;
                }
            }
        }
示例#10
0
 internal void BuildRenderList(RenderList renderList)
 {
     foreach (var waterArea in _waterAreas)
     {
         waterArea.BuildRenderList(renderList);
     }
 }
示例#11
0
 internal void BuildRenderList(RenderList renderList, CameraComponent camera)
 {
     foreach (var drawModule in DrawModules)
     {
         drawModule.BuildRenderList(renderList, camera);
     }
 }
示例#12
0
        public void RenderLightmaps(Camera renderCamera, DwarfTime gameTime, GraphicsDevice graphicsDevice,
                                    Shader effect, Matrix worldMatrix)
        {
            RasterizerState state     = RasterizerState.CullNone;
            RasterizerState origState = graphicsDevice.RasterizerState;

            effect.CurrentTechnique         = effect.Techniques[Shader.Technique.Lightmap];
            effect.SelfIlluminationTexture  = ChunkData.IllumMap;
            effect.MainTexture              = ChunkData.Tilemap;
            effect.SunlightGradient         = ChunkData.SunMap;
            effect.AmbientOcclusionGradient = ChunkData.AmbientMap;
            effect.TorchlightGradient       = ChunkData.TorchMap;
            effect.LightRampTint            = Color.White;
            effect.VertexColorTint          = Color.White;
            effect.SelfIlluminationEnabled  = true;
            effect.EnableShadows            = GameSettings.Default.UseDynamicShadows;
            graphicsDevice.RasterizerState  = state;
            Graphics.BlendState             = BlendState.NonPremultiplied;
            List <VoxelChunk> renderListCopy = RenderList.ToArray().ToList();

            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                foreach (VoxelChunk chunk in renderListCopy)
                {
                    Graphics.SetRenderTarget(chunk.Primitive.Lightmap);
                    Graphics.Clear(ClearOptions.Target, Color.Black, 0.0f, 0);
                    chunk.Render(Graphics);
                }
            }
            Graphics.SetRenderTarget(null);
            effect.SelfIlluminationEnabled = false;
            effect.CurrentTechnique        = effect.Techniques[Shader.Technique.Textured];
            graphicsDevice.RasterizerState = origState;
        }
示例#13
0
 internal abstract void BuildRenderList(
     RenderList renderList,
     Camera camera,
     ModelInstance modelInstance,
     ModelMeshInstance modelMeshInstance,
     ModelBone parentBone,
     in Matrix4x4 modelTransform,
示例#14
0
 internal void BuildRenderList(RenderList renderList)
 {
     foreach (var patch in Patches)
     {
         patch.BuildRenderList(renderList);
     }
 }
示例#15
0
 internal override void BuildRenderList(RenderList renderList)
 {
     foreach (var particleSystem in _particleSystems)
     {
         particleSystem.BuildRenderList(renderList);
     }
 }
示例#16
0
 internal void BuildRenderList(RenderList renderList)
 {
     foreach (var road in _roads)
     {
         road.BuildRenderList(renderList);
     }
 }
示例#17
0
        private void CalculateGuides(RenderList actions)
        {
            ArrayList list = new ArrayList();

            //Loop through actions and add rectangles
            foreach (Element element in actions)
            {
                if (element is Shape && element.Visible)
                {
                    ArrayList newList = new ArrayList();

                    //Get the rectangle from element
                    RectangleF newRect = element.Rectangle;

                    //If a solid element, get transform rectangle
                    if (element is SolidElement)
                    {
                        SolidElement solid = (SolidElement)element;
                        newRect = solid.TransformRectangle;
                    }

                    //Offset rectangle according to container
                    newRect.X += element.Container.Offset.X;
                    newRect.Y += element.Container.Offset.Y;

                    bool combine = false;

                    //Loop through the existing rectangles and see if they intersect
                    foreach (RectangleF rect in list)
                    {
                        //Determine if rectangles can be combined
                        if (Orientation == RulerOrientation.Top)
                        {
                            combine = rect.Contains(new PointF(newRect.X, rect.Y)) || rect.Contains(new PointF(newRect.Right, rect.Y));
                        }
                        else
                        {
                            combine = rect.Contains(new PointF(rect.X, newRect.Y)) || rect.Contains(new PointF(rect.X, newRect.Bottom));
                        }

                        //Add combined rectangle rectangle together, or add to new list if no intersection
                        if (combine)
                        {
                            newRect = CombineRectangle(newRect, rect);
                        }
                        else
                        {
                            newList.Add(rect);
                        }
                    }

                    //Add to new list if not combined
                    newList.Add(newRect);
                    list = newList;
                }
            }

            SetGuides((RectangleF[])list.ToArray(typeof(RectangleF)));
        }
示例#18
0
 internal override void BuildRenderList(
     RenderList renderList,
     Camera camera,
     ModelInstance modelInstance,
     BeforeRenderDelegate[] beforeRender,
     BeforeRenderDelegate[] beforeRenderDepth,
     ModelBone parentBone,
     in Matrix4x4 modelTransform,
示例#19
0
 internal override void BuildRenderList(RenderList renderList, Camera camera, bool castsShadow, MeshShaderResources.RenderItemConstantsPS renderItemConstantsPS)
 {
     _modelInstance.BuildRenderList(
         renderList,
         camera,
         castsShadow,
         renderItemConstantsPS);
 }
示例#20
0
        public GraphicsSystem(Game game)
            : base(game)
        {
            RegisterComponentList(_models = new List <ModelComponent>());

            RenderList = new RenderList();

            _renderContext = new RenderContext();
        }
示例#21
0
 internal override void BuildRenderList(
     RenderList renderList,
     Camera camera,
     bool castsShadow,
     MeshShaderResources.RenderItemConstantsPS renderItemConstantsPS,
     Dictionary <string, bool> shownSubObjects = null, Dictionary <string, bool> hiddenSubObjects = null)
 {
     // Nothing.
 }
示例#22
0
 internal void BuildRenderList(RenderList renderList)
 {
     foreach (var patch in Patches)
     {
         patch.BuildRenderList(
             renderList,
             EnableMacroTexture ? _macroTexture : _whiteTexture);
     }
 }
示例#23
0
 internal void BuildRenderList(RenderList renderList)
 {
     foreach (var patch in Patches)
     {
         patch.BuildRenderList(
             renderList,
             _shaderSet,
             _pipeline);
     }
 }
示例#24
0
 internal override void BuildRenderList(RenderList renderList)
 {
     foreach (var shape in _guiComponents)
     {
         renderList.Gui.AddRenderItemDraw(
             shape.Material,
             shape.VertexBuffer,
             null,
             CullFlags.AlwaysVisible,
             null,
示例#25
0
        internal void BuildRenderList(RenderList renderList, CameraComponent camera)
        {
            Terrain?.BuildRenderList(renderList);

            foreach (var gameObject in GameObjects.Items)
            {
                gameObject.BuildRenderList(renderList, camera);
            }

            _particleSystemManager.BuildRenderList(renderList);
        }
示例#26
0
 internal void BuildRenderList(RenderList renderList)
 {
     renderList.Water.RenderItems.Add(new RenderItem(
                                          _shaderSet,
                                          _pipeline,
                                          _boundingBox,
                                          _world,
                                          0,
                                          _numIndices,
                                          _indexBuffer,
                                          _beforeRender));
 }
示例#27
0
 internal void BuildRenderList(RenderList renderList)
 {
     renderList.Opaque.RenderItems.Add(new RenderItem(
                                           _shaderSet,
                                           _pipeline,
                                           _boundingBox,
                                           Matrix4x4.Identity,
                                           0,
                                           _numIndices,
                                           _indexBuffer,
                                           _beforeRender));
 }
示例#28
0
 internal void BuildRenderList(RenderList renderList)
 {
     renderList.Terrain.RenderItems.Add(new RenderItem(
                                            $"Terrain-{Bounds}",
                                            _material,
                                            BoundingBox,
                                            Matrix4x4.Identity,
                                            0,
                                            _numIndices,
                                            _indexBuffer,
                                            _beforeRender));
 }
示例#29
0
 internal void BuildRenderList(RenderList renderList)
 {
     renderList.Water.RenderItems.Add(new RenderItem(
                                          _debugName,
                                          _material,
                                          _boundingBox,
                                          _world,
                                          0,
                                          _numIndices,
                                          _indexBuffer,
                                          _beforeRender));
 }
示例#30
0
文件: Road.cs 项目: CyberSys/OpenSAGE
 internal void BuildRenderList(RenderList renderList)
 {
     renderList.Opaque.AddRenderItemDrawIndexed(
         _material,
         _vertexBuffer,
         null,
         CullFlags.None,
         _boundingBox,
         Matrix4x4.Identity,
         0,
         _numIndices,
         _indexBuffer);
 }
示例#31
0
        public RendererControl()
        {
            InitializeComponent();

            lapWatch = new Stopwatch();
            globalWatch = new Stopwatch();
            camera = new Camera();

            frameNumber = 0;

            Renderables = new RenderList();

            objects = new ObjectDisplay();
            objects.Color = ForeColor;
            objects.Location = new PointF(0, 50);
            Renderables.Add(objects);
        }
示例#32
0
        public RendererWindow()
            : base(800, 600, GraphicsMode.Default, "EZ Terrain")
        {
            Context.ErrorChecking = true;
            VSync = VSyncMode.Off;
            ClearColor = Color.LightBlue;

            lapWatch = new Stopwatch();
            globalWatch = new Stopwatch();
            camera = new Camera();

            frameNumber = 0;

            Renderables = new RenderList();

            objects = new ObjectDisplay();
            objects.Color = Color.Black;
            objects.Location = new PointF(0, 50);
            Renderables.Add(objects);
        }
示例#33
0
		//Adds a model lines and shapes to an svg document
		private void AddContainerImplementation(IContainer container)
		{
			RenderList list = new RenderList();
			
			//Add each sorted shape to the svg document			
			foreach (Element element in container.Lines.Values)
			{
				list.Add(element);
			}

			//Add each sorted line to the svg document
			foreach (Element element in container.Shapes.Values)
			{
				list.Add(element);
			}

			list.Sort();

			//Go through the diagram and add the element
			foreach (Element element in list)
			{
				AddElement(element);
			}
		}
示例#34
0
		//Adds a model lines and shapes to an svg document
		private void AddDiagramImplementation(IDiagram diagram)
		{
			RenderList list = new RenderList();
			
			//Add each sorted shape to the svg document			
			foreach (Element element in diagram.Lines.Values)
			{
				if (element.Visible) list.Add(element);
			}

			//Add each sorted line to the svg document
			foreach (Element element in diagram.Shapes.Values)
			{
				if (element.Visible) list.Add(element);
			}

			list.Sort();

			//Go through the diagram and add the element by layer;
			foreach (Layer layer in diagram.Layers)
			{
				if (layer.Visible)
				{
					foreach (Element element in list)
					{
						if (element.Layer == layer) AddElement(element);
					}
				}
			}
		}
示例#35
0
		private void CalculateGuides(RenderList actions)
		{
			ArrayList list = new ArrayList();
			
			//Loop through actions and add rectangles
			foreach (Element element in actions)
			{   
				if (element is Shape && element.Visible)
				{
					ArrayList newList = new ArrayList();

					//Get the rectangle from element
					RectangleF newRect = element.Rectangle;

					//If a solid element, get transform rectangle
					if (element is SolidElement)
					{
						SolidElement solid = (SolidElement) element;
						newRect = solid.TransformRectangle;
					}

					//Offset rectangle according to container
					newRect.X += element.Container.Offset.X;
					newRect.Y += element.Container.Offset.Y;

					bool combine = false;
				
					//Loop through the existing rectangles and see if they intersect
					foreach (RectangleF rect in list)
					{
						//Determine if rectangles can be combined
						if (Orientation == RulerOrientation.Top)
						{
							combine = rect.Contains(new PointF(newRect.X, rect.Y )) || rect.Contains(new PointF(newRect.Right, rect.Y ));
						}
						else
						{
							combine = rect.Contains(new PointF(rect.X, newRect.Y)) || rect.Contains(new PointF(rect.X, newRect.Bottom));
						}

						//Add combined rectangle rectangle together, or add to new list if no intersection
						if (combine) 
						{
							newRect = CombineRectangle(newRect, rect); 
						}
						else
						{
							newList.Add(rect);
						}
					}
				
					//Add to new list if not combined
					newList.Add(newRect);
					list = newList;
				}
			}
			
			SetGuides((RectangleF[]) list.ToArray(typeof(RectangleF)));
		}