OpenRA.Graphics.TerrainSpriteLayer.Draw C# (CSharp) Method

Draw() public method

public Draw ( Viewport viewport ) : void
viewport Viewport
return void
        public void Draw(Viewport viewport)
        {
            var cells = restrictToBounds ? viewport.VisibleCellsInsideBounds : viewport.AllVisibleCells;

            // Only draw the rows that are visible.
            var firstRow = cells.CandidateMapCoords.TopLeft.V.Clamp(0, map.MapSize.Y);
            var lastRow = (cells.CandidateMapCoords.BottomRight.V + 1).Clamp(firstRow, map.MapSize.Y);

            Game.Renderer.Flush();

            // Flush any visible changes to the GPU
            for (var row = firstRow; row <= lastRow; row++)
            {
                if (!dirtyRows.Remove(row))
                    continue;

                var rowOffset = rowStride * row;

                unsafe
                {
                    // The compiler / language spec won't let us calculate a pointer to
                    // an offset inside a generic array T[], and so we are forced to
                    // calculate the start-of-row pointer here to pass in to SetData.
                    fixed (Vertex* vPtr = &vertices[0])
                        vertexBuffer.SetData((IntPtr)(vPtr + rowOffset), rowOffset, rowStride);
                }
            }

            Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer(
                vertexBuffer, rowStride * firstRow, rowStride * (lastRow - firstRow),
                PrimitiveType.TriangleList, Sheet, BlendMode);

            Game.Renderer.Flush();
        }

Usage Example

Exemplo n.º 1
0
 public void Draw(WorldRenderer wr, Viewport viewport)
 {
     terrain.Draw(viewport);
     foreach (var r in wr.World.WorldActor.TraitsImplementing <IRenderOverlay>())
     {
         r.Render(wr);
     }
 }