最後に、線を描画するための機能するコードをいくつか取得しました(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() を呼び出し続け、メモリ管理について心配する必要はありませんか?
これらの関数をグラフ化に使用する予定です。基になるデータが変更された場合 (ただし、行数は同じですが、行をより効率的に更新するために呼び出すことができる関数のサブセットはありますか?