2016-04-14 141 views
-1

OpenTKを使ってOpenGLを学んでいます。今日私はVBOを使って四肢を効果的にレンダリングしたいと思っています。 私はそれがこれは私のレンダリングコードですOpenTK - VBO - アプリケーションクラッシュ

================================================================= 
Got a SIGSEGV while executing native code. This usually indicates a fatal error in the mono runtime or one of the native libraries used by your application. 
================================================================= 

Full stacktrace can be found here

をクラッシュレンダリング呼び出し:

GL.EnableVertexAttribArray(0); 

GL.BindBuffer(BufferTarget.ArrayBuffer, _vbo); 
GL.VertexAttribPointer(0, _count, VertexAttribPointerType.Float, false, 0, 0); 

GL.DrawArrays(PrimitiveType.Quads, 0, _count); 

GL.DisableVertexAttribArray(0); 

そして、これは私がバッファを生成する方法です。

GL.GenBuffers(1, out _vbo); 
GL.BindBuffer(BufferTarget.ElementArrayBuffer, _vbo); 

Vector3[] vertices; 
_count = vertices.Length; 

GL.BufferData<Vector3>(BufferTarget.ArrayBuffer, new IntPtr(vertices.Length * Vector3.SizeInBytes), vertices, BufferUsageHint.StaticDraw); 

PS:これには色やテクスチャを使用していません。

+0

私は確かではありませんが、配列 "Vector3 [] vertices;"を初期化していません。さらにバッファを "BufferTarget.ElementArrayBuffer"として初期化しますが、 "BufferTarget.ArrayBuffer"でデータを入れます。そしてあなたが使用しているOpenGLのバージョン。なぜならいくつかの最新のバージョンではVertex Arraysを使う必要があるからです。 – Michael

+0

@Michaelの頂点が定義されています(私はジェネレータがどこにあるのか分かりません)。 BufferTargetを同じ値に変更しようとしましたが(両方の値に対して)、まだ動作していません。 – AbitDeveloper

答えて

0

この

 GL.BindBuffer(BufferTarget.ArrayBuffer, _vbo); 
     GL.VertexPointer (3, VertexPointerType.Float, Marshal.SizeOf(new Vector3()), IntPtr.Zero); 
     GL.EnableClientState (ArrayCap.VertexArray); 

     GL.DrawArrays(PrimitiveType.Quads, 0, _count); 

     GL.DisableClientState (ArrayCap.VertexArray); 

にコードをレンダリング変更し、それが働きました。 私はすべてBufferTarget.ArrayBufferを使用しました(ElementArrayBufferはインデックス用です)。

関連する問題