2011-08-31 139 views
0

我在寫一些概念驗證代碼。我想證明我可以在創建緩衝區後將數據寫入緩衝區對象。但是,當我在寫入緩衝區後嘗試取消映射緩衝區時,我得到的是GLENUM錯誤代碼1280。我完全困惑。openGL glUnmapBuffer()返回未知錯誤代碼1280

我可以用顏色數據初始化緩衝區併成功渲染它。問題是我以後不能修改緩衝區中的數據。代碼如下。它顯示了我如何將新數據寫入緩衝區,然後如何嘗試將其讀回。在glGetError()調用之後,錯誤代碼顯示在註釋中。變量 「CBO」 是顏色緩衝器:

//NEW COLOR DATA 
GLubyte colorData2[9] = {255,255,0, 0,128,255, 255,0,255}; 

//WRITE THE DATA TO THE COLOR BUFFER OBJECT (variable cbo) 
glBindBuffer(GL_ARRAY_BUFFER, cbo); 
int err1 = glGetError(); //Error code 0 

//Oddly, glMapBuffer always returns and invalid pointer. 
//GLvoid * pColor = glMapBuffer(GL_ARRAY_BUFFER, GL_MAP_WRITE_BIT); 

//However, glMapBufferRange return a pointer that looks good 
GLvoid * pColor = glMapBufferRange(GL_ARRAY_BUFFER, 0, 9, GL_MAP_WRITE_BIT); 
int err2 = glGetError(); //Error code 0 

// Copy colors from host to device 
memcpy(pColor, colorData2, 9); 

//Unmap to force host to device copy 
glUnmapBuffer(cbo); 
int err3 = glGetError(); //Error code 1280 

//Unbind 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
int err4 = glGetError(); //Error code 0 

//******TEST THE WRITE****** 
GLubyte readbackData[9]; 
glBindBuffer(GL_ARRAY_BUFFER, cbo); 
int err5 = glGetError(); //Error code 0 
GLvoid * pColorX = glMapBufferRange(GL_ARRAY_BUFFER, 0, 9, GL_MAP_READ_BIT); 
int err6 = glGetError(); //Error code 1282 

//Mem copy halts because of a memory exception. 
memcpy(readbackData, pColorX, 9); 

glUnmapBuffer(cbo); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

這裏就是我創建緩存對象的代碼:

//Create color buffer 
glGenBuffers(1, &cbo); 
glBindBuffer(GL_ARRAY_BUFFER, cbo); 

//Create space for three RGB 8-bit color objects 
colorBufferSize = 3 * numColorChannels * sizeof(GLubyte); 
glBufferData(GL_ARRAY_BUFFER, colorBufferSize, colorData, GL_DYNAMIC_DRAW); 

//Unbind 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

回答

2

1280,或在0x0500,是GL_INVALID_ENUM

glUnmapBuffer獲取綁定緩衝區對象的枚舉值,而不是要取消映射的緩衝區對象值。 glUnmapBuffer預計將緩衝區對象取消映射以綁定到該綁定目標。因此glUnmapBuffer(GL_ARRAY_BUFFER)將取消映射當前綁定到GL_ARRAY_BUFFER綁定的任何內容。

+0

哇。謝謝。我不知道我是如何錯過這個參數的。今晚我回家時我會試試看。另外, – ahoffer

+0

另外,你有什麼想法爲什麼glMapBuffer()失敗,但glMapBufferRange()成功?謝謝,亞倫 – ahoffer

+0

我測試過了。工作很好。非常感謝。 – ahoffer