После более чем часа поиска ответа (пробуя что-то из «Руководства по программированию 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 ().
Любые идеи? Я уверен, что кто-то скажет: «Воспользуйтесь функцией поиска», но я всерьез высох и не могу продолжить. Спасибо за вашу помощь!
1 ответ
Из руководства Opengl ES:
Допускаются только две пары параметров формат / тип. GL_RGBA / GL_UNSIGNED_BYTE всегда принимается, а другую приемлемую пару можно обнаружить, запросив GL_IMPLEMENTATION_COLOR_READ_FORMAT и GL_IMPLEMENTATION_COLOR_READ_TYPE.
Итак, вам лучше использовать GL_RGBA вместо GL_RGB.
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.