openGL glUnmapBuffer () возвращает неизвестный код ошибки 1280 - PullRequest
0 голосов
/ 31 августа 2011

Я пишу код для проверки концепции. Я хочу доказать, что я могу записать данные в буферный объект после того, как буфер был создан. Тем не менее, я получаю код ошибки GLenum 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);

1 Ответ

2 голосов
/ 31 августа 2011

1280 или 0x0500 - это GL_INVALID_ENUM.

glUnmapBuffer принимает перечисление, к которому привязан объект буфера, а не объект буфера для отмены отображения. glUnmapBuffer ожидает, что буферный объект будет отображен, чтобы быть связанным с этой целью привязки. Поэтому glUnmapBuffer(GL_ARRAY_BUFFER) будет отображать то, что в данный момент связано с привязкой GL_ARRAY_BUFFER.

...