glTextureSubImage3D () плохо себя ведет с небольшим вводом изображения - PullRequest
1 голос
/ 25 апреля 2020

После создания массива 2D-текстур с помощью

glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RED, 1024, 1024, 1, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);

Я загружаю данные изображения порциями, используя функцию glTexSubImage3D () с

glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, 66, 66, 1, GL_RED, GL_UNSIGNED_BYTE, data);

Изображение загружается, но в неправильном путь. Он выглядит размытым, как будто он использует другую высоту вместо 66 байтов. Это на карте NVIDIA, использующей довольно свежие драйверы.

Достаточно забавно, если вместо этого я сделаю изображение шириной 100 пикселей (но не 99), загрузка будет работать правильно. Есть идеи, что может пойти не так?

1 Ответ

1 голос
/ 25 апреля 2020

Нашел проблему. OpenGL имеет начальное выравнивание пикселей по умолчанию, равное 4, даже если вы указываете, что формат данных пикселей равен GL_RED.

При изменении выравнивания строки на 1 байт с помощью

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

проблема исчезает .

...