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

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

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

Спасибо,

Ларс


person Lars    schedule 26.04.2011    source источник


Ответы (1)


Я тоже столкнулся с этой проблемой. Для iOS вы можете проверить список доступных расширений с помощью параметра GL_EXTENSIONS — должен присутствовать GL_OES_texture_float. Но! Согласно спецификации это не дает возможности считывать значения 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);
person Paul E.    schedule 27.04.2011