В настоящее время я пытаюсь использовать PBO для передачи видеоданных в текстуры. Я не уверен, возможно ли то, что я пытаюсь сделать, или хороший способ сделать это, если это возможно... У меня есть 3 текстуры в формате GL_RED (по одной на каждый канал, в настоящее время не используется Alpha) . Все три из них будут заполнены за один вызов внешней библиотеки.
Вот привязка буфера и т.д.:
void LockTexture(const TextureID& id, void ** ppbData)
{
Texture& tex = textures.getArray()[id];
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, tex.glBufID);
glBufferData(GL_PIXEL_UNPACK_BUFFER, tex.width * tex.height, NULL, GL_STREAM_DRAW);
*ppbData = glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
}
Это делается для трех текстур, затем буферы заполняются внешней библиотекой. Затем я пытаюсь подтолкнуть их к текстуре, например так:
void UnlockTexture(const TextureID& id)
{
Texture& tex = textures.getArray()[id];
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
glBindTexture(tex.glTarget, tex.glTexID);
glCheckForErrors(); // <--- NO ERROR
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, tex.width, tex.height, GL_RED, GL_UNSIGNED_BYTE, 0);
glCheckForErrors(); // <--- ERROR
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
glBindTexture(tex.glTarget, 0);
}
Просматривая список причин, по которым может возникнуть ошибка, вот что я знаю:
- массив текстур был определен
- тип правильный
- параметр данных (смещение) хорош в 0
- не выполняется между glBegin/glEnd
В этом я не уверен:
- ошибка генерируется, если ненулевое имя объекта буфера привязано к цели GL_PIXEL_UNPACK_BUFFER, и данные будут распакованы из объекта буфера, так что требуемое чтение памяти превысит размер хранилища данных.
Кажется, что это может быть проблемой, но я понятия не имею, как еще с этим справиться:
- ошибка генерируется, если ненулевое имя объекта буфера привязано к цели GL_PIXEL_UNPACK_BUFFER, а хранилище данных объекта буфера в настоящее время сопоставлено.
Правильно ли я говорю, что этот glUnmapBuffer отменяет отображение последнего отображаемого буфера, поэтому правильный буфер все еще отображается?
ГЛ версия 3.2
Я был бы очень признателен за любую помощь в этом, спасибо!