Мое приложение зависит от чтения информации глубины обратно из кадрового буфера. Я реализовал это с помощью glReadPixels (0, 0, ширина, высота, GL_DEPTH_COMPONENT, GL_FLOAT и глубина_данных)
Однако, это работает неоправданно медленно, оно переносит мое приложение с плавных 30 кадров в секунду до медленных 3 кадров в секунду. Если я попытаюсь прочитать другие измерения или данные, они будут работать на приемлемом уровне.
Чтобы дать обзор:
- без glReadPixels -> 30 кадров в секунду
- glReadPixels (0, 0, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT и глубина_данных); -> 20 кадров в секунду, приемлемо
- glReadPixels (0, 0, ширина, высота, GL_RED, GL_FLOAT и глубина_данных); -> 20 кадров в секунду, приемлемо
- glReadPixels (0, 0, ширина, высота, GL_DEPTH_COMPONENT, GL_FLOAT и глубина_данных); -> 3 кадра в секунду, не приемлемо
Почему последний должен быть таким медленным по сравнению с другими вызовами? Есть ли способ исправить это?
ширина х высота приблизительно 100 х 1000, вызов становится все медленнее, когда я увеличиваю размеры.
Я также пытался использовать объекты пиксельного буфера, но это не оказывает существенного влияния на производительность, оно только задерживает медлительность до вызова glMapBuffer ().
(Я тестировал это на MacBook Air nVidia 320m OS X 10.6, как ни странно, мой старый MacBook Intel GMA x3100 получил ~ 15 кадров в секунду при чтении буфера глубины.)
ОБНОВЛЕНИЕ: Исключение GLUT_MULTISAMPLE из параметров glutInitDisplayMode привело к огромным различиям, вернув приложение снова к плавным 20 кадрам в секунду. Я не знаю, что делает опция в первую очередь, кто-нибудь может объяснить?