public void Render(ICanvas canvas, int treeSeed) { int index = treeSeed % MaxStyles; if (!_cachedStyles.TryGetValue(index, out IBitmap cachedBitmap)) { cachedBitmap = _bitmapFactory.CreateBitmap(_cellSize, _cellSize); ICanvas cachedCanvas = _bitmapFactory.CreateCanvas(cachedBitmap); DrawTree(cachedCanvas, index); _cachedStyles.Add(index, cachedBitmap); } canvas.DrawBitmap(cachedBitmap, 0, 0); }
public void Render(ICanvas canvas, Track track) { if (_cacheBitmaps) { if (!_cachedTracks.TryGetValue(track.Direction, out IBitmap cachedBitmap)) { cachedBitmap = _bitmapFactory.CreateBitmap(_parameters.CellSize, _parameters.CellSize); ICanvas cachedCanvas = _bitmapFactory.CreateCanvas(cachedBitmap); DrawTrack(cachedCanvas, track.Direction, track); } canvas.DrawBitmap(cachedBitmap, 0, 0); } else { DrawTrack(canvas, track.Direction, track); } }
public void Render(ICanvas canvas) { if (_width == 0 || _height == 0) { return; } _skiaDrawTime.Start(); if (canvas is null) { throw new ArgumentNullException(nameof(canvas)); } canvas.Save(); canvas.Clear(Colors.VeryLightGray); foreach (ILayerRenderer renderer in _boardRenderers) { if (!renderer.Enabled) { continue; } canvas.Save(); if (renderer is ICachableLayerRenderer cachable) { if (cachable.IsDirty || !_bitmapBuffer.ContainsKey(renderer)) { if (!_bitmapBuffer.TryGetValue(renderer, out IBitmap bitmap)) { bitmap = _bitmapFactory.CreateBitmap(_width, _height); } ICanvas layerCanvas = _bitmapFactory.CreateCanvas(bitmap); layerCanvas.Clear(Colors.Empty); RenderLayer(renderer, layerCanvas); _bitmapBuffer[renderer] = bitmap; layerCanvas.Dispose(); } canvas.DrawBitmap(_bitmapBuffer[renderer], 0, 0); } else { RenderLayer(renderer, canvas); } canvas.Restore(); } canvas.Restore(); if (_needsBufferReset) { ResetBuffers(); _needsBufferReset = false; } _skiaDrawTime.Stop(); _skiaFps.Update(); void RenderLayer(ILayerRenderer renderer, ICanvas layerCanvas) { _renderLayerDrawTimes[renderer].Start(); renderer.Render(layerCanvas, _width, _height); _renderLayerDrawTimes[renderer].Stop(); } }