2017-07-19 15 views
2

LibGDXプロジェクトで作業する基本的なカスタムシェーダを取得しようとしています。 VAOを生成しようとすると、glGenVertexArrays()にはint(n)とIntBuffer(バッファ)が必要です。私はIntBufferが割り当てられたバッファスペースにどのようにアクセスするのか知っていますが、正に何がnに入るのか分かりません。私が検索しているすべての例では、glGenVertexArrays()は引数のないメソッドで、VAOのintインデックスを返します。これを設定したりバインドしたりするために使用できます。glGenVertexArrays()には引数がありません

私はどう思いますかこれを使ってVAOを設定し、私の見てきた他のLWJGLの例とメソッドのシグネチャが異なるのはなぜですか?

//Normal methods 
.glGenVertexArrays(int n, int[] arrays, int offset); 
.glGenVertexArrays(int n, IntBuffer arrays); 

//Method specifically for AndroidGL30.glGenVertexArrays(... 
.glGenVertexArrays (int n, java.nio.IntBuffer arrays); 

ほとんどの場合nが無視されるか、単に配列サイズとして使用する:あなたが唯一のオブジェクトに応じて、これら3のいずれかの方法でそれを呼び出すことができますlibgdxのソースによると

+1

実際、LWJGLは標準に準拠していないライブラリです。 OpenGL仕様によれば、 'glGenVertexArrays'は常に整数(生成するVAOの数)と、ハンドルが格納される記憶域セグメントをとります。 – BDL

答えて

2

。以下LwjglGL30クラスからコピーされます。

@Override 
public void glGenVertexArrays (int n, int[] arrays, int offset) { 
    for(int i = offset; i < offset + n; i++) { 
     arrays[i] = GL30.glGenVertexArrays(); 
    } 
} 

@Override 
public void glGenVertexArrays (int n, IntBuffer arrays) { 
    GL30.glGenVertexArrays(arrays); 
} 

だからから、我々はあなたが単にあなたのコードに次のように使用することができますIntBuffer方法のためにそれを見ることができます:.glGenVertexArrays(1, myIntBuffer);

参考:

https://github.com/libgdx/libgdx/search?utf8=%E2%9C%93&q=glGenVertexArrays&type=

さらに詳しいヘルプを表示するには、コードをもう少し表示し、glGenVertexArrays()に電話をかけるために使用しているオブジェクトをご紹介ください。

+0

これはすべて理にかなっていますが、glBindBuffersでこれから使用するvaoのintインデックスをどのように取得するのですか? –

+0

@ SamuelO'Brien各オブジェクトのインデックス値を持つ単純なラッパーを作成することで、自分で追跡することができますか?おそらくこれを行う良い方法がありますが、私はそれを助けるためにOpenGLについて十分に知りません。 – sorifiend

+0

しかし、あなたが作成するvaoのインデックス値はどうやって取得しますか? glGenVertexArrays()には戻り値(そのvoid)はありません。 –

関連する問題