我的应用程序依赖于从帧缓冲区读取深度信息。我已经用 glReadPixels(0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, &depth_data) 实现了这个
然而,这运行速度非常慢,它使我的应用程序从平稳的 30fps 变为滞后的 3fps。如果我尝试读取其他维度或数据,它会在可接受的水平上运行。
概述:
- 没有 glReadPixels -> 每秒 30 帧
- glReadPixels(0, 0, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth_data); -> 每秒 20 帧,可接受
- glReadPixels(0, 0, 宽度, 高度, GL_RED, GL_FLOAT, &depth_data); -> 每秒 20 帧,可接受
- glReadPixels(0, 0, 宽度, 高度, GL_DEPTH_COMPONENT, GL_FLOAT, &depth_data); -> 每秒 3 帧,不可接受
与其他调用相比,为什么最后一个调用如此缓慢?有什么办法可以补救吗?
宽度 x 高度大约为 100 x 1000,随着尺寸的增加,调用变得越来越慢。
我也尝试过使用像素缓冲区对象,但这对性能没有显着影响,它只会将缓慢延迟到 glMapBuffer() 调用。
(我已经在 MacBook Air nVidia 320m graphics OS X 10.6 上对此进行了测试,奇怪的是,我的旧 MacBook Intel GMA x3100 读取深度缓冲区的速度约为 15 fps。)
更新:将 GLUT_MULTISAMPLE 排除在 glutInitDisplayMode 选项之外,让应用程序再次恢复到平滑的 20fps 带来了天壤之别。我不知道该选项首先是做什么的,谁能解释一下?