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);
哇。謝謝。我不知道我是如何錯過這個參數的。今晚我回家時我會試試看。另外, – ahoffer
另外,你有什麼想法爲什麼glMapBuffer()失敗,但glMapBufferRange()成功?謝謝,亞倫 – ahoffer
我測試過了。工作很好。非常感謝。 – ahoffer