GLSL и glReadPixels - PullRequest
       4

GLSL и glReadPixels

1 голос
/ 15 ноября 2011

Я использую OpenGL ES 2.0 и GLSL для рисования объектов.Затем я хочу прочитать пиксель из того, что рисует мой фрагментный шейдер на моем экране.Я смешиваю две текстуры в оттенках серого, и в конце моего фрагментного шейдера у меня есть:

gl_FragColor = vec4(something...blending textures);

Я знаю, что gl_FragColor означает, что конечный цвет будет записан в буфере кадра.(Согласно http://nehe.gamedev.net/article/glsl_an_introduction/25007/) Учитывая это, я сделал что-то вроде

GLubyte *pixels = new GLubyte[320*240];
glReadPixels(0, 0, 320,240, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixels);

После рисования изображения, используя это, сначала я получаю то же самое, что и исходная текстура1, а затем получаю черный пустой цвет.Может кто-нибудь помочь мне, что не так? Нужно ли что-то делать с FBO? Я как-то потерян ... :(

1 Ответ

3 голосов
/ 15 ноября 2011

В соответствии с канонической документацией ES 2.0 для glReadPixels, параметр формата:

Указывает формат данных пикселей.Допустимы следующие символические значения: GL_ALPHA, GL_RGB и GL_RGBA.

Так что GL_LUMINANCE не поддерживается форматом чтения в GL ES.

Кроме того, при условии, что у вас естьнекоторый рабочий буфер кадров, и вы применяете свой фрагментный шейдер путем рендеринга надлежащим образом размещенного фрагмента геометрии в буфер кадров, glReadPixels должно быть правильным для использования.

...