2017-07-04 6 views
0

ByteBuffer.allocateDirect()glGenBuffers()の違いは何ですか?従来のOpenGLのようにglGenBuffers()の代わりにandroid ByteBuffer.allocateDirect()を使用する理由は?ByteBuffer.allocateDirect()とglGenBuffers()の相違点

+0

2つの機能は全く同じではないため、私はあなたの質問を理解しているかどうかはわかりません。あなたが 'glBufferData'を意味していても、それはまだそれほど似ていません。違いはかなり明白です.1つはOpenGLオブジェクトで、もう1つはJavaオブジェクトです。 –

+0

@NicolBolasはい、ありがとうございます。しかし、なぜ三角形をレンダリングするための基本的なOpenGLチュートリアルでOpenGLオブジェクトを使用し、三角形をレンダリングするためのすべてのAndroid OpenGL ESチュートリアルでOpenGLオブジェクトの代わりにJavaオブジェクトを使用するのですか?例:https://www.khronos.org/opengl/wiki/Tutorial:_OpenGL_3.1_The_First_Triangle_(C%2B%2B/Win)およびhttps://developer.android.com/training/graphics/opengl/shapes。 html – seqedugi

答えて

0

しかし、三角レンダリングの基本的なOpenGLチュートリアルでは、OpenGLオブジェクトとOpenGLオブジェクトの代わりにJavaオブジェクトが使用されています。

可能です。

ByteBufferはCPUメモリ割り当てを表します。 OpenGLバッファオブジェクトは、GPU - アクセス可能なメモリ割り当てを表します。

OpenGL ES 2.0では、CPUメモリまたはバッファオブジェクトから頂点データを指定できます。デスクトップのコアOpenGL が削除されました 2009年以来のこの能力。そのため、最新のデスクトップOpenGLチュートリアルでは、頂点データにバッファオブジェクトを使用しています。

は、OpenGL ES 2.0との下位互換性を維持するために存在しているが、それはこれらの機能のための可能性があるとして、その使用はお勧めしません:ES 3.0が明示的に「クライアント側の頂点配列」と言うこと

注意将来のバージョンで削除される可能性があります。

まだ削除されていません。しかし、彼らはいくつかの機能に干渉します。たとえば、gl_VertexIDは未定義です。

ByteBufferを頂点配列に直接使用しないでください。そして、他の悪い習慣を教えるかもしれないので、そうする教材を習得するのは避けるべきです。

関連する問題