2010-04-30 143 views
1

我正在將一個數組傳遞給一個函數,然後試圖將glGenBuffers與傳遞給該函數的數組一起使用。我找不到一種方法讓glGenBuffers與我通過的數組一起工作。我對指針的基本知識有一個體面的把握,但這超出了我的想象。將指針傳遞給glGenBuffers

緩衝區在別處生成(並刪除)。如果我把它修好了,我可以渲染所有東西,但這使得它更加靈活。目前的問題是「& renderArray [0]」。如果我把這個(所有東西都放到函數中)出來,以便它在主要的繪圖代碼中,它就可以工作。我也有類似的東西,它使用一個常量數組。

這基本上是呈現代碼的工作原理。這是更復雜一點,(使用相同的陣列想法的顏色,也沒有工作),但基本思路如下:

void drawFoo(const GLfloat *renderArray, GLuint verticeBuffer) { 
    glBindBuffer(GL_ARRAY_BUFFER, verticeBuffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(renderArray)*sizeof(GLfloat), &renderArray[0], GL_STATIC_DRAW); 
    glVertexPointer(2, GL_FLOAT, 0, 0); 

    glEnableClientState(GL_VERTEX_BUFFER); 
    glDrawArrays(GL_TRIANGLE_FAN, 0, 45); 
    glDisableClientState(GL_VERTEX_BUFFEr); 
} 

在此先感謝您的幫助

回答

2

如果你傳遞一個數組作爲指針,你將失去其相關類型的信息:

GLfloat array[N]; 
GLfloat* pointer = array; 
sizeof(array ); // => sizeof(GLfloat) * N 
sizeof(pointer); // => sizeof(GLfloat*); 

sizeof是編譯時通過操作,讓你的操作,而你的情況是GLfloat*類型的大小。

需要將數組的大小通過作爲附加參數:

void drawFoo(const GLfloat* renderArray, size_t nFloats, GLuint verticeBuffer) { 
    // ... 
    glBufferData(GL_ARRAY_BUFFER, nFloats * sizeof(GLFloat), 
       renderArray, GL_STATIC_DRAW); 

還要注意,&array[0]語法是多餘的,renderArray已經是一個指針。即使對於數組,也不需要這樣的表達式,因爲數組可以隱式衰減爲指向其第一個元素的指針。

+0

我已經有了生成的緩衝區。繪圖代碼在此函數外部工作,但指向該數組的指針在該函數內不起作用。對不起,不清楚;我更新了我的帖子。 – 2010-04-30 19:35:49

+0

@Josh:更新以符合您的修改。 – 2010-04-30 22:22:57

+0

謝謝,它的工作。 – 2010-05-01 03:58:37