Текстуры с плавающей точкой в OpenGL ES 2.0 на iOS без привязки к [0, 1]

Мне нужно gl_FragColor, чтобы «рисовать» значения с плавающей запятой, которые также могут быть отрицательными (x <0) и> 1.0. Затем я хочу использовать цветовой атрибут FBO, в котором эти значения отображаются, и использовать его в качестве текстуры в другом FBO. Теперь я прочиталhttp://www.khronos.org/opengles/sdk/docs/man/ (под glTexImage2D), что все значения ограничены диапазоном [0, 1], а также я не нашел инструкцию glClampColor. Есть ли возможность найти обходной путь здесь или у кого-то есть идея, которая может помочь мне с моей проблемой? :)

РЕШИТЬ

Это возможно, и значения вообще не ограничиваются [0, 1] при использовании текстур с плавающей запятой, но это работает только при использовании GL_HALF_FLOAT_OES в качестве внутреннего формата текстуры. Использование GL_FLOAT вместо этого приводит к неполному объекту кадрового буфера, что очень печально, потому что я строил таблицу с суммарной областью (SAT) и получил здесь большую проблему точности. Так что в целом на iPad2 поддерживаются только числа с плавающей точкой с половинной точностью (2 байта, 1 знаковый бит + 5 экспоненциальных бит + 10 дробных).

Рабочее создание цветовой текстуры прикрепления FBO

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_HALF_FLOAT_OES, NULL);

Еще одна вещь, которую стоит упомянуть: инструменты сообщат сообщение «Недопустимое перечисление для аргумента« тип »», но оно все равно работает. Кроме того, симулятор будет использовать текстуры с полной точностью вместо указанной половинной точности (я думаю, потому что такого типа данных в C нет). Вот почему у вас, вероятно, будет меньше проблем с точностью на симуляторе.

Но самое запутанное, что GL_OES_texture_float поддерживается при печати glGetString (GL_EXTENSIONS). Однако, как упоминалось ранее, это не работает.

Ответы на вопрос(2)

Ваш ответ на вопрос