2017-07-19 22 views
2

我想要獲得一個基於LibGDX項目的自定義着色器。當我嘗試生成VAO時,它說glGenVertexArrays()需要一個int(n)和一個IntBuffer(緩衝區)。我知道IntBuffer是你如何訪問分配的緩衝區空間,但我真的不知道應該進入什麼n。在我搜索的每個示例中,glGenVertexArrays()是一個沒有參數的方法,只是返回VAO的int索引,您可以使用它設置它,綁定到它等。glGenVertexArrays()不應該有任何參數

我應該怎麼做使用它來設置VAO,爲什麼我的方法簽名與我所看到的所有其他LWJGL示例不同?

+1

實際上,LWJGL是不符合標準的庫。根據OpenGL規範,「glGenVertexArrays」總是需要一個整數(要生成的VAO的數量)和句柄存儲的存儲段。 – BDL

回答

2

根據對libgdx你只能調用它的根據不同的對象這3種方式之一來源:

//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被忽略或只是作爲一個數組的大小。下面從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

這一切都很有意義,但是如何從vBind中獲取int的int索引以便在glBindBuffers中使用? –

+0

@ SamuelO'Brien您可以通過爲每個對象創建一個包含索引值的簡單包裝來自己追蹤它?可能有更好的方法來做到這一點,但我對opengl沒有足夠的瞭解來幫助解決這個問題。 – sorifiend

+0

但是,您如何獲得您創建的vao的索引值。 glGenVertexArrays()沒有返回值(它的void)。 –