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);
                }
        }
Example #3
0
        public virtual void ProcessEntity(ModelEntity entity)
        {
            GenericVAO model = entity.model;

            if (entityDictionary.ContainsKey(model))
            {
                List <ModelEntity> result;
                if (entityDictionary.TryGetValue(model, out result))
                {
                    if (!result.Contains(entity))
                    {
                        result.Add(entity);
                    }
                }
            }
            else
            {
                List <ModelEntity> newList = new List <ModelEntity>();
                newList.Add(entity);
                entityDictionary.Add(model, newList);
            }
        }
Example #4
0
        public virtual void Render()
        {
            shader.Use();
            shader.LoadViewMatrix(camera.GetViewMatrix());

            Gl.Enable(EnableCap.CullFace);
            Gl.CullFace(CullFaceMode.Back);

            foreach (KeyValuePair <GenericVAO, List <ModelEntity> > item in entityDictionary)
            {
                GenericVAO model = item.Key;
                PrepareModel(model);
                foreach (Entity entity in item.Value)
                {
                    shader.LoadTransformationMatrix(Maths.CreateTransformationMatrix(entity));
                    Gl.DrawElements(model.DrawMode, model.VertexCount, model.ElementType, model.OffsetInBytes);
                }
                UnBindModel();
            }

            entityDictionary.Clear();
        }
Example #5
0
 public ModelEntity(VAO model, Vector3 position, Vector3 rotation)
 {
     this.model    = model;
     this.position = position;
     this.rotation = rotation;
 }