我試圖使函數初始化 VAO在特定索引,與一些數據。問題是,當我訪問頂點的大小時,返回的大小錯誤。sizeof數組結構錯誤
下面是數據:
typedef struct {
GLfloat XYZW[4];
GLfloat RGBA[4];
} Vertex;
const Vertex Vertices2[] =
{
{ { 0.25f, 0.25f, 0.0f, 1.0f },{ 1.0f, 0.0f, 0.0f, 1.0f } },
{ { 0.75f, 0.25f, 0.0f, 1.0f },{ 0.0f, 1.0f, 0.0f, 1.0f } },
{ { 0.50f, 0.75f, 0.0f, 1.0f },{ 0.0f, 0.0f, 1.0f, 1.0f } }
};
const Vertex Indices2[] = {....}
我調用該函數是這樣的:
createArrayObjects(0, Vertices2, Indices2);
void createArrayObjects(int index, const Vertex vertices[], const GLubyte indices[]){
cout << sizeof(vertices) << endl; ---> returns 4
cout << sizeof(Vertices2) << endl; ---> returns 96
...
}
如果我使用sizeof(Vertices2),
填補VBO,該程序運行正常。 如果在輸入vertices
上沒有正確的尺寸,我無法填充VAO和VBO並正確顯示數據。
函數參數指定一個未知大小的數組,這就是爲什麼'sizeof()'不會返回所期望的值。如果你沒有傳遞知道它們自己大小的對象(例如STL容器類),那麼你需要傳遞一個數組長度以及數組指針到函數中。 – gigaplex
@gigaplex不,函數參數指定一個_pointer_,它可以是一個數組衰減到一個指針,但[它也可以是一個甚至不指向數組的指針](http://goo.gl/lIZpmQ )。 – emlai
@zenith確實如此,但未知長度的數組與指針之間幾乎沒有區別。唯一真正的區別是語法,他們在問題中使用了數組語法。 – gigaplex