OpenGL ES 2.0:glReadPixels() с текстурами float или half_float

Я пишу приложение OpenGL ES 2.0 для iPhone (iOS 4.1). В конце вычислений, которые выполняются в шейдерах, мне нужно записать некоторые данные в процессор. Насколько я знаю, это можно сделать с помощью glReadPixels(). Чтобы сохранить точность, я хочу использовать текстуры half_float или float между шейдерами, которые, похоже, поддерживаются расширениями.

Вопрос: можно ли читать текстуры float или half_float с помощью glReadPixels()?

Спасибо,

Lars

1 ответ

Решение

Я тоже столкнулся с этой проблемой. Для iOS вы можете проверить список доступных расширений с параметром GL_EXTENSIONS - должен присутствовать GL_OES_texture_float. Но! Согласно спецификации это не дает возможности читать значения с плавающей запятой из GPU. Это из документации glReadPixels():

Допускаются только две пары параметров формат / тип. GL_RGBA/GL_UNSIGNED_BYTE всегда принимается, а другую приемлемую пару можно обнаружить, запросив GL_IMPLEMENTATION_COLOR_READ_FORMAT и GL_IMPLEMENTATION_COLOR_READ_TYPE.

Таким образом, вы можете проверить доступные типы / форматы, которые вы можете прочитать, с помощью кода ниже:

GLint ext_format, ext_type;
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_FORMAT, &ext_format);
glGetIntegerv(GL_IMPLEMENTATION_COLOR_READ_TYPE, &ext_type);
Другие вопросы по тегам