public void Draw(float max) { Matrix4 transform = CanvasManager.ViewportTransform; GL.Enable(EnableCap.ScissorTest); transform = Matrix4.Scale(1, 2 / max, 1) * Matrix4.CreateTranslation(0, -1, 0) * CanvasManager.ViewportTransform; GL.UniformMatrix4(_shaderProgram.UniformTransform, false, ref transform); GL.Uniform4(_shaderProgram.UniformColor, Color4.Gray); //GL.LineWidth(1f); GL.Disable(EnableCap.ScissorTest); //transform = Matrix4.CreateTranslation(0, pos.Y, 0) * Matrix4.Scale(1, scale.Y, 1) * CanvasManager.ViewportTransform; //GL.UniformMatrix4(_uniformTransform, false, ref transform); GL.LineWidth(2f); GL.Scissor(CanvasManager.TickSize, CanvasManager.BorderSize + CanvasManager.TickSize - 1, CanvasManager.ControlWidth - CanvasManager.TickSize, CanvasManager.ControlHeight - 2 * (CanvasManager.BorderSize + CanvasManager.TickSize) + 2); GL.Enable(EnableCap.ScissorTest); YTicks.BeginDraw(); YTicks.Draw(BeginMode.Lines); YTicks.EndDraw(); GL.Disable(EnableCap.ScissorTest); }
private void GlControlLoad(object sender, EventArgs e) { GL.ClearColor(1, 1, 1, 1); GL.Viewport(0, 0, glControl.Width, glControl.Height); GL.ShadeModel(ShadingModel.Smooth); GL.Hint(HintTarget.PolygonSmoothHint, HintMode.Nicest); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); _graph = new CaptureGraph(); _loaded = true; }
public void EnableZBuffer(bool enable) { if (enable) { GL.Enable(EnableCap.DepthTest); } else { GL.Disable(EnableCap.DepthTest); } }
public void Draw(float xShift, float baseScale) { GL.Enable(EnableCap.ScissorTest); GL.Scissor((int)(CanvasManager.CanvasLocationX - 1), 0, (int)(CanvasManager.CanvasWidth + 2), CanvasManager.ControlHeight); double scale = 2.0 / (double)baseScale; Matrix4 transform = Matrix4.CreateTranslation(xShift, 0, 0) * Matrix4.Scale((float)scale /*2f / baseScale*/, 1f, 1f) * Matrix4.CreateTranslation(-1f, -1f, 0) * CanvasManager.ViewportTransform; GL.UniformMatrix4(_uniformTransform, false, ref transform); GL.Uniform4(_uniformColor, GridColor); if (DrawMajorGridlines) { GL.LineWidth(1.25f); _gridMajorBuffer.BeginDraw(); _gridMajorBuffer.Draw(BeginMode.Lines); _gridMajorBuffer.EndDraw(); } if (DrawMinorGridlines && _minorGrid != null) { GL.LineWidth(0.75f); _gridMinorBuffer.BeginDraw(); _gridMinorBuffer.Draw(BeginMode.Lines); _gridMinorBuffer.EndDraw(); } if (_majorTick != null) { GL.LineWidth(2f); GL.Uniform4(_uniformColor, TickColor); _tickMajorBuffer.BeginDraw(); _tickMajorBuffer.Draw(BeginMode.Lines); _tickMajorBuffer.EndDraw(); } if (DrawMinorTicks && _minorTick != null) { //transform = Matrix4.Scale(1, MinorTickScale, 1) * transform; //shift x down for ticks GL.UniformMatrix4(_uniformTransform, false, ref transform); GL.LineWidth(1.5f); _tickMinorBuffer.BeginDraw(); _tickMinorBuffer.Draw(BeginMode.Lines); _tickMinorBuffer.EndDraw(); } GL.Disable(EnableCap.ScissorTest); }
public void SetCullMode(CullMode cullMode) { switch (cullMode) { case CullMode.None: GL.Disable(EnableCap.CullFace); break; case CullMode.Back: GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Back); break; case CullMode.Front: GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Front); break; default: throw new ArgumentOutOfRangeException("cullMode"); } }
public void DrawGraph() { if (!_canvasReady) { return; } CanvasManager.SimpleShader2D.UseProgram(); GL.MatrixMode(OpenTK.Graphics.OpenGL.MatrixMode.Modelview); GL.Clear(ClearBufferMask.ColorBufferBit); GL.Viewport((int)CanvasManager.CanvasLocationX, (int)CanvasManager.CanvasLocationY, (int)CanvasManager.CanvasWidth, (int)CanvasManager.CanvasHeight); GL.Scissor((int)CanvasManager.CanvasLocationX, (int)CanvasManager.CanvasLocationY, (int)CanvasManager.CanvasWidth, (int)CanvasManager.CanvasHeight); GL.Enable(EnableCap.ScissorTest); var scale = new GraphScaleData(_scaleData); if (_transitionState == 1) //reposition { float factor = _transitionCounter / Interval; //x difference scale.XShift = _scaleData.XShift + (_transitionCanvas.ScaleData.XShift - _scaleData.XShift) * factor; //scale difference scale.BaseScale = _scaleData.BaseScale + (_transitionCanvas.ScaleData.BaseScale - _scaleData.BaseScale) * factor; } else if (_transitionState == 2) { scale.XShift = _transitionCanvas.ScaleData.XShift; scale.BaseScale = _transitionCanvas.ScaleData.BaseScale; } else { scale.XShift = _scaleData.XShift; scale.BaseScale = _scaleData.BaseScale; } if (_transitionState == 2) //blend colors { //DataVolume.AlphaBlend = 1 - _transitionCounter / Interval; //PacketCount.AlphaBlend = 1 - _transitionCounter / Interval; CanvasCollection.AlphaBlend(1 - _transitionCounter / Interval); } _background.Draw(scale.XShift); ////draw data volume //DataVolume.Draw(scale); ////draw packet count //PacketCount.Draw(scale); // CanvasCollection.DrawCollection(scale); if (_transitionState == 2) { //DataVolume.DrawBackBuffer(scale.BaseScale, _transitionCanvas.ScaleData.MaxData, scale.XShift); //PacketCount.DrawBackBuffer(scale.BaseScale, _transitionCanvas.ScaleData.MaxCount, scale.XShift); CanvasCollection.DrawCollectionBackBuffer(scale); } //////reset viewport GL.Viewport(0, 0, CanvasManager.ControlWidth, CanvasManager.ControlHeight); GL.Disable(EnableCap.ScissorTest); Matrix4 transform = CanvasManager.ViewportTransform; GL.UniformMatrix4(CanvasManager.SimpleShader2D.UniformTransform, false, ref transform); GL.Uniform4(CanvasManager.SimpleShader2D.UniformColor, Color4.Black); GL.LineWidth(2f); Border.BeginDraw(); Border.Draw(BeginMode.LineLoop); Border.EndDraw(); //transform.Invert(); //float left = -(transform.M11 - transform.M41); //float right = transform.M11 + transform.M41; _yAxis.Draw(_scaleData.MaxData); _xAxis.Draw(scale.XShift, scale.BaseScale); }
/// <summary> /// Renders the specified model group on a batch basis. /// </summary> private void RenderGroup(ModelGroup modelGroup, Matrix4 modelViewProjection) { // Reenable depth test GL.Enable(EnableCap.DepthTest); // Render the object // Send the vertices to the shader this.VertexBufferLookup[modelGroup].Bind(); this.VertexBufferLookup[modelGroup].EnableAttributes(); this.NormalBufferLookup[modelGroup].Bind(); this.NormalBufferLookup[modelGroup].EnableAttributes(); this.TextureCoordinateBufferLookup[modelGroup].Bind(); this.TextureCoordinateBufferLookup[modelGroup].EnableAttributes(); // Bind the index buffer this.VertexIndexBufferLookup[modelGroup].Bind(); if (this.ShouldRenderWireframe) { this.Shader.Wireframe.SetWireframeColour(EverlookConfiguration.Instance.WireframeColour); // Override blend setting GL.Enable(EnableCap.Blend); } // Render all the different materials (opaque first, transparent after) foreach (RenderBatch renderBatch in modelGroup.GetRenderBatches() .OrderBy(batch => batch.MaterialIndex) .ThenBy(batch => this.Model.GetMaterial(batch.MaterialIndex).BlendMode)) { this.Shader.Enable(); ModelMaterial modelMaterial = this.Model.GetMaterial(renderBatch.MaterialIndex); this.Shader.SetMaterial(modelMaterial); this.Shader.SetMVPMatrix(modelViewProjection); // Set the texture as the first diffuse texture in unit 0 Texture2D texture = this.Cache.GetCachedTexture(modelMaterial.Texture0); if (modelMaterial.Flags.HasFlag(MaterialFlags.TextureWrappingClamp)) { texture.WrappingMode = TextureWrapMode.Clamp; } else { texture.WrappingMode = TextureWrapMode.Repeat; } this.Shader.BindTexture2D(TextureUnit.Texture0, TextureUniform.Texture0, texture); // Finally, draw the model GL.DrawRangeElements ( PrimitiveType.Triangles, renderBatch.FirstPolygonIndex, renderBatch.FirstPolygonIndex + renderBatch.PolygonIndexCount - 1, renderBatch.PolygonIndexCount, DrawElementsType.UnsignedShort, new IntPtr(renderBatch.FirstPolygonIndex * 2) ); } // Release the attribute arrays this.VertexBufferLookup[modelGroup].DisableAttributes(); this.NormalBufferLookup[modelGroup].DisableAttributes(); this.TextureCoordinateBufferLookup[modelGroup].DisableAttributes(); }