我终于得到了一些功能代码来画线(在 Xamarin/monotouch 中)
//init calls
Context = new EAGLContext (EAGLRenderingAPI.OpenGLES2);
DrawableDepthFormat = GLKViewDrawableDepthFormat.Format24;
EAGLContext.SetCurrentContext (Context);
effect = new GLKBaseEffect ();
effect.UseConstantColor = true;
effect.ConstantColor = new Vector4 (1f, 1f, 1f, 1f); //white
GL.ClearColor (0f, 0f, 0f, 1f);//black
public void DrawLine(float[] pts) {
//generate, bind, init
GL.GenBuffers (1, out vertexBuffer);
GL.BindBuffer (BufferTarget.ArrayBuffer, vertexBuffer);
GL.BufferData (BufferTarget.ArrayBuffer, (IntPtr) (pts.Length * sizeof (float)), pts, BufferUsage.DynamicDraw);
// RENDER //
effect.PrepareToDraw ();
//describe what's going to happen
GL.EnableVertexAttribArray ((int) GLKVertexAttrib.Position);
GL.VertexAttribPointer ((int) GLKVertexAttrib.Position, 2, VertexAttribPointerType.Float, false, sizeof(float) * 2, 0);
GL.DrawArrays (BeginMode.LineStrip, 0, pts.Length/2);
}
我有几个问题。
这种画线的方法是最优的吗?是否有任何建议的改进(即抗锯齿等)
GL.Clear (ClearBufferMask.ColorBufferBit); effect.ConstantColor = new Vector4 (1f, 1f, 1f, 1f); DrawLine (line); effect.ConstantColor = new Vector4 (1f, 0f, 1f, 1f); DrawLine (line2);
当我调用 GL.Clear() 时,与该行关联的所有内存是否都会消失?即我是否必须进行任何内存清理,或者我可以继续调用 GL.Clear() 然后再调用 DrawLine() 而不必担心内存管理?
我打算使用这些功能进行绘图。如果基础数据发生变化(但我的行数相同,是否有一部分函数可以调用以更有效地更新行?