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

Имеет ли это смысл? Или я должен ожидать, чтобы получить лучшие результаты всегда?

0 ответов

Другие вопросы по тегам