public void Render(ShaderColorXY shader, RectangleF view, Size areaInPixels, TimeStamp offset) { if (_vbo.Length == 0) { return; } // TODO: this should be done in Add // as the buffer will be reloaded for every frame. // Not much data to be copied, but still unnecessary. var lastVertex = _vbo[_vbo.Length - 1]; _vbo.AddVertex(float.MaxValue, lastVertex.Y); _vbo.IndexFromLength(); _vbo.Reload(); shader.SetTranslateMatrix(Matrix4.Identity); shader.SetShaderColor(LineColor); var trsl = Matrix4.CreateTranslation(-offset.ToRate(SamplesPerSecond), 0, 0); shader.SetTranslateMatrix(trsl); GL.LineWidth(Selected ? 3.0f : 1.0f); _vbo.DrawMode = BeginMode.LineStrip; _vbo.BindAndDraw(shader); GL.PointSize(Selected ? 8.0f : 6.0f); _vbo.DrawMode = BeginMode.Points; _vbo.BindAndDraw(shader); _vbo.PopVertex(); }
public void Add(PointF sample) { if (!_firstSample) { _vbo.AddVertex(sample.X, _lastY); } _firstSample = false; _vbo.AddVertex(sample.X, sample.Y); _lastY = sample.Y; if (sample.X > _currentTime.ToRate(SamplesPerSecond)) { _currentTime = new TimeStamp(1000 * sample.X / SamplesPerSecond); } _needsReload = true; }
private void BuildGridLineBuffer() { _gridLines.Clear(); foreach (var tick in AxisY.MajorTicks) { _gridLines.AddVertex(0, (float)tick); _gridLines.AddVertex(1, (float)tick); } foreach (var tick in AxisX.MajorTicks) { _gridLines.AddVertex((float)((tick - AxisX.VisibleMinimum) / AxisX.Range), (float)AxisY.VisibleMinimum); _gridLines.AddVertex((float)((tick - AxisX.VisibleMinimum) / AxisX.Range), (float)AxisY.VisibleMaximum); } _gridLines.IndexFromLength(); _gridLines.Reload(); }