public static void RenderRoundedLine(Vector2d position, Vector2d position2, Color color, float thickness, bool knobs = false, bool redknobs = false) { using (new GLEnableCap(EnableCap.Blend)) { using (new GLEnableCap(EnableCap.Texture2D)) { var vertices = GenRoundedLine(position, position2, color, thickness, knobs, redknobs); if (vertices.Count != 0) { _roundlinevao.Texture = StaticRenderer.CircleTex; _roundlinevao.Clear(); foreach (var v in vertices) { _roundlinevao.AddVertex(v); } _roundlinevao.SetOpacity(color.A / 255f); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); _roundlinevao.Draw(PrimitiveType.Triangles); _roundlinevao.Texture = 0; } } } }
public static void DrawScarf(DynamicLine[] lines, float opacity) { GLEnableCap blend = null; if (opacity < 1) { blend = new GLEnableCap(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); } GameDrawingMatrix.Enter(); VAO scarf = new VAO(false, true);//VAO does not need disposing, it does not allocate a buffer bool t = false; for (int i = 0; i < lines.Length; i++) { Color c = Color.FromArgb((byte)(255 * opacity), 209, 1, 1); var alt = Color.FromArgb((byte)(255 * opacity), 255, 100, 100); var diff = lines[i].Position2 - lines[i].Position; var dangle = MathHelper.RadiansToDegrees(Math.Atan2(diff.Y, diff.X)) + 90; Vector2d q1; Vector2d q2; Vector2d q3; Vector2d q4; float size = 2; if (i == 0) { var diff2 = lines[i + 1].Position2 - lines[i + 1].Position; var dangle2 = MathHelper.RadiansToDegrees(Math.Atan2(diff2.Y, diff2.X)) + 90; Turtle turtle = new Turtle(lines[i].Position); turtle.Move(dangle2, -(size / 2)); q1 = turtle.Point; turtle.Move(0, size); q2 = turtle.Point; turtle.Point = lines[i].Position2; turtle.Move(dangle, size / 2); q3 = turtle.Point; turtle.Move(0, -size); q4 = turtle.Point; } else { var diff2 = lines[i - 1].Position2 - lines[i - 1].Position; var dangle2 = MathHelper.RadiansToDegrees(Math.Atan2(diff2.Y, diff2.X)) + 90; Turtle turtle = new Turtle(lines[i].Position); turtle.Move(dangle2, -(size / 2)); q1 = turtle.Point; turtle.Move(0, size); q2 = turtle.Point; turtle.Point = lines[i].Position2; turtle.Move(dangle, size / 2); q3 = turtle.Point; turtle.Move(0, -size); q4 = turtle.Point; } scarf.AddVertex(new Vertex((Vector2)q1, t ? c : alt)); scarf.AddVertex(new Vertex((Vector2)q2, t ? c : alt)); scarf.AddVertex(new Vertex((Vector2)q3, t ? c : alt)); scarf.AddVertex(new Vertex((Vector2)q4, t ? c : alt)); t = !t; } scarf.Draw(PrimitiveType.Quads); GameDrawingMatrix.Exit(); if (blend != null) { blend.Dispose(); } }