Мне нужно реализовать рендеринг вне экрана в текстуру на устройстве ARM с аппаратным обеспечением PowerVR SGX.
Все сделано (использовались пиксельные буферы и API OpenGL ES 2.0). Единственная нерешенная проблема - очень медленная glReadPixels
функция.
Я не эксперт в OpenGL ES, поэтому я спрашиваю сообщество: возможно ли рендерить текстуры непосредственно в память пользовательского пространства? Или, может быть, есть какой-то способ получить аппаратный адрес области памяти текстуры? Какой-то другой метод (расширения EGL)?
Мне не нужно универсальное решение, просто работаю с решением для оборудования PowerVR.
Обновление: Немного больше информации о "медленной функции glReadPixels
". Скопируйте данные текстуры 512x512 RGB в память процессора:
glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_BYTE, &arr)
занимает 210 мс,
glReadPixels(0, 0, WIDTH, HEIGHT, GL_BGRA, GL_UNSIGNED_BYTE, &arr)
занимает 24 мс (GL_BGRA
не является стандартным для glReadPixels, это расширение PoverVR),
memcpy(&arr, &arr2, WIDTH * HEIGHT * 4)
занимает 5 мс
В случае больших текстур различия также больше.