Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Компьютерная графика » Программирование графики и GPU » Копирование в текстуру с помощью PBO


Копирование в текстуру с помощью PBO

Сообщений 1 страница 3 из 3

1

Задача: заместить блок данных (но не текстуру целиком) в текстуре новым блоком данных с минимальными временными затратами.
Дано    : текстурный массив; блок новых данных

Работающий вариант:

Код:
 glTexSubImage3D ( GL_TEXTURE_2D_ARRAY_EXT, 0, ox, oy, level, w, h, 1, format /*GL_BGR*/, dataType /*GL_UNSIGNED_BYTE*/, buffer );

Вариант, который должен (в теории, естественно) работать:

Код:
// создаем пиксельный буфер
glGenBuffers    ( 1, &pbo );
glBindBuffer    ( GL_PIXEL_UNPACK_BUFFER, pbo );
// ставим его на постянное обновление приложением
glBufferData    ( GL_PIXEL_UNPACK_BUFFER, textureWidth * textureHeight * bpp, 0, GL_DYNAMIC_DRAW );
glBindBuffer    ( GL_PIXEL_UNPACK_BUFFER, 0 );

// ...

// процесс обновления
glBindBuffer    ( GL_PIXEL_UNPACK_BUFFER, pbo );

// bpp == 1, 3, 4 (то есть показывает именно БАЙТЫ, а не биты)
int offset = ( ox + textureWidth * oy ) * bpp;
glBufferSubData ( GL_PIXEL_UNPACK_BUFFER, offset, h * w * bpp, buffer );

// сообственно, официальная дока ОГЛ утверждает, что в последнем параметре при включенном
// пиксельном буфере необходимо указывать смещение в этом самом буфере, с которого и будет
// считан блок данных размером (ox, oy, w, h).
glTexSubImage3D ( GL_TEXTURE_2D_ARRAY_EXT, 0, ox, oy, 0, w, h, 1,  format /*GL_BGR*/, dataType /*GL_UNSIGNED_BYTE*/, &offset );

glBindBuffer    ( GL_PIXEL_UNPACK_BUFFER, 0 );

Вопрос: почему возникает ошибка INVALID_OPERATION, когда offset > 0?

Примечание: При этом, если вместо смещения выставить ноль, то процесс обновления вроде как происходит.
Если же загрузить текстурные данные для всей текстуры целиком, то все работает нормально (в этом случае
смещение естественно оказывается равным нулю). Фиаско наступает и в случае использования map/unmap
директив!

Отредактировано stea1th (2009-01-16 15:27:02)

0

2

Если я не ошибась, то передавать нужно само значение смещения, а не адрес переменной со смещением, как на листинге

0

3

Мнда, действительно, (GLvoid *)offset сделало свое дело :) Вот что значит, когда не до конца ясно как работает функция... Хых. Спасибо за совет.

Отредактировано stea1th (2009-01-19 08:24:09)

0


Вы здесь » Компьютерная графика » Программирование графики и GPU » Копирование в текстуру с помощью PBO


создать форум