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