После более чем часа поиска ответа (пробуя что-то из «Руководства по программированию OpenGL ES 2.0» Мунши, ища документацию Apple, ища StackOverflow), я все еще не могу заставить работать glReadPixels. Я пробовал так много разных способов, и лучшее, что у меня есть, - это колеблющиеся (и, следовательно, неправильные) результаты.

Я установил простой случай, когда четырехугольник визуализируется с помощью шейдеров на экране, и я вручную присвоил gl_FragColor чистый красный цвет, поэтому на экране не должно быть абсолютно никаких колебаний. Затем я пробую что-то вроде следующего кода перед presentRenderbuffer:

GLubyte *pixels = (GLubyte *)malloc(3);

glReadPixels(100, 100, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixels);

NSLog(@"%d", (int)pixels[0]);

free(pixels);

В основном, пытаясь прочитать один пиксель в (100, 100) и прочитать его красное значение, которое, как я ожидаю, будет либо 1, либо 255. Вместо этого я получаю такие значения, как 1522775, 3587 и 65536, хотя изображение на экране никогда не меняется. Я сделал что-то подобное на Mac, и он работал нормально, но по какой-то причине я не могу заставить это работать на iOS. У меня есть приведенное выше утверждение (и я пробовал несколько вариантов, с которыми я сталкивался в Интернете) после вызова glDrawArrays() и перед вызовом presentBuffer:. Я даже пробовал метод из «Руководства по программированию OpenGL ES 2.0», который обрабатывает все случаи типов чтения и форматов чтения, запрашивая информацию о фреймбуфере у glGetIntegerv ().

Любые идеи? Я уверен, что кто-то скажет: «Воспользуйтесь функцией поиска», но я всерьез высох и не могу продолжить. Спасибо за вашу помощь!

0
Mike 14 Мар 2013 в 13:03

1 ответ

Лучший ответ

Из руководства Opengl ES:

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

Итак, вам лучше использовать GL_RGBA вместо GL_RGB.

1
Dirk 14 Мар 2013 в 13:21
Ни за что! Я серьезно пробовал это раньше, и это не сработало. Вдруг работает. Я абсолютно не знаю, чем то, что я делаю сейчас (что работает), отличается от того, что я делал раньше (когда пробовал GL_RGBA). Но спасибо!
 – 
Mike
14 Мар 2013 в 13:40
@Mike, я не могу заставить GL_RGB работать на iOS. Не могли бы вы поделиться своим кодом?
 – 
grisevg
7 Дек 2016 в 02:37