Загрузить GL_UNSIGNED_BYTE в текстуру GL_FLOAT - PullRequest
1 голос
/ 26 мая 2019

У меня есть текстура OpenGL, которая создается нормально, используя GL_FLOAT в качестве типа данных:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, Dims.x, Dims.y, 0, GL_RGBA, GL_FLOAT, Data);

(Data отправляется как массив float.)

Затем я должен обновить текстуру, используя данные в виде байтов без знака. Законно ли обновлять текстуру с glTexSubImage2D, используя GL_UNSIGNED_BYTE?

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, Dims.x, Dims.y, GL_RGBA, GL_UNSIGNED_BYTE, NewData);

(NewData отправляется как unsigned char*.)

В документации ничего не говорится об использовании различных типов данных между этими функциями. Можно ли обновить текстуру таким образом, или данные текстуры должны быть преобразованы в float*?

1 Ответ

3 голосов
/ 26 мая 2019

В настольном OpenGL *, при условии, что передача пикселей формат такого же типа, как и внутренний формат , передача будет работать. Под «добрым» я подразумеваю, что два формата должны говорить об одном и том же виде данных. Вы не можете загрузить данные глубины пикселя во внутренний формат цвета. А если внутренним форматом является целочисленный формат, то формат передачи пикселей должен быть одной из _INTEGER версий.

Но кроме этого, небо - это предел ... до тех пор, пока тебе не нравится выступление. Но это не так, как если бы вы отправляли GL_FLOAT данные на 16F текстуру, которая была особенно быстрой.

*: я упоминаю настольный OpenGL, потому что для OpenGL ES, в частности, требуется форматов для соответствия. Потому что им нравится производительность;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...