private void glRender_Render()
        {
            propsVertexDescriptionComponentItem itmBuff = lstPositionAttr.SelectedItem as propsVertexDescriptionComponentItem;

            if (itmBuff != null)
            {
                bool bolRendered = glRender.GLRender(new Action(() =>
                {
                    clsVertexDescriptionComponent comp = itmBuff.Component;
                    GL.Enable(EnableCap.Blend);
                    GL.Enable(EnableCap.ProgramPointSize);
                    GL.Enable(EnableCap.PointSmooth);
                    GL.PointSize(16);
                    GL.LineWidth(2);
                    GL.MatrixMode(MatrixMode.Projection);
                    GL.LoadMatrix(ref matxProjection);
                    GL.MatrixMode(MatrixMode.Modelview);
                    GL.LoadIdentity();
                    if (itmBuff.Component.ElementCount >= 3)
                    {
                        GL.LoadMatrix(ref matxView);
                    }
                    GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.DstColor);
                    GL.EnableClientState(ArrayCap.VertexArray);
                    GL.EnableClientState(ArrayCap.IndexArray);
                    GL.BindBuffer(BufferTarget.ArrayBuffer, Geometry.glBuffers[comp.Index]);
                    GL.VertexPointer(comp.ElementCount, clsVertexDescriptionComponent.VertexPointerTypes[comp.ElementGLType], comp.ComponentSize, 0);
                    GL.BindBuffer(BufferTarget.ElementArrayBuffer, Geometry.glIndexBuffer);
                    GL.Color4(Color.FromArgb(96, glRender.ForeColor));
                    GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Fill);
                    GL.DrawElements(PrimitiveType.Triangles, Geometry.Triangles.Indices.Length, DrawElementsType.UnsignedInt, 0);
                    GL.Color4(Color.FromArgb(108, glRender.ForeColor));
                    GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Line);
                    GL.DrawElements(PrimitiveType.Triangles, Geometry.Triangles.Indices.Length, DrawElementsType.UnsignedInt, 0);
                    GL.Color4(Color.FromArgb(128, glRender.ForeColor));
                    GL.PolygonMode(MaterialFace.FrontAndBack, PolygonMode.Point);
                    GL.DrawElements(PrimitiveType.Triangles, Geometry.Triangles.Indices.Length, DrawElementsType.UnsignedInt, 0);
                    GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
                    GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
                }));
                if (bolRendered)
                {
                    if (tsRender != null)
                    {
                        tsRender.SampleFrame(glRender.RenderResult.RenderTime);
                    }
                    if (glRender.RenderResult.GLResult != 0)
                    {
                        Console.WriteLine(glRender.RenderResult.GLResult);
                    }
                }
            }
        }
        private void glRender_Init()
        {
            glRender.MakeContextCurrent();
            propsVertexDescriptionComponentItem itmBuff = lstPositionAttr.SelectedItem as propsVertexDescriptionComponentItem;

            if (itmBuff != null)
            {
                if (itmBuff.Component.ElementCount >= 3)
                {
                    matxProjection = Matrix4.CreatePerspectiveFieldOfView((float)((1.0 / 3.0) * Math.PI), glRender.AspectRatio, 0.0001f, 1000f);
                }
                else
                {
                    matxProjection = Matrix4.CreateOrthographic(2, 2, -1, 1);
                }
            }
            glRender_Render();
        }
        private void UpdatePositionAttrList()
        {
            propsVertexDescriptionComponentItem itm = lstPositionAttr.SelectedItem as propsVertexDescriptionComponentItem;

            lstPositionAttr.Items.Clear();
            lstPositionAttr.SelectedIndex = lstPositionAttr.Items.Add("[None]");
            foreach (clsVertexDescriptionComponent comp in Geometry.VertexDescription)
            {
                if (comp.ElementType == typeof(float) || comp.ElementType == typeof(double))
                {
                    if (comp.ElementCount == 2 || comp.ElementCount == 3)
                    {
                        propsVertexDescriptionComponentItem itmNew = new propsVertexDescriptionComponentItem(comp);
                        lstPositionAttr.Items.Add(itmNew);
                        if (itm != null && itm.Component == comp)
                        {
                            lstPositionAttr.SelectedItem = itmNew;
                        }
                    }
                }
            }
        }