/// <summary> /// Метод используется, для перевалки данных из других spriterenderer в этот /// </summary> /// <param name="vertices">Вертексы</param> /// <param name="numVertices">длина</param> /// <param name="type">тип</param> public void DrawBatchForVertexesSpriteRendererClasses(Vertex[] vertices, int numVertices, PrimitiveType type) { RendererVertexBuffer.ActivateVertextBuffer(); RendererVertexBuffer.SetData(vertices, numVertices); RendererOpenVAO(); Context.DrawPrimitives(type, 0, numVertices); RendererCloseVAO(); #if DEBUG_VERTEX Console.WriteLine("DrawBatchForVertexesSprite SpriteRenderer" + "array:" + numVertices); #endif PerfHistory.Increment("batches", 1); }
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(); vertexBuffer.ActivateVertextBuffer(); // Flush any visible changes to the GPU for (var row = firstRow; row <= lastRow; row++) //update changed quads if any { if (!dirtyRows.Remove(row)) { continue; } var rowOffset = TerrainFullRowLenInVertexRowsNums * 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, TerrainFullRowLenInVertexRowsNums); } } } // Так как все вертексы хранятся плоским списком, то приходится отправлять в рендер всю ширину карты. Так как нельзя вырезать регион из плоского списка по Ширине // Поэтому отрезается только по высоте. А ширина учитывается полностью. Game.Renderer.WorldSpriteRenderer.DrawVertexBuffer( vertexBuffer, TerrainFullRowLenInVertexRowsNums * firstRow, TerrainFullRowLenInVertexRowsNums * (lastRow - firstRow), PrimitiveType.TriangleList, sheets2d, BlendMode); Game.Renderer.Flush(); }