public static void DrawTrackLine(StandardLine line, Color color, bool drawwell, bool drawcolor) { var lv = new AutoArray <LineVertex>(24); var verts = new AutoArray <GenericVertex>(30); if (drawcolor) { if (line is RedLine redline) { verts.AddRange(LineAccelRenderer.GetAccelDecor(redline)); } lv.AddRange(LineColorRenderer.CreateDecorationLine(line, line.Color)); } lv.AddRange( LineRenderer.CreateTrackLine( line.Start, line.End, line.Width * 2, Utility.ColorToRGBA_LE(color))); if (drawwell) { verts.AddRange(WellRenderer.GetWell(line)); } var vao = GetLineVAO(); vao.Scale = Game.Track.Zoom; foreach (var v in lv.unsafe_array) { vao.AddVertex(v); } GameDrawingMatrix.Enter(); using (new GLEnableCap(EnableCap.Blend)) { if (verts.Count != 0) { GenericVAO gvao = new GenericVAO(); foreach (var v in verts.unsafe_array) { gvao.AddVertex(v); } gvao.Draw(PrimitiveType.Triangles); } vao.Draw(PrimitiveType.Triangles); } GameDrawingMatrix.Exit(); }
public static void DrawTexture(int tex, DoubleRect rect, float alpha = 1, float u1 = 0, float v1 = 0, float u2 = 1, float v2 = 1) { GenericVAO buf = new GenericVAO(); var tr = new Vector2d(rect.Right, rect.Top); var tl = new Vector2d(rect.Left, rect.Top); var bl = new Vector2d(rect.Left, rect.Bottom); var br = new Vector2d(rect.Right, rect.Bottom); var c = Color.FromArgb((int)Math.Min(255, (alpha * 255)), 255, 255, 255); buf.AddVertex(new GenericVertex((Vector2)tl, c, u1, v1)); buf.AddVertex(new GenericVertex((Vector2)tr, c, u2, v1)); buf.AddVertex(new GenericVertex((Vector2)br, c, u2, v2)); buf.AddVertex(new GenericVertex((Vector2)bl, c, u1, v2)); using (new GLEnableCap(EnableCap.Texture2D)) using (new GLEnableCap(EnableCap.Blend)) { GL.BindTexture(TextureTarget.Texture2D, tex); buf.Draw(PrimitiveType.Quads); GL.BindTexture(TextureTarget.Texture2D, 0); } }