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; } } } } }