OpenGL ES - glReadPixels против TextureCached
Мне нужно прочитать данные пикселей из кадрового буфера в OpenGL ES 2.0. Я знаю, что это легко сделать с помощью glReadPixels, но начиная с iOS 5 мы можем использовать объекты TextureCached для более быстрого чтения.
Я реализовал решение, предложенное Брэдом Ларсоном (я всегда буду ему благодарен, я думаю, что он делает большую работу для сообщества, делясь таким большим количеством знаний...) в более быстрой альтернативе glReadPixels в iPhone OpenGL ES 2.0
Кажется, все работает, я получаю правильные данные, и если я сравниваю их с glReadPixels, данные идентичны. Моя проблема возникла, когда я измерил производительность этих двух возможных решений (потребовалось время при получении данных).
Вот мои результаты:
(кадровый буфер и размер текстуры 320х480 пикселей)
GPUImageProcessingDemo [1252: 707] glReadPixels 2750 us
GPUImageProcessingDemo [1252: 707] Чтение текстур 1276 us
GPUImageProcessingDemo [1252: 707] glReadPixels 2443 us
GPUImageProcessingDemo [1252: 707] Чтение текстур 1263 us
GPUImageProcessingDemo [1252: 707] glReadPixels 2494 us
GPUImageProcessingDemo [1252: 707] Чтение текстур 1375 us
Что кажется очень интересным, поскольку это почти половина времени, необходимого для использования glReadPixels. Проблема в том, что когда я изменяю размер текстуры на что-то немного большее, я получаю следующие результаты:
(кадровый буфер и размер текстуры 480х620 пикселей)
GPUImageProcessingDemo [1077: 707] glReadPixels 2407 us
GPUImageProcessingDemo [1077: 707] Чтение текстур 2842 us
GPUImageProcessingDemo [1077: 707] glReadPixels 2392 us
GPUImageProcessingDemo [1077: 707] Чтение текстур 3040 us
GPUImageProcessingDemo [1077: 707] glReadPixels 2224 us
Имеет ли это смысл? Или я должен ожидать, чтобы получить лучшие результаты всегда?